美文网首页
批量 es6 js文件压缩,批量输出

批量 es6 js文件压缩,批量输出

作者: Nelson_sylar | 来源:发表于2020-07-03 16:06 被阅读0次

    1. 使用cli命令行的方式压缩输出

    • 需先全局安装uglify-es后可用命令行压缩
    • 缺点:若需批量压缩,需要用
      yarn global add uglify-es或者npm install -g uglify-es
      uglifyjs [input files] [options]

    使用示例

    //例如压缩jquery.js到/dist目录中jquery.min.js,前提要先创建dist文件夹,命令不会自动创建文件夹
    uglifyjs ./jquery.js -o ./dist/jquery.min.js
    

    2. 使用node的方式压缩输出,

    • 需先安装uglify-es后,新建main.js,写入如下代码,通过options里的EntrypathOutpath来配置输入输出路径,options的其他属性配置压缩参数,其API详见uglifyes
    var UglifyJS = require("uglify-es");
    var fs = require('fs')
    const { resolve } = require('path')
    let array = []//src文件夹内的js目录集合
    let codeArray = []//压缩后的代码集合
    let jsname = []//src文件夹的js名集合
    const options = {
        //*******配置输入输出口*********/
        Entrypath: '/ddd',//需要批量压缩js的文件夹入口
        Outpath: '/aaa',//批量压缩后js的文件夹
        //*******配置输入输出口*********/
    
        //*******配置uglifyjs其他参数*********/
        //详见https://github.com/LiPinghai/UglifyJSDocCN/blob/master/README.md
        warnings: false,
        parse: {
            // parse options
        },
        compress: {
            // compress options
        },
        mangle: {
            // mangle options
    
            properties: {
                // mangle property options
            }
        },
        output: {
            // output options
        },
        sourceMap: {
            // source map options
        },
        nameCache: null, // or specify a name cache object
        toplevel: false,
        ie8: false,
    }
    
    init()//开始
    
    //**********函数部分***************
    //判断输出路径是否存在
    function judgeDir() {
        fs.exists(options.Outpath.split('/')[1], function (exists) {
            if (exists) {
                console.log(`${options.Outpath}目录已存在,进入下一步`)
            } else {
                console.log('指定目录不存在,进入下一步')
                creatFolder(options.Outpath)
            }
            //执行创建完文件夹,执行压缩代码
            for (let i = 0; i < array.length; i++) {
                let patharray = jsname[i]
                let item = codeArray[i]
                startCompress(options.Outpath, patharray, item, i + 1)
            }
        })
    }
    
    //创建文件夹,默认dist
    function creatFolder(dirName = '/dist') {
        fs.mkdir(resolve('./') + dirName, function (err) { })
        console.log(`创建${options.Outpath}成功`)
    }
    //执行写入压缩后的代码
    function startCompress(dirName = '/dist', array, item, n = 0) {
        console.log(`开始写入第${n}条压缩后代码`)
        let length = array.lastIndexOf('.')
        fs.writeFileSync(`${resolve('./')}${dirName}/${array.slice(0, length)}.min.js`, item);
        console.log('写入代码成功')
    }
    //遍历入口文件夹
    function startLoop(dirName = '/src') {
        fs.readdir(resolve('./') + dirName, function (err, files) {
            if (err) {
                console.log(err);
            }
            // console.log(files);
            files.forEach(item => {
                let list = item.split('.')
                let tempLength = list.length
                if (list[tempLength - 1] == 'js') {
                    array.push(resolve('./') + options.Entrypath + '/' + item)
                    jsname.push(item)
                }
            })
            console.log(`遍历${options.Entrypath}目录成功,共有${array.length}个js文件`)
            // console.log(array)
            console.log('执行uglify,压缩代码')
            toUglify()
        })
    }
    //导入uglifyCode
    function toUglify() {
        // console.log(array)
        array.forEach((item) => {
            let code = fs.readFileSync(item, "utf8");
            let uglifyCode = UglifyJS.minify(code).code;
            codeArray.push(uglifyCode)
        })
    }
    //初始化
    function init() {
        console.log('初始化开始')
        startLoop(options.Entrypath)
        console.log('判断输出路径是否存在')
        judgeDir()
    }
    

    最后附上github地址compressES6

    • 使用:
    1. npm install或者yarn
    2. 将需要被压缩的js放入/src路径
    3. 在命令行中输入node ./main.js或者npm run compress,或者yarn compress
    4. 成功后将在/dist路径生成压缩好的*.min.js文件

    相关文章

      网友评论

          本文标题:批量 es6 js文件压缩,批量输出

          本文链接:https://www.haomeiwen.com/subject/ztbsqktx.html