【问题标题】:Webpack creating two Mongo Collections in constants (angular-meteor)Webpack 在常量中创建两个 Mongo 集合(角流星)
【发布时间】:2016-09-14 00:27:34
【问题描述】:

我是 Meteor 的新手,所以如果这是一个基本问题,请原谅。

我有一个 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</ChatsPage.prototype.findChats@http://localhost:8100/build/js/app.bundle.js:104352:14

server/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 步)中,它使用符号链接而不是实际文件。当我使用符号链接设置它时,我没有收到此错误。但是,为了让它在远程服务器上工作,我必须用真实文件替换符号链接。

符号链接在meteor项目中使用,指向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 重新生成。

任何建议表示赞赏。

谢谢

【问题讨论】:

    标签: meteor ionic2 angular-meteor


    【解决方案1】:

    解决方案:

    通过将node_modules 设为符号链接,即只有一个node_modules,修复了此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2016-08-28
      • 1970-01-01
      • 2015-04-08
      相关资源
      最近更新 更多