【问题标题】:How to skip a define getting included at the end of the bundle, When combining non-amd script files using requirejs optimizer r.js?使用 requirejs 优化器 r.js 组合非 amd 脚本文件时,如何跳过包含在捆绑包末尾的定义?
【发布时间】:2017-01-08 04:00:20
【问题描述】:

我正在尝试使用 requirejs 中的 r.js 优化器优化我的 javascript 项目。我在我的项目中同时使用 amd 和非 amd 模块。将有两种环境,一种有requirejs环境,另一种没有requirejs环境。非requirejs环境中的文件不应该有require或define调用。在使用 r.js 将 amd-modules 组合到包中时,可以在文件末尾使用包名称进行定义调用。但是对于文件优化后的非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 模块的末尾排除该定义调用。如果是,如何?

【问题讨论】:

    标签: requirejs requirejs-optimizer


    【解决方案1】:

    我看到您使用了 skipModuleInsertion 选项,根据文档应该对您有所帮助。我不知道为什么没有。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 2013-07-29
      • 2016-02-17
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      相关资源
      最近更新 更多