繁体   English   中英

requirejs中的模块加载顺序

[英]Module loading order in requirejs

我们在一个现有项目中遇到了一个有趣的问题,

  1. 我们正在使用requireJS
  2. 我们所有的模块都符合AMD标准(并且我们有很多模块)
  3. 我们需要将babel-polyfill作为该项目的AMD模块。
  4. 无法将此依赖项手动一一添加到所有模块
  5. 我们的代码使用r.js进行了优化和捆绑

我们的主文件如下所示:// main.js

require(
[
    'router',
    'someOtherModule', /* In reality we have quite a few more here */
], function(Router, AppModule) {/*... app code ...*/}
)

所以我们想加载此polyfill的任何其他模块在加载之前模块main.js

什么不起作用:

  1. 垫片-垫片用于非AMD模块。
  2. 添加填充工具上面的列表router -这种r.js吐出来,但也不能保证该缩小的代码polyfill实际上是在代码前router ,它没有规定的行为,因此不能指望。
  3. 用另一个require['polyfill']调用包装所有内容似乎使r.js优化器搞砸了,如果将其他模块包装在require[] ,则似乎不会将它们捆绑在一起。
  4. 由于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM