【分享】Nodejs 运用 UGLIFYJS 模块 做批量 JS 压缩

发布于 1周前 作者 zlyuanteng 来自 nodejs/Nestjs

【分享】Nodejs 运用 UGLIFYJS 模块 做批量 JS 压缩

node初学者,轻喷。。。有啥好的意见,望指点。

原先挂在自己wiki上,后来比较喜欢这里的社区氛围来着,就拿过来了。原文地址

windows底下用uglifyjs批量压缩, 考虑到bat脚本实在不适合前端=。=,

用node写个批量压缩js的函数,方便、快速,分享之!

uglifyjs在这

代码相对比较简单,一看就懂,直接贴代码:

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命令运行即可

完整代码在这


4 回复

当然可以,以下是对该帖子内容的详细解释及示例代码。


【分享】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');

代码解释

  1. 引入模块

    • fs模块用于文件系统的操作。
    • uglify-js模块提供了压缩和混淆JavaScript代码的功能。
  2. 定义buildOne函数

    • 该函数接受两个参数:输入文件路径和输出文件路径。
    • 使用fs.readFileSync读取输入文件的内容。
    • 使用uglify-js.parser.parse解析原始代码,生成抽象语法树(AST)。
    • 使用uglify-js.uglify.ast_mangleuglify-js.uglify.ast_squeeze分别对AST进行混淆和压缩。
    • 使用uglify-js.uglify.gen_code生成最终的压缩代码。
    • 最后,使用fs.writeFileSync将压缩后的代码写入输出文件。
  3. 调用函数

    • 我们定义了两个文件路径,调用buildOne函数来批量压缩这些文件。

运行脚本

保存上述代码为compile.js,然后在命令行中运行:

node compile.js

这样,你就可以看到指定的JavaScript文件被成功压缩并保存到了新的位置。

总结

通过上述步骤,我们可以轻松地利用Node.js和UglifyJS来批量压缩JavaScript文件。这种方式不仅提高了效率,还减少了文件大小,有助于提高网页加载速度。希望这篇分享对你有所帮助!


希望这个示例代码和解释对你有帮助!如果你有任何问题或建议,欢迎留言讨论。


嗯,不错,多谢。不知道有没有能将node代码转成可执行文件的东东?

这段代码展示了如何使用 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');

解释

  1. 引入模块:使用 fs 模块来读写文件,UglifyJS 来进行压缩,path 模块来处理路径。
  2. 定义 buildOne 函数:接受一个输入文件数组和一个输出文件路径。
  3. 读取并压缩文件:循环读取每个输入文件,使用 UglifyJS.minify 方法进行压缩。
  4. 错误处理:如果压缩过程中出现错误,则输出错误信息。
  5. 生成输出文件:将所有压缩后的代码合并,并写入指定的输出文件。

这样就可以方便地批量压缩多个 JavaScript 文件了。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!