0

我正在使用 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 嵌套全局变量?
  • 使用formatmyGlobal时,如果尚未声明,我可以做些什么来确保实例化?umd

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

4

0 回答 0