2016-09-12 2 views
1

Я новичок в Метеор, поэтому, пожалуйста, извините меня, если это основной вопрос.Webpack, создающий две Монго Коллекции в константах (угловой метеор)

У меня есть приложение Meteor, и я также использую Ionic2 после this tutorial.

Но я получаю следующее сообщение об ошибке во время выполнения, когда я запустить клиент Ionic:

Error: There is already a collection named "chats" 

Что я считаю, происходит от server/collections.ts, потому что, когда я удаляю экспорт Я не получаю сообщение об ошибке при запуске, но когда я пытаюсь получить доступ к странице, которая использует коллекцию, я получаю следующее сообщение об ошибке:

EXCEPTION: Error: Uncaught (in promise): EXCEPTION: Error in ./ChatsPage class ChatsPage_Host - inline template:0:0 
ORIGINAL EXCEPTION: TypeError: collections_1.Chats is undefined 
ORIGINAL STACKTRACE: 
ChatsPage</[email protected]://localhost:8100/build/js/app.bundle.js:104352:14 

сервера/collections.ts

import {Mongo} from 'meteor/mongo'; 
import {Chat, Message} from 'api/models'; 

export const Chats = new Mongo.Collection<Chat>('chats'); 
export const Messages = new Mongo.Collection<Message>('messages'); 

Может кто-нибудь посоветуете?

UPDATE

Я нашел this, и добавил следующее к моей tsconfig.json.

"compileOnSave": false, "buildOnSave": false 

, но я все равно получаю ту же ошибку.

Я считаю, что мне нужно удалить скомпилированный код (.js и js.map файлов). Кто-нибудь знает, где это? Или можно сделать что-то чистое?

UPDATE

В tutorial (шаг 3), она использует символические ссылки вместо реальных файлов. Когда я настроюсь с символическими ссылками, я не получаю эту ошибку. Однако для того, чтобы он работал на удаленном сервере, мне пришлось заменить символические ссылки на реальные файлы.

Символьные ссылки были использованы в проекте метеора и указывали на файлы в проекте Ionic, чтобы избежать дублирования.

$ ln -s ../typings 
$ ln -s ../tsconfig.json 
$ ln -s ../tslint.json 

UPDATE

Я бегу как inonic serve и meteor.

Возможно, в этом проблема? Мой реж структура:

/theWhoZoo (ionic app) 
/theWhoZoo/api (meteor app) 

Я бегу:

/theWhoZoo/ionic serve 
/theWhoZoo/api/meteor 

Причина, почему я сделал это потому, что tutorial сделал это.

UPDATE

Я думаю, что проблема заключается в следующем, но я не знаю, как ее решить.

enter image description here

Как вы можете видеть из Chrome Dev Tools, есть два collections.ts. Я не уверен, почему, но это связано с webpack.

Когда я отлаживаю это, collections.ts?97d5 отлично работает и получает коллекцию chats. Затем вызывается collections.ts и имеет ошибку, поскольку chats уже существует.

webpack.config.js

var camelCase = require('lodash.camelcase'); 
var upperFirst = require('lodash.upperfirst'); 
var webpack = require('webpack'); 

var isRelease = process.argv.indexOf('--release') > -1; 

var config = module.exports = { 
    entry: './app/app.ts', 
    output: { 
    path: __dirname + '/www/build/js', 
    filename: 'app.bundle.js' 
    }, 
    externals: [ 
    'cordova', 
    resolveExternals 
    ], 
    resolve: { 
    extensions: ['', '.webpack.js', '.web.js', '.ts', '.js'], 
    alias: { 
     api: __dirname + '/api/server' 
    } 
    }, 
    module: { 
    loaders: [ 
     { test: /\.ts$/, loader: 'ts-loader' } 
    ] 
    }, 
    devtool: 'source-map' 
}; 

if (isRelease) { 
    config.plugins = [ 
    new webpack.optimize.UglifyJsPlugin({ 
     compress: { warnings: false } 
    }) 
    ]; 
} 

function resolveExternals(context, request, callback) { 
    return meteorPack(request, callback) || 
    cordovaPlugin(request, callback) || 
    callback(); 
} 

function cordovaPlugin(request, callback) { 
    var match = request.match(/^cordova\/(.+)$/); 
    var plugin = match && match[1]; 

    if (plugin) { 
    plugin = camelCase(plugin); 
    plugin = upperFirst(plugin); 
    callback(null, 'window.cordova && cordova.plugins && cordova.plugins.' + plugin); 
    return true; 
    } 
} 

function meteorPack(request, callback) { 
    var match = request.match(/^meteor\/(.+)$/); 
    var pack = match && match[1]; 

    if (pack) { 
    callback(null, 'window.Package && Package["' + pack + '"]'); 
    return true; 
    } 
} 

Существует только один collections.ts, но когда он работает, я могу видеть, что есть два из Dev Tools.

/theWhoZoo/api/server/collections.ts 

Так что это должно быть что-то делать с компиляцией, что во время выполнения есть два.

Похоже, что ошибка указана только на клиенте. У меня есть утилита для тестирования, которая вызывает код сервера, и вызывает ее без ошибок.

я могу найти, что он вызывается из:

theWhoZoo/www/build/js/app.bundle.js.map 

..."webpack:///./api/server/collections.ts?97d5"... 

Я попытался удалить этот файл, но он просто получает регенерировать из ionic serve.

Любые рекомендации оцениваются.

Спасибо

ответ

1

РЕШЕНИЕ:

Делая node_modules символической ссылкой, то только имея один node_modules, исправил.

Смежные вопросы