【问题标题】:Optimization fails when passing a variable with a list of dependencies to define()将具有依赖项列表的变量传递给 define() 时优化失败
【发布时间】:2025-12-05 04:00:02
【问题描述】:

当我们在调试模式下运行我们的网站而不缩小脚本时,这是可行的:

var defines = [
    'globals',
    'templates'
];

define(defines, function(globals, templates) {
    //code...
});

但是一旦代码被缩小,它就会停止工作。你知道为什么吗?

请注意这是可行的:

define([
    'globals',
    'templates'
], function(globals, templates) {
    //code...
});

我们要使用数组的原因是因为我们要循环遍历它以将 'template' 替换为 'template.1010101010' 其中 10101010101 是基于文件创建的时间戳,这样维护文件可以我们在文件更新时自动绕过缓存。

请注意,我们还有更多文件要循环播放。

【问题讨论】:

    标签: requirejs requirejs-optimizer


    【解决方案1】:

    r.js 无法处理指定为文字数组以外的其他内容的依赖项。这就是它起作用的原因:

    define(['globals', 'templates'], function(globals, templates)...
    

    但这不起作用:

    var deps = ['globals', 'templates'];
    define(deps, function(globals, templates)...
    

    要使其工作 r.js 必须执行代码分析,这将使其更加复杂和缓慢。

    出于缓存破坏目的,获得您想要实现的目标的一种方法是生成运行时配置,其中templatespaths 设置在构建步骤中动态设置:

    paths: {
        templates: 'templates.1.3.2'
    }
    

    【讨论】:

    • 也可以这样:var templates = 'template.123'; define(['globals', templates], function(globals, templates)... 虽然你给了我我需要的答案,但这并不能解决我们有时想从 main 加载额外文件的问题,当然我们可以加载它在一个额外的需求请求中,但我希望能够更快地加载它
    最近更新 更多