2016-09-12 2 views
1

私は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 

でも同じエラーが発生します。

私はコンパイル済みコード(.jsjs.mapファイル)を削除する必要があると思います。誰がこれらの場所を知っていますか?それとも、清潔にすることは可能ですか?

tutorial(ステップ3)において

UPDATEは、その代わりに、実際のファイルのシンボリックリンクを使用します。シンボリックリンクを設定しても、このエラーは発生しません。しかし、リモートサーバ上で動作させるためには、シンボリックリンクを実際のファイルに置き換えなければなりませんでした。

シンボリックリンクは流星プロジェクトで使用され、重複を避けるためにIonicプロジェクトのファイルを指していました。

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

UPDATE

私はinonic servemeteorの両方を実行しています。

多分それは問題ですか?私のディレクトリ構造:

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

私が実行します。

/theWhoZoo/ionic serve 
/theWhoZoo/api/meteor 

tutorialはこれをしなかったので、私はこれをしなかった理由はあります。

UPDATE

私はこの問題は、次のようだと思うが、私はそれを解決する方法がわかりません。

enter image description here

あなたはクローム開発ツールから見ることができるように、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シンボリックリンクを作ることで

はあなたに

答えて

1

SOLUTIONありがとうございます。

関連する問題