如何在requirejs优化期间排除插件依赖项

时间:2016-12-25 02:07:07

标签: javascript requirejs r.js

我一直在寻找一段时间,但我还没有找到解决问题的方法。我正在使用require.js并使用插件为一些模块动态加载数据

define(['Plugin!data', 'dependency'], function(data, dep) {
    ...
}

当我尝试使用r.js

将所有模块优化为单个构建时,会出现问题
requirejs.optimize({
   baseURL: '/js',
   name: 'main',
   ...
})

优化器尝试通过插件加载数据。有没有办法避免这种情况?

即:如何告诉优化器不要使用插件格式的任何内容!...

1 个答案:

答案 0 :(得分:1)

您可以在构建配置中使用exclude来排除此类模块。例如:

({
    baseUrl: "js",
    dir: "build",
    removeCombined: true,
    optimize: "none",
    modules: [
        {
            name: "built",
            create: true,
            include: [
                "modA",
            ],
            exclude: [
                "text!./x.json",
            ],
        },
    ],
})

虽然问题在于exclude中没有模式匹配,但您最终必须单独列出每个模块,这在大型代码库中可能有点问题。

另一种方法是使用onBuildWrite删除以text!开头的所有模块:

({
    baseUrl: "js",
    dir: "build",
    removeCombined: true,
    optimize: "none",
    modules: [
        {
            name: "built",
            create: true,
            include: [
                "modA",
            ],
        },
    ],
    // Use onBuildWrite to exclude modules loaded through plugin.
    onBuildWrite: function (moduleName, path, contents) {
        if (moduleName.lastIndexOf("text!", 0) === 0) {
            return "";
        }
        return contents;
    },
})