Requirejs 缓存破坏方案与r.js(require.js)不兼容?

Requirejs 缓存破坏方案与r.js(require.js)不兼容?,requirejs,browser-cache,requirejs-optimizer,Requirejs,Browser Cache,Requirejs Optimizer,在我的应用程序中,我希望有一个环境配置,在每次部署时使用不同的版本名,这样应用程序就可以正确地被缓存破坏,用户的浏览器缓存中就不会有过时的代码版本。注:我一直在关注这一点 因此,在main.js中,在我做任何事情之前,我使用一个通用配置调用require.config,该配置使用当前日期/时间来破坏环境配置文件上的缓存,然后在加载环境配置后,我使用环境“config.version”作为urlArgs的一部分,以确保包含新部署的代码,而不是过时的版本。请注意,配置文件中的对象还具有在整个应用程序

在我的应用程序中,我希望有一个环境配置,在每次部署时使用不同的版本名,这样应用程序就可以正确地被缓存破坏,用户的浏览器缓存中就不会有过时的代码版本。注:我一直在关注这一点

因此,在main.js中,在我做任何事情之前,我使用一个通用配置调用require.config,该配置使用当前日期/时间来破坏环境配置文件上的缓存,然后在加载环境配置后,我使用环境“config.version”作为urlArgs的一部分,以确保包含新部署的代码,而不是过时的版本。请注意,配置文件中的对象还具有在整个应用程序中使用的其他属性(例如google analytics账号)


如果我删除了第一个require.config,它允许我设置环境/配置依赖项,那么我的r.js构建文件似乎就可以了,但是当我重新添加它时,我用来对第三方脚本进行分组的基础结构js模块阻塞了,说它找不到我的下划线库(或者我在其中包含的任何库)。请注意,即使我没有包括environment/config,只进行了两个require.config调用,也会产生相同的错误。是否有两个require.config调用会导致此错误的原因?谢谢你的帮助

//Error:
Error: ENOENT, no such file or directory '<%root_folder%>\dist\js\underscore.js'
    In module tree:
        infrastructure
这是构建文件

//build file
({
    mainConfigFile : "js/main.js",
    appDir: "./",
    baseUrl: "js",
    removeCombined: true,
    findNestedDependencies: true,
    dir: "dist",
    optimizeCss: "standard",
    modules: [
        {
            name: "main",
            exclude: [
                "infrastructure"
            ]
        },
        {
            name: "infrastructure"
        }
    ],
    paths: {
        "cdn-jquery": "empty:",
        "jquery":"empty:",
        "bootstrap.min": "empty:"
    }
})
这里是infrastructure.js

 define(["underscore"], function(){});
配置文件(将有更多键,如谷歌分析账号和其他特定于环境的信息。)


我正在运行的命令:“r.js-o build.js”

好的,是的,这是两个
require.config
调用的问题。在运行时,多次调用config绝对没有问题。但是,在构建时,
r.js
无法跟踪这些调用。因此,如果您的构建依赖于以后对
require.config
的任何调用,那么您将遇到问题


我发现您对
require.config
的第二次调用不包含根据第一次调用后加载的内容计算的任何值,除了
urlArgs
,因此您可以将第二次调用中的所有内容移到第一次调用中,除了
urlArgs

。@路易斯,我根据请求添加了配置文件。还有什么不清楚的吗?我将错误复制到问题文本中,包括infrastructure.js,并删除了代码中所有多余的引用,以获得观察问题的最小案例。基本上,“infrastructure.js”中包含的任何内容都无法识别,因此会抛出一个错误。如果我删除了对环境/config文件的依赖来设置代码,那么infrastructure JS不会抱怨找不到库。请注意,即使我没有包含环境/config,只进行了两次require.config调用,也会产生相同的错误,这意味着我实际尝试了:require.config({//first config object});后跟require.config({//second config object});在同一个作用域级别内,出现了错误。是的,我确实重新构造了调用,但这意味着我的CDN include必须是内联的,而不是来自配置文件,除非我有其他构建魔法来替换它们。我想,随着我深入编写部署脚本的过程,我可能会找到一些解决方案来解决r.js外部的问题,但目前我还没有找到一种方法来绕过这个限制。谢谢你的帮助!在大型应用程序中,我发现自己在构建过程中使用脚本生成配置或修改配置。随着应用程序变得越来越复杂,这似乎是不可避免的。
 define(["underscore"], function(){});
//config.js
define({version:"VERSION-XXXX", cdn: { jquery: "//path-to-jquery-1.11.0.min" }});