私はMeteorを初めて使用しています。2つのMongoコレクションを定数で作成するWebpack
私はMeteorアプリを持っていますが、this tutorialの次のIonic2も使用しています。
しかし、私はイオンクライアントを起動したとき、私は、実行時に次のエラーを取得しています:
私は輸出を削除すると、私は、起動時にエラーを得ることはありませんので、server/collections.ts
から来ていると信じてい
Error: There is already a collection named "chats"
、
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
ファイル)を削除する必要があると思います。誰がこれらの場所を知っていますか?それとも、清潔にすることは可能ですか?
tutorial(ステップ3)において
UPDATEは、その代わりに、実際のファイルのシンボリックリンクを使用します。シンボリックリンクを設定しても、このエラーは発生しません。しかし、リモートサーバ上で動作させるためには、シンボリックリンクを実際のファイルに置き換えなければなりませんでした。
シンボリックリンクは流星プロジェクトで使用され、重複を避けるために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
私はこの問題は、次のようだと思うが、私はそれを解決する方法がわかりません。
あなたはクローム開発ツールから見ることができるように、2つのcollections.ts
があります。理由はわかりませんが、これはwebpack
に関連しています。
これをデバッグすると、collections.ts?97d5
は完全に実行され、chats
コレクションを取得します。次に、chats
が存在するため、collections.ts
が呼び出され、エラーが発生します。
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はあるが、それを実行したとき、私は、開発ツールの二つがあります見ることができます。
/theWhoZoo/api/server/collections.ts
コンパイルとは何か関係があります。実行時には2つあります。
エラーはクライアント上にあるようです。私はサーバーコードを呼び出すテストユーティリティを持っており、エラーなしで呼び出します。私はそれが呼び出されることを見つけることができます
:
theWhoZoo/www/build/js/app.bundle.js.map
..."webpack:///./api/server/collections.ts?97d5"...
私は、このファイルを削除しようとしたが、それだけでionic serve
から再生されます。
ご了承ください。これを固定、すなわち、一つだけnode_modules
を持つ、node_modules
シンボリックリンクを作ることで
:
はあなたに