2017-08-25 63 views
0

我正在使用RequireJS加載一些模塊。RequireJS:相對於數據主文件加載模塊

我正在使用鏡像CDN提供靜態資產。問題是,模塊相對加載到網站域名,而不是數據,主文件,使模塊加載這樣:

my-website.com/ 
↳ cdn.com/assets/js/require-main.min.js 
    ↳ my-website.com/assets/js/helper-module.js 
    ↳ my-website.com/assets/js/utility-module.js 

有沒有一種辦法相對加載模塊的數據,主文件,以便爲使用CDN的模塊提供服務?

my-website.com/ 
↳ cdn.com/assets/js/require-main.min.js 
    ↳ cdn.com/assets/js/helper-module.js 
    ↳ cdn.com/assets/js/utility-module.js 

我不能硬編碼的CDN域中的任何位置,因爲它並不總是相同的。


這是require-main.js

requirejs.config({ 
    baseUrl: "../js/", 
    waitSeconds: 15, 
    paths: { 
     helper: "helper-module", 
     ... 
    } 
}); 

的樣本,這是rjs.optimize功能I中縮小的全部資產,並結合一些模塊

rjs.optimize({ 
    appDir: './assets/js/', 
    baseUrl: ".", 
    mainConfigFile: './assets/js/require-main.js', 
    dir: './public/assets/js/', 
    preserveLicenseComments: true, 
    optimize: 'uglify2', 
    findNestedDependencies: true, 
    logLevel: 0, 
    uglify2: { 
     mangle: false 
    }, 
    modules: [ 
     { 
      name: 'require-main' 
      ... 
     } 
    ], 
    removeCombined: true, 
    writeBuildTxt: false 
}); 
+0

你的構建是否應該將所有**模塊合併到一個包中?如果是,那麼問題不在於CDN,而在於RequireJS需要在包之外獲取文件。 – Louis

+0

@Louis我編輯了我的問題:一些核心模塊被組合,但我仍然需要一些未捆綁的額外模塊。 – webpn

回答

0

在製作(當你使用CDN服務的願望),提供baseUrl作爲CDN域域。 requirejs優化器將配置實例輸出到appDir。如果您正在從CDN加載文件,則可能必須將baseUrl值更改爲CDN URL。

require.config({ 
    baseUrl : "https://yourcdn.com", 
    paths : { 
     module1: 'path/to/module1', 
     module2: 'path/to/module2' 
    }, 
    bundles: { 
    bundle1 : ['moduleA', 'moduleB'] 
    } 
}) 

要知道,如果你的模塊依賴於第三方AMD模塊 http://requirejs.org/docs/optimization.html#empty

閱讀本太,因爲它似乎使用的是包,使用bundlesConfigOutFile屬性捆綁配置寫入文件,所以你不需要手動編寫配置。 For more:https://github.com/requirejs/r.js/blob/master/build/example.build.js

您可以更改r.js回調中的baseUrl值。

+0

我想過在baseUrl中包含CDN域,但是我不能對CDN域進行硬編碼,因爲我將不得不使用許多cdn提供程序,並使用不同的域,這些域會頻繁更改。 – webpn

+0

有一個包含CDN域名列表的json文件。您可以使用正則表達式在rjs優化回調中根據域名生成輸出。 –

相關問題