使用UglifyJS时仅压缩文件名而非文件内容的问题求助
解决UglifyJS仅输出文件名而非压缩内容的问题
嘿,这个问题我之前也踩过坑!核心原因是UglifyJS的API在v3版本做了重大调整,你现在用的应该是v3+版本,但写法还沿用了旧版本的逻辑,所以工具把文件名数组当成字符串输出,而非读取文件内容进行压缩。
下面给你两种针对性的解决方案:
方案一:适配UglifyJS v3+的正确写法
在v3版本里,minify()不再直接支持传入文件名数组,你需要先读取文件内容再传入,或者通过对象参数指定文件内容:
单个文件压缩
const fs = require('fs'); const UglifyJS = require('uglify-js'); // 先读取目标文件的内容 const jsContent = fs.readFileSync('app_client/app.js', 'utf8'); // 把文件内容传入minify方法进行压缩 const resultugly = UglifyJS.minify(jsContent); // 输出压缩后的代码 console.log(resultugly.code);
多个文件压缩
如果要批量压缩多个文件,可以读取所有文件内容后合并传入,或者用键值对的形式传入:
const fs = require('fs'); const UglifyJS = require('uglify-js'); const resultugly = UglifyJS.minify({ 'app.js': fs.readFileSync('app_client/app.js', 'utf8'), 'utils.js': fs.readFileSync('app_client/utils.js', 'utf8') }); console.log(resultugly.code);
方案二:降级到UglifyJS v2版本
如果你想继续使用原来的写法(直接传文件名数组),可以安装v2版本:
npm install uglify-js@2 --save-dev
安装完成后,你原来的代码就能正常工作,工具会自动读取文件内容并压缩:
var resultugly = UglifyJS.minify(['app_client/app.js']); console.log(resultugly.code);
为什么原来的代码会输出文件名?
在UglifyJS v3中,minify()方法如果接收数组,会直接把数组转换成字符串(比如['app_client/app.js']会变成"app_client,app.js"),然后把这个字符串当成要压缩的代码处理,所以你才会看到输出的是文件名拼接结果,而非文件内容。
内容的提问来源于stack exchange,提问作者krekto
相关产品推荐
相关产品推荐

