【分享】Nodejs 运用 UGLIFYJS 模块 做批量 JS 压缩
【分享】Nodejs 运用 UGLIFYJS 模块 做批量 JS 压缩
node初学者,轻喷。。。有啥好的意见,望指点。
原先挂在自己wiki上,后来比较喜欢这里的社区氛围来着,就拿过来了。原文地址
windows底下用uglifyjs批量压缩, 考虑到bat脚本实在不适合前端=。=,
用node写个批量压缩js的函数,方便、快速,分享之!
代码相对比较简单,一看就懂,直接贴代码:
var fs = require('fs'); var jsp = require("./uglify-js").parser; var pro = require("./uglify-js").uglify;
// 批量读取文件,压缩之
function buildOne(fileIn, fileOut) { if (fileIn.length > 0) { var finalCode = []; var origCode = ''; var ast = ''; for (var i = 0,len = fileIn.length; i < len; i++) { origCode = fs.readFileSync(fileIn[i], 'utf8'); ast = jsp.parse(origCode); ast = pro.ast_mangle(ast); ast = pro.ast_squeeze(ast); finalCode.push(pro.gen_code(ast), ';'); }; } fs.writeFileSync(fileOut, finalCode.join(''), 'utf8'); } //批量的话写多个一起执行即可 buildOne(['../lib/slides.jquery.js', '../tpl/header_notice.tpl.js'], '../compile/home.min.js');
保存成compile.js, 直接node命令运行即可
当然可以,以下是对该帖子内容的详细解释及示例代码。
【分享】Nodejs 运用 UGLIFYJS 模块 做批量 JS 压缩
引言
对于Node.js初学者来说,编写简单的脚本来处理日常任务是一个不错的实践。这篇文章将介绍如何使用Node.js配合UglifyJS
模块来批量压缩JavaScript文件。
使用环境
确保你已经在Windows系统中安装了Node.js。同时,你需要先安装UglifyJS
模块。你可以通过npm(Node Package Manager)来安装它:
npm install uglify-js -g
示例代码
首先,我们需要引入一些必要的模块,并定义一个函数来处理文件的读取和压缩过程。
var fs = require('fs');
var uglifyJS = require("uglify-js");
// 定义一个函数用于压缩单个文件
function buildOne(fileIn, fileOut) {
// 读取输入文件内容
let origCode = fs.readFileSync(fileIn, 'utf8');
// 使用UglifyJS解析原始代码并生成AST(抽象语法树)
let ast = uglifyJS.parser.parse(origCode);
// 对AST进行混淆和压缩
ast = uglifyJS.uglify.ast_mangle(ast);
ast = uglifyJS.uglify.ast_squeeze(ast);
// 生成最终压缩后的代码
let finalCode = uglifyJS.uglify.gen_code(ast);
// 将压缩后的代码写入输出文件
fs.writeFileSync(fileOut, finalCode, 'utf8');
}
// 调用函数进行批量压缩
buildOne('../lib/slides.jquery.js', '../compile/slides.jquery.min.js');
buildOne('../tpl/header_notice.tpl.js', '../compile/header_notice.tpl.min.js');
代码解释
-
引入模块:
fs
模块用于文件系统的操作。uglify-js
模块提供了压缩和混淆JavaScript代码的功能。
-
定义
buildOne
函数:- 该函数接受两个参数:输入文件路径和输出文件路径。
- 使用
fs.readFileSync
读取输入文件的内容。 - 使用
uglify-js.parser.parse
解析原始代码,生成抽象语法树(AST)。 - 使用
uglify-js.uglify.ast_mangle
和uglify-js.uglify.ast_squeeze
分别对AST进行混淆和压缩。 - 使用
uglify-js.uglify.gen_code
生成最终的压缩代码。 - 最后,使用
fs.writeFileSync
将压缩后的代码写入输出文件。
-
调用函数:
- 我们定义了两个文件路径,调用
buildOne
函数来批量压缩这些文件。
- 我们定义了两个文件路径,调用
运行脚本
保存上述代码为compile.js
,然后在命令行中运行:
node compile.js
这样,你就可以看到指定的JavaScript文件被成功压缩并保存到了新的位置。
总结
通过上述步骤,我们可以轻松地利用Node.js和UglifyJS来批量压缩JavaScript文件。这种方式不仅提高了效率,还减少了文件大小,有助于提高网页加载速度。希望这篇分享对你有所帮助!
希望这个示例代码和解释对你有帮助!如果你有任何问题或建议,欢迎留言讨论。
先收藏
这段代码展示了如何使用 UglifyJS
模块进行批量 JavaScript 文件的压缩。首先需要安装 UglifyJS
模块,可以使用以下命令:
npm install uglify-es --save
接下来是具体的代码实现:
const fs = require('fs');
const UglifyJS = require("uglify-es");
const path = require('path');
function buildOne(fileIn, fileOut) {
let finalCode = [];
for (let i = 0; i < fileIn.length; i++) {
let origCode = fs.readFileSync(path.resolve(__dirname, fileIn[i]), 'utf8');
let result = UglifyJS.minify(origCode);
if (!result.error && result.code) {
finalCode.push(result.code);
} else {
console.error(`Error compressing ${fileIn[i]}`);
console.error(result.error);
}
}
fs.writeFileSync(fileOut, finalCode.join('\n'), 'utf8');
}
// 示例调用
buildOne(['./src/someFile.js', './src/anotherFile.js'], './dist/bundle.min.js');
解释
- 引入模块:使用
fs
模块来读写文件,UglifyJS
来进行压缩,path
模块来处理路径。 - 定义
buildOne
函数:接受一个输入文件数组和一个输出文件路径。 - 读取并压缩文件:循环读取每个输入文件,使用
UglifyJS.minify
方法进行压缩。 - 错误处理:如果压缩过程中出现错误,则输出错误信息。
- 生成输出文件:将所有压缩后的代码合并,并写入指定的输出文件。
这样就可以方便地批量压缩多个 JavaScript 文件了。