混淆js

最近有一个需求,需要混淆一下前端页面用到js文件。想到的是使用uglify-js工具。本文简单的记录一下,如何更新镜像里面的js文件。本文的侧重点,并不是如何使用uglify-js,而是如何从工程性的方式,介绍如何升级js混淆代码,既保留源码,又在发布的时候,直接能用上压缩的js。

官方源码

https://github.com/mishoo/UglifyJS

安装

先安装nodejs,然后再全局安装:

npm install uglify-js -g

使用方式:

uglifyjs old.js -o new.js
uglifyjs old.js -m -o new.js

-m, –mangle [options] Mangle names/specify mangler options.

混淆脚本

使用下面的方式,找到需要加密的文件。注意,find命令,如果没有指定目录时,输出结果,则类似于./src/这种的前缀,如果加上目录后呢,则结果类似于src/web这种前缀,区分这两种形式很重要,因为新的文件命令new,是依赖它的。而由于是扫目录下所有的文件,故输出的目录应该不再扫描,故指定了要扫描的文件命令。

其他,使用grep命令排除了若干不想用到文件。

下面脚本的亮点是:先计算文件所对应的文件夹路径,"${new%/*}",这是常用的需求。用到了shell文件命名处理。

#!/bin/bash
# 2021-12-23 09:32:06
# 描述: 加密混淆、前端所有用到的js文件。

if [ ! -d "js" ];then
    mkdir js
fi
for each in `find src/web -type f -name "*.js" |grep -v "min.js" |grep -v "cked"`;do
    new="js/$each"
    des_dir="${new%/*}"

    if [ ! -d "$des_dir" ];then
        mkdir -p "$des_dir"
    fi
    echo "$each -> $new "
    uglifyjs $each -o $new
done
  • 构建镜像

在原有拷贝代码之后,增加一步,拷贝加混淆后的js文件。这样,会覆盖更新。

ADD src /yd
# 拷贝加密的js文件
ADD js/src /yd 
RUN chown -R www:www /yd/*