如何在Windows命令行上通过html-minifier将选项传递给UglifyJS?

时间:2018-04-10 21:40:09

标签: json node.js cmd escaping minify

npm install html-minifier -g一起安装的Node.js(v8.11.1)的HTMLMinifier(html-minifier)(3.5.14)可以通过命令行运行( Windows CMD ),例如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-minifier的HTML文件中嵌入的JavaScript。通过启用Can uglify-js remove the console.log statements?选项(另请参阅console.log()),UglifyJS可以从JavaScript中移除pure_funcs函数调用(drop_console)。

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

如何设置这样的选项,理想情况下可以通过html-minifier命令行(或者config-file设置),尽管它只设置"minifyJS": true)?

2 个答案:

答案 0 :(得分:2)

我非常接近。

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

所以,这是我的“追踪”:

最后在https://github.com/kangax/html-minifier/blob/gh-pages/src/htmlminifier.js#L667 options.minifyJS行中处理,然后在https://github.com/kangax/html-minifier/blob/gh-pages/src/htmlminifier.js#L680中以var result = UglifyJS.minify(code, minifyJS);运行。

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

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

至少它走得那么远!但为什么它不起作用?

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

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

上的JSON.parse()演示

第三,弄清楚如何通过CMD获取该字符串作为参数(转义双引号)。

最后,确保配置UgliFyJS的数据结构正确。这很简单,因为它记录在案:https://github.com/mishoo/UglifyJS2#minify-options-structure

看哪,只需用反斜杠转义双引号就可以了:

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

并且它在选项中正确显示为

...
{ compress:
   { pure_funcs: [ 'console.log' ],
...

答案 1 :(得分:-2)

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

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