[英]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.