簡體   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