UglifyJS项目压缩(uglify-es)
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)相关推荐
- uglifyjs php,使用UglifyJS合并/压缩JavaScript
在UglifyJS入门中主要记录了UglifyJS的安装,配置.篇末在命令行中使用了一个简单命令来压缩一个JS文件.这篇以编程的方式去压缩JS文件.即写一个build.js文件,使用node命令执行该 ...
- gulp当用有转译ES6-ES5(babel)和压缩(uglify),复制文件失败
1.当在终端输入,gulp当用有转译ES6->ES5(babel)和压缩(uglify),复制文件不成功时 例如: const babel = require('gulp-babel') con ...
- 使用uglify-js进行压缩js
使用uglify-js进行压缩js 安装node.js 通过命令npm install uglify-js -g进行安装uglifyjs,安装成功后,进入到需要压缩的js所在的目录. 然后通过ugli ...
- Grunt插件之uglify--js代码压缩与合并
平时在开发项目的时候,都是在本地测试,加载代码都是走localhost,页面刷新基本是秒出,所以没有考虑js文件的大小.最近项目上线,部署到了服务器上之后,测试的时候发现加载速度特别慢,一查看网络,发 ...
- js压缩 uglify
grunt-contrib-uglify uglify是一个文件压缩插件,项目地址:https://github.com/gruntjs/grunt-contrib-uglify 本文将以一个DEMO ...
- 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) [ ...
- UglifyJS 合并 压缩 JS文件
在引用库还有其他文件时,原本的项目文件很多,这时候就需要压缩合并,使用方法如下: 安装: npm install uglify-js -g 将uglifyjs安装为全局变量,方便我们在任何地方使用. ...
- UE4 将项目压缩成最小的Zip压缩包
一般直接压缩项目文件会使压缩包体积很大,因为项目文件内包含了临时文件,Save文件等等不是必需的文件,因此应该直接用虚幻内的File→Package Project→Zip Up Project,即使 ...
- .NET MVC项目压缩HTML、CSS、JSS
需要压缩的页面继承BaseController,也可以参照转载原文重载RazorViewEngine的方法: public class BaseController:Controller{#regio ...
最新文章
- cli3 px转rem适配移动端_Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
- linux脚本:给定目录下所有文件中查找某字符串
- 312. Burst Balloons 戳气球
- python操作mysql数据库的常用方法使用详解
- UI_布局_总体思路
- mysql 时间 between查询 索引吗_Mysql: mysql between 日期索引 索引问题-日期索引使用...
- c#值get、 set用法(包含自动转换的说明)
- day00 【后台】Readme
- bcb quickrep保存为 图片_不容错过的SCI图片处理和组图方法
- php注册变量函数,PHP变量函数
- Ubuntu 16.04下使用apt 搭建 ELK
- oracle报错12516,Oracle连接数太多报错-ORA-12516异常
- mac 升级到mavericks 安装php扩展现问题
- 自定义RPC通讯框架,实现dubbo远程RPC服务治理功能
- hihoCoder #1014 : Trie树 [ Trie ]
- 基于SpringBoot超市库存管理系统+文档
- 我的编程之路点滴记录(二)
- 已经激活的win10又突然要求需要激活了
- 微信公众平台消息储存mysql php_使用PHP进行微信公众平台开发的示例
- python图片预处理基本操作之——批量重命名,修改格式,统一大小,保存为其他路径,灰度化,归一化并将BGR写入txt