如何使用requirejs优化器r.js组合非amd脚本文件时跳过包含在包末尾的定义?

时间:2017-01-08 04:00:20

标签: requirejs requirejs-optimizer

我正在尝试使用requirejs中的r.js优化器来优化我的javascript项目。我在我的项目中使用amd和non-amd模块。将有两个环境,一个环境具有requirejs环境,另一个环境没有requirejs环境。非requirejs环境中的文件不应具有require或define调用。在使用r.js将amd-modules组合成bundle时,可以在文件末尾使用bundle name进行define调用。但是对于文件优化后的非requirejs环境,它们也会在文件末尾使用模块名称进行定义插入。

我们假设有四个文件A和B是AMD模块,C和D是非AMD模块。

我的build.js就像这样

({
    appDir: "../",
    baseUrl: "./",
    dir : "../../../output",
    paths: {
        A : '../somepath/to/A',
        B : '../somepath/to/B'
    },
    modules : [
        {
            name : 'bundle1',
            create : true,
            include : ['A', 'B']
        },
        {
            name : 'bundle2',
            create : true,
            include : ['C', 'D']
        }
    ],
    // removeCombined : true,
    cjsTranslate: false,
    optimizeCss : "none",
    skipModuleInsertion: true,
    optimize: "uglify",
    fileExclusionRegExp: /^(((r|app.build)\.js)|(v0))$/,
    keepBuildDir: false,
    bundlesConfigOutFile: "bundles.js",
    onModuleBundleComplete : function(data) {
        console.log(data)
    }

})

这是捆绑amd文件的样子。

define('A', function(){
 //some stuff of A
});
define('B', function(){
 //some stuff of B
});
define('bundle1',function(){});

捆绑的非amd文件看起来像

//some stuff of C
});
//some stuff of D
define('bundle2',function(){});

如何解决这种情况。我已经完成了优化文档和example.build.js。仍然无法弄清楚的方式。我错过了什么吗?有没有办法在非amd模块的末尾排除那个定义调用。如果是,怎么样?

1 个答案:

答案 0 :(得分:1)

我发现您使用了skipModuleInsertion选项,根据文档应该帮助您。我不知道为什么它没有。

您可以使用的另一个选项是在写入文件之前完成构建之后,您可以使用onBuildWrite删除该特定的定义调用