RequireJS:相对于data-main文件加载模块

时间:2017-08-25 14:36:44

标签: requirejs requirejs-optimizer

我正在使用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
});

1 个答案:

答案 0 :(得分: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值。