我正在使用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
的值,以及为什么我现在得到这个错误,因为它从未被声明过。
myGlobal
格式时,我是否可以采取措施确保umd
在未声明的情况下进行实例化?