meteor.js 中用于聚合外部包的包

Package for aggregating external packages in meteor.js

我正在创建 meteor 应用程序,我决定将它分成包,这样我就可以控制文件加载顺序。 但是,许多包具有共同的依赖项(其他外部包),如 reactmeteorhacks:flow-router。我想创建包含所有这些依赖项的主 myapp:app 包,我的应用程序中的其他包将暗示。

这是app package.js:

Package.describe({
    name: 'myapp:app',
    version: '0.0.1'
});


Package.onUse(function(api) {
    api.versionsFrom('1.2.1');

    // All external packages that will be used by other local packages
      api.use([
          'twbs:bootstrap',
      ], 'client');

      api.use([
          'ecmascript',
          'react',
          'meteorhacks:flow-router'
      ], ['client', 'server']);
});

我有一个包 myapp:taskslist 意味着 myapp:app:

Package.describe({
    name: 'myapp:taskslist',
    version: '0.0.1'
});

Package.onUse(function(api) {
    api.versionsFrom('1.2.1');

    api.imply(['myapp:app']);

    api.addFiles([
        'client/tasksList.jsx',
        'client/task.jsx',
        'main.jsx'
    ], ['client']);
});

然而它不起作用。我有一个错误 No plugin known to handle file 'client/taskList.jsx' 因为 myapp:tasksList,没有安装 react 插件。不应该 api.imply() 共享 reactmyapp:tasksList 包吗?这个问题有什么好的解决方案?

直接回答你的问题,没有imply不会把react暴露给myapp:tasksList

你需要这样想:

IMPLY passes references OUT
USE takes references IN

myapp:tasksList 中的所有含义是允许使用 myapp:tasksList 的任何人访问 myapp:app.

为了让您在 myapp:tasksList 中使用 myapp:app(以及它公开的所有引用),您还需要添加

  api.use([
      'myapp:app',
  ]);

myapp:tasksList