[英]Module loading order in requirejs
我们在一个现有项目中遇到了一个有趣的问题,
babel-polyfill
作为该项目的AMD模块。 r.js
进行了优化和捆绑 我们的主文件如下所示:// main.js
require(
[
'router',
'someOtherModule', /* In reality we have quite a few more here */
], function(Router, AppModule) {/*... app code ...*/}
)
所以我们想加载此polyfill
的任何其他模块在加载之前模块main.js
什么不起作用:
router
-这种r.js吐出来,但也不能保证该缩小的代码polyfill
实际上是在代码前router
,它没有规定的行为,因此不能指望。 require['polyfill']
调用包装所有内容似乎使r.js优化器搞砸了,如果将其他模块包装在require[]
,则似乎不会将它们捆绑在一起。 polyfill
是AMD模块,因此我们不能仅将其包含在<HEAD>
选项3仍在研究中,以查看是否可行。
所以问题是-我们正在尝试做些什么?
每当我加载polyfills我永远永远永远载入他们在一个script
在元素head
。 我从不通过RequireJS加载它们。 正如您所发现的,通过RequireJS加载它们会引起各种问题。 你写了:
由于polyfill是AMD模块,因此我们不能仅将其包含在
<HEAD>
。
babel-polyfill
软件包将自身构建为脚本,可以使用Browserify通过script
元素加载该script
:
#!/bin/sh
set -ex
BROWSERIFY_CMD="../../node_modules/browserify/bin/cmd.js"
UGLIFY_CMD="../../node_modules/uglify-js/bin/uglifyjs"
mkdir -p dist
node $BROWSERIFY_CMD lib/index.js \
--insert-global-vars 'global' \
--plugin bundle-collapser/plugin \
--plugin derequire/plugin \
>dist/polyfill.js
node $UGLIFY_CMD dist/polyfill.js \
--compress keep_fnames,keep_fargs,warnings=false \
--mangle keep_fnames \
>dist/polyfill.min.js
如果检查dist/polyfill.js
,则会看到它不是AMD模块。 (该define
函数调用不是AMD的define
功能。)
您应该能够使此方法适应您使用的babel-polyfill
任何子集。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.