我正在使用 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 嵌套全局变量?
- 使用format
myGlobal
时,如果尚未声明,我可以做些什么来确保实例化?umd
github问题在这里:https ://github.com/jspm/jspm-cli/issues/2254