我是Meteor的新手,所以如果这是一个基本问题,请原谅。
我有一个Meteor应用程序,我也在this tutorial之后使用Ionic2。
但是当我启动Ionic客户端时,我在运行时遇到以下错误:
Error: There is already a collection named "chats"
我相信它来自server/collections.ts
,因为当我删除导出时,我在启动时没有收到错误,但是当我尝试访问使用该集合的页面时,我收到以下错误:< / p>
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</ChatsPage.prototype.findChats@http://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');
有人可以提供建议吗?
更新
我找到this,并将以下内容添加到我的tsconfig.json。
"compileOnSave": false, "buildOnSave": false
但我仍然得到同样的错误。
我相信我需要删除已编译的代码(.js
和js.map
文件)。有谁知道这些在哪里?或者可以做一些干净的事情吗?
更新
在tutorial(步骤3)中,它使用符号链接而不是实际文件。当我使用符号链接设置它时,我不会收到此错误。但是,为了使它能够在远程服务器上运行,我不得不用真实文件替换符号链接。
符号链接在流星项目中使用,并指向Ionic项目中的文件,以避免重复。
$ ln -s ../typings
$ ln -s ../tsconfig.json
$ ln -s ../tslint.json
更新
我正在同时运行inonic serve
和meteor
。
也许这就是问题所在?我的目录结构:
/theWhoZoo (ionic app)
/theWhoZoo/api (meteor app)
我跑:
/theWhoZoo/ionic serve
/theWhoZoo/api/meteor
我之所以这样做是因为tutorial做到了这一点。
更新
我认为问题如下,但我不知道如何解决。
从Chrome开发工具中可以看到,有两个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
重新生成。
任何建议都表示赞赏。
谢谢
答案 0 :(得分:1)
解决方案:
通过使node_modules
成为符号链接,即只有一个node_modules
,修复此问题。