如何使用r.js从构建中排除urlArgs

dVa*_*ion 5 javascript requirejs r.js

我使用r.js优化器根据构建配置文件组合js文件,如文档中所建议的那样.这是我的build-config.js:

({
    baseUrl: ".",
    paths: {
        jquery: '//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min',
    },
    name: "main",
    out: "main-built.2013-07-30.js"
})
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它基于main.js文件,这里是它的代码:

requirejs.config({
    baseUrl: 'scripts',
    urlArgs: "bust=" + (new Date()).getTime(),
    paths: {
        jquery: [
            '//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min',
            'lib/jquery-1.9.1.min',
        ],
    },
});

require([
    'layout',
    'cue',
], function() {

});
Run Code Online (Sandbox Code Playgroud)

如果我保留urlArgs: "bust=" + (new Date()).getTime()main.js中的所有外部文件(这里是从CDN加载的jquery)看起来像.../jquery.js?bust=1377412213

因此,每当我进行构建时,PITA都会注释掉这一行.我已经阅读了所有文档并搜索了解决方案,但一切都是徒劳的.也许我做错了?

Jul*_*sto 1

以下解决方案适用于您的情况,即您在 r.js 构建中重命名 main.js 文件:

urlArgs: require.specified('main') ? "bust="+(new Date()).getTime() : null
Run Code Online (Sandbox Code Playgroud)

上面的代码片段将检查名为“main”的模块,该模块在开发中匹配,但在生产中不匹配,其中该模块名为“main-built.2013-07-30”。

我已经在开发和生产版本中进行了测试,它有效!:-)

关于 require.specified() 函数: 使用 requirejs 是否可以检查模块是否已定义而不尝试加载它?