如何在同一个全局命名空间中导出不同的包

时间:2017-02-16 17:10:02

标签: javascript bundle systemjs jspm systemjs-builder

我正在使用jspm 0.17-beta.32开展反应项目。

应用程序由多个包组成(在jspm.config文件中定义) 我希望每个包都作为静态构建独立捆绑,并将其值导出到同一个全局命名空间中。

为此,我使用以下命令:

jspm build "<name>" build/<name>.js 
    --format umd 
    --externals react react-dom 
    --global-deps '{"react":"React","react-dom":"ReactDOM"}' 
    --global-name myGlobal 
    --minify 
    --production

在我的代码中:

// inside src/<name>/index.js
import React from 'react';
import MainComponent from '<name>/components/MainComponent.jsx';

export const <name> = { MainComponent };

<name>是我的包裹的名称。

问题在于,如果我包含两个捆绑包,则最后一个捆绑包会占用第一个捆绑包。

因此,如果我在命令中将全局更改为导出到myGlobal.<name>,并将js文件中的导出更改为:

// inside src/<name>/index.js
import React from 'react';
import MainComponent from '<name>/components/MainComponent.jsx';

export default MainComponent;

然后在我的html文件中,控制台会记录错误:myGlobal is not defined

所以我查看了静态构建文件,它基本上就是这样做的。

// inside build/<name>.js
(
  ...
  factory function here, tracking dependencies
  ...
)(function(factory) {
  if (typeof define == 'function' && define.amd)
    define(["react-dom","react"], factory);
  else if (typeof module == 'object' && module.exports && typeof require == 'function')
    module.exports = factory(require("react-dom"), require("react"));
  else
    myGlobal.<name> = factory(ReactDOM, React);
});

这解释了为什么第一次覆盖myGlobal的值,以及为什么我现在得到这个错误,因为它从未被声明过。

  • 有没有办法使用systemJs嵌套全局变量?
  • 使用myGlobal格式时,我是否可以采取措施确保umd在未声明的情况下进行实例化?

github问题:https://github.com/jspm/jspm-cli/issues/2254

0 个答案:

没有答案