1、针对Express项目服务端部署时,需要进行JS的源码压缩处理,UglifyJS只支持es5的形式;

2、需要使用uglify-es处理es6的项目:

npm install uglify-es -g
npm install uglify-es -D

3、package.json中添加执行的自动转换命令行:

"dll": "babel-node ./compress.js">npm run dll

4、核心执行批量压缩处理的逻辑:compress.js

import UglifyJS from "uglify-es";
import fs from "fs";
import path from 'path';
import BasePath from './index.js';//JS压缩
//配置需要处理的路径及文件
const Config = {pressFiles: ['index.js', '.babelrc', 'package.json', 'package-lock.json'],pressDirs: ['src/', 'views/', 'public/'],skipFiles: ['main.config.js'],outFile: './dist'
}//首先删除之前的压缩包
deleteDist(path.join(BasePath, Config.outFile));
//删除指定的路径下的文件及文件夹
function deleteDist(filePath){if (!fs.existsSync(filePath)) {return; }if (fs.statSync(filePath).isFile()) { // 是文件直接删除        fs.unlinkSync(filePath);    }else { // 文件夹 递归 先删文件夹下文件,再删文件夹        let files = fs.readdirSync(filePath);        files.forEach(file => {            let curFilePath = path.join(filePath, file);            deleteDist(curFilePath);        });        fs.rmdirSync(filePath);   }console.log('Delete OK : ', filePath);
}//针对
exeCompress();
function exeCompress(){// 异步创建DST目录fs.mkdir(path.join(BasePath, Config.outFile), err => {if (err) throw err;});console.log('Create OK : ', path.join(BasePath, Config.outFile));//针对文件进行压缩for(let file of Config.pressFiles){readFileCompress('', file);}//针对文件夹进行压缩for(let dir of Config.pressDirs){readDirCompress(dir);}
}//读取文件并压缩, 忽略掉非JS的文件以及需要跳过的文件
function readFileCompress(dir, file){let curFile=path.join(BasePath, dir, file);fs.readFile(curFile, 'utf-8', function (err, data) { if(err) {console.log("ReadFileCompress Err. ", err);} else {//文件后缀let isRequired=true;var ext=path.extname(curFile).toLowerCase();if(ext != '.js' || Config.skipFiles.indexOf(file) > -1){isRequired=false;}console.log(`ReadFile[${ext}] ORI= ${curFile}`); let dstFile=path.join(BasePath, Config.outFile, dir, file); console.log("Dst= ", dstFile); uglifyES(data, dstFile, isRequired);}});
}//读取文件夹并压缩
function readDirCompress(dir){let curDir=path.join(BasePath, dir);console.log("CurDir=", curDir); //创建DST中对应的目录fs.mkdir(path.join(BasePath, Config.outFile, dir), err => {if (err) throw err;});let dirs = fs.readdirSync(curDir);        dirs.forEach(file => {  let curFile=path.join(BasePath, dir, file);  console.log("ReadDir CurFile=", curFile); if (fs.statSync(curFile).isFile()) {readFileCompress(dir, file);}else{let curPath = path.join(dir, file);     readDirCompress(curPath);  }           });
}//针对文件及其内容的压缩
function uglifyES(fileContent, dstFile, isRequired) {var options = {mangle: {toplevel: true,},nameCache: {}};let dstContent=fileContent;if(isRequired){var minResult = UglifyJS.minify(fileContent, options);//console.log("UglifyJS.minify=", JSON.stringify(minResult));dstContent=minResult.code;}fs.writeFile(dstFile, dstContent,  function(err) {if(err) {console.log("UglifyJS-ES Err. ", err);} });console.log(`UglifyJS-ES Write OK [${isRequired}] : ${dstFile}`);
}

UglifyJS项目压缩(uglify-es)相关推荐

  1. uglifyjs php,使用UglifyJS合并/压缩JavaScript

    在UglifyJS入门中主要记录了UglifyJS的安装,配置.篇末在命令行中使用了一个简单命令来压缩一个JS文件.这篇以编程的方式去压缩JS文件.即写一个build.js文件,使用node命令执行该 ...

  2. gulp当用有转译ES6-ES5(babel)和压缩(uglify),复制文件失败

    1.当在终端输入,gulp当用有转译ES6->ES5(babel)和压缩(uglify),复制文件不成功时 例如: const babel = require('gulp-babel') con ...

  3. 使用uglify-js进行压缩js

    使用uglify-js进行压缩js 安装node.js 通过命令npm install uglify-js -g进行安装uglifyjs,安装成功后,进入到需要压缩的js所在的目录. 然后通过ugli ...

  4. Grunt插件之uglify--js代码压缩与合并

    平时在开发项目的时候,都是在本地测试,加载代码都是走localhost,页面刷新基本是秒出,所以没有考虑js文件的大小.最近项目上线,部署到了服务器上之后,测试的时候发现加载速度特别慢,一查看网络,发 ...

  5. js压缩 uglify

    grunt-contrib-uglify uglify是一个文件压缩插件,项目地址:https://github.com/gruntjs/grunt-contrib-uglify 本文将以一个DEMO ...

  6. UglifyJs无法压缩vendor.js: ERROR in static/js/vendor.xxx.js from UglifyJs

    报错信息: ERROR in static/js/vendor.9d86f97577080abdf83d.js from UglifyJs Unexpected token: name ($vm) [ ...

  7. UglifyJS 合并 压缩 JS文件

    在引用库还有其他文件时,原本的项目文件很多,这时候就需要压缩合并,使用方法如下: 安装: npm install uglify-js -g 将uglifyjs安装为全局变量,方便我们在任何地方使用. ...

  8. UE4 将项目压缩成最小的Zip压缩包

    一般直接压缩项目文件会使压缩包体积很大,因为项目文件内包含了临时文件,Save文件等等不是必需的文件,因此应该直接用虚幻内的File→Package Project→Zip Up Project,即使 ...

  9. .NET MVC项目压缩HTML、CSS、JSS

    需要压缩的页面继承BaseController,也可以参照转载原文重载RazorViewEngine的方法: public class BaseController:Controller{#regio ...

最新文章

  1. cli3 px转rem适配移动端_Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
  2. linux脚本:给定目录下所有文件中查找某字符串
  3. 312. Burst Balloons 戳气球
  4. python操作mysql数据库的常用方法使用详解
  5. UI_布局_总体思路
  6. mysql 时间 between查询 索引吗_Mysql: mysql between 日期索引 索引问题-日期索引使用...
  7. c#值get、 set用法(包含自动转换的说明)
  8. day00 【后台】Readme
  9. bcb quickrep保存为 图片_不容错过的SCI图片处理和组图方法
  10. php注册变量函数,PHP变量函数
  11. Ubuntu 16.04下使用apt 搭建 ELK
  12. oracle报错12516,Oracle连接数太多报错-ORA-12516异常
  13. mac 升级到mavericks 安装php扩展现问题
  14. 自定义RPC通讯框架,实现dubbo远程RPC服务治理功能
  15. hihoCoder #1014 : Trie树 [ Trie ]
  16. 基于SpringBoot超市库存管理系统+文档
  17. 我的编程之路点滴记录(二)
  18. 已经激活的win10又突然要求需要激活了
  19. 微信公众平台消息储存mysql php_使用PHP进行微信公众平台开发的示例
  20. python图片预处理基本操作之——批量重命名,修改格式,统一大小,保存为其他路径,灰度化,归一化并将BGR写入txt

热门文章

  1. c语言数组给指针赋值的特殊性
  2. Android家庭财务管理系统计算机程序
  3. 安卓开发快速入门之 代码阅读技巧(二)
  4. 网赚真的会有市场吗?
  5. java todataurl_canvas.toDataURL()报错的解决方案全都在这了
  6. 哈夫曼java_哈夫曼树和哈夫曼编码介绍以及Java实现案例
  7. 大数据技术之Flume(扇入)
  8. TrueSTUDIO设置文本编辑字体大小
  9. 智慧农业五大应用项目
  10. 扫雷--雷区生成随机化总结