0

我正在使用 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我用来缩小所有资产并组合一些模块的功能

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
});
4

1 回答 1

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属性将捆绑的配置写入文件,这样您就无需手动编写配置。更多信息:https ://github.com/requirejs/r.js/blob/master/build/example.build.js

您可以在 r.js 回调中更改 baseUrl 值。

于 2017-08-27T02:52:04.843 回答