代码之家  ›  专栏  ›  技术社区  ›  handle

如何通过Windows命令行上的html浏览器将选项传递给UglifyJS?

  •  5
  • handle  · 技术社区  · 6 年前

    HTMLMinifier( html-minifier )(3.5.14)节点。js(v8.11.1),安装有 npm install html-minifier -g ,可以通过命令行运行( Windows命令 ),例如。 html-minifier --help 生成使用信息(摘录):

      Usage: html-minifier [options] [files...]
    
      Options:
    
        -V, --version                        output the version number
    

    。。。

        --minify-js [value]                  Minify Javascript in script elements and on* attributes (uses uglify-js)
    

    。。。

        -c --config-file <file>              Use config file
        --input-dir <dir>                    Specify an input directory
        --output-dir <dir>                   Specify an output directory
        --file-ext <text>                    Specify an extension to be read, ex: html
        -h, --help                           output usage information
    

    选项 --minify-js [value] 依赖于 UglifyJS “压缩”嵌入在传递给的HTML文件中的JavaScript html-minifier .UglifyJS可以删除 console.log() 函数调用( Can uglify-js remove the console.log statements? )通过启用 drop_console 选项(另请参见 pure_funcs )。

    但是 --minify-js drop_console=true 没有效果,类似的 "uglify:{options:{compress:{drop_console:true}}}" "compress:{pure_funcs:['console.log']}"

    如何设置这样的选项,最好是通过html minifier命令行(或者通过 config-file ,尽管它只是 "minifyJS": true )?

    2 回复  |  直到 5 年前
        1
  •  6
  •   handle    6 年前

    我非常接近。

    我开始深入研究代码(安装在 %appdata%\npm\node_modules\html-minifier )查看所提供的选项会发生什么情况,即使用添加调试输出 console.log(xyz); (使用实际的调试器可能是一个更好的主意)。

    这是我的“跟踪”:

    最终在哪里排队 https://github.com/kangax/html-minifier/blob/gh-pages/src/htmlminifier.js#L667 options.minifyJS 在作为 var result = UglifyJS.minify(code, minifyJS); 在里面 https://github.com/kangax/html-minifier/blob/gh-pages/src/htmlminifier.js#L680

    但这是我们的选项字符串 compress:{pure_funcs:['console.log']} 清理,因为它还不是对象,导致 {}

    或者,在使用不同字符串的不同尝试中,您可能会遇到错误 Could not parse JSON value '{compress:{pure_funcs:'console.log']}}'

    至少有那么远!但为什么不起作用呢?

    首先,现在是重温JSON规范的好时机: https://www.json.org/index.html

    其次,查看字符串是否可以被解析为有效的JSON,例如 JSON.parse() 演示位于 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse

    第三,找出如何通过CMD as参数获取该字符串(转义双引号)。

    最后,确保配置UgliFyJS的数据结构正确。这很容易,因为有文档记录: https://github.com/mishoo/UglifyJS2#minify-options-structure

    瞧,简单地用反斜杠避开双引号对我来说很有用:

    html-minfier ... --minify-js {\"compress\":{\"pure_funcs\":[\"console.log\"]}} ...

    它在选项中正确显示为

    ...
    { compress:
       { pure_funcs: [ 'console.log' ],
    ...
    
        2
  •  -2
  •   megasega    3 年前

    例如,curl可以从文件中读取配置,如代理等。。。 许多程序都这样做。git、maven、gradle。。。。无论您如何和在何处调用它们,它们都会查找您或系统提供的配置:首先从当前目录,然后从用户主页,然后是系统/etc/。。。

    如果这些节点包中没有电池,那么它们只能用于单独的html和js文件。