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