javascript - Browserify、minifyify、条件编译

标签 javascript browserify bundling-and-minification conditional-compilation uglifyjs

长话短说

minifyify(Browserify 插件)使用 uglify-js 但似乎无法处理 Conditional compilation :

  • 压缩工程
  • uglifyjs 单独用于条件编译
  • minifyify 提供了额外的编译优化,但我无法使用它进行条件编译

我将 Browserifybabelify 转换器和 minifyify 插件一起使用。这是 cmd,分解为可读部分:

浏览器化 src/scripts/app/index.js -o 构建/产品/公共(public)/ Assets /js/appBundle.min.js -t [ babelify --presets [ es2015 ] ] -p [ minifyify --no-map --uglify [ --compress [ --drop_console --dead_code --conditionals --unused --if_return ] --mangle --screw-ie8 --define [ DEBUG=false ] ] ]

我已经让每个设置/选项都起作用了。但是,我无法使条件编译正常工作。 Minifyify 使用 uglifyjs 的 minify 方法。我正在通过 minifyify 的事实不应该真正改变任何东西。

直接通过 uglifyjs 构建

uglifyjs input.js --compress --dead_code --define DEBUG=false -o output.js

但随后我失去了 minifyify 提供的额外压缩/优化。

我也对另一个构建过程持开放态度。我的需求在当前进程的设置中恢复:

  • CommonJS 所需模块
  • 将 ES6 转译为 ES5
  • 高级缩小/压缩

最佳答案

事实证明,罪魁祸首或多或少是 uglifyjs。任务中全局定义的属性名称在 CMD 和 Programmatic API 之间是不同的。

  • cmd 行:--define VARNAME=VALUE
  • 程序化:压缩:{global_defs: { varname: value } }

话虽如此,minifyifybrowserify 似乎也没有为全局定义正确传递 cmd 行选项 - 我们仍在调查这

程序化解决方案

通过使用 Browserify 和 minifyify 编程 API,构建任务有效。下面是与 OP 中的任务相同的任务,但它有效:

"use strict";
var browserify = require("browserify"),
    fs = require("fs");

browserify("src/scripts/app/index.js")
    .transform("babelify", {presets: ["es2015"], plugins: ["transform-object-assign"]})
    .plugin("minifyify", {map: false, uglify: {
        compress: {
            drop_console: true,
            dead_code: true,
            conditionals: true,
            unused: true,
            if_return: true,
            global_defs: {
                DEBUG: false
            }
        },
        mangle: true,
        "screw-ie8": true
    }})
    .bundle()
    .pipe(fs.createWriteStream("build/prod/public/assets/js/appBundle.js"));

在 uglifyjs 文档中更新

我已经提议对当前的 uglifyjs 文档进行修改,提供一个使用上述编程 API 的示例,以避免将来其他人遇到此问题。

关于javascript - Browserify、minifyify、条件编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35703092/

相关文章:

javascript - 仅当新选项卡尚未打开时才打开它

javascript - 如何浏览模块 ethereumjs-tx?

c# - 如何以编程方式获取捆绑版本 token ?

asp.net-mvc-4 - bundle 在 MVC 4.5 空项目中不起作用

javascript - 如何防止 onclick 监听器的垃圾邮件?

javascript - Rails 中 select 的 onchange 传递参数

javascript - 在 Visual Studio 2013 的 Windows Phone javascript 模板中启用状态栏

javascript - Debowerify 无法与 Grunt 一起使用

Windows 上的 node.js 经常失败并显示 'EMFILE: too many open files'

css - 带有 ASP.net MVC 的 LESS CSS 中资源的绝对路径