从包中访问meteor应用程序的导入目录?

时间:2016-06-18 20:40:42

标签: javascript meteor module package ecmascript-6

Meteor应用程序目录布局:

imports/
  api/
    collections/
      MyCollectionFile.js

packages/
  mypackage/
      mypackageMain.js

我可以从包文件中导出任何内容并在应用程序中使用它,这没关系。但是我怎么能在包中使用“import”,就像反过来一样?

// mypackageMain.js
if (Meteor.isServer) {
    require ('/imports/api/collections/MyCollectionFile.js');
};

import '/imports/api/collections/MyCollectionFile.js';

我尝试使用路径'../../ imports / api / collections / MyCollectionFile.js',但它根本不起作用。我无法从包中访问此文件。

对于import和require,我收到以下错误:

W20160618-23:25:59.486(3)? (STDERR) Error: Cannot find module '../../imports/api/collections/MyCollectionFile.js'
W20160618-23:25:59.487(3)? (STDERR)     at require (packages/modules-runtime/.npm/package/node_modules/install/install.js:85:1)

2 个答案:

答案 0 :(得分:2)

想出这是不可能的。

但是,将集合移动到包并导出它们会使集合可用于其他包和应用程序。

答案 1 :(得分:1)

我也一直在讨论这个问题并找到了两个解决方案,但两者都不相上下。

  1. 将要导入的内容安装为npm包。 $npm install --save ./imports/<the thing>
  2. 使用npm link创建指向要导入的内容的链接。
  3. 两种解决方案都要求您在要导入的目录中有package.json,并且两者都不会转换代码,只是针对提供的节点版本运行它。

    对于transile问题,一个可能的解决方案是使用一个加载器插件,或以某种方式为System.js提供一个额外的配置,告诉它在导入时转换代码。