Я новичок в Метеор, поэтому, пожалуйста, извините меня, если это основной вопрос.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
Я думаю, что проблема заключается в следующем, но я не знаю, как ее решить.
Как вы можете видеть из 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
.
Любые рекомендации оцениваются.
Спасибо