js 压缩
听到同事说没找到压缩js文件的,说软件压缩貌似有点问题,我自己就用nodejs练手般写了压缩文件的。
主要的思路就是,先通过前端上传js文件,然后服务器接收,然后引用uglifyjs 压缩,再返回文件路径给前端下载即可。代码如下:
html:
<div>
<div class="content">
<span>js压缩工具</span>
<form id="uploadFiles" enctype="multipart/form-data">
<input type="file" id='uglifyJs' multiple="multiple" name="js_min">
<input type="hidden" name="test" value="heyden">
</form>
<button id="upload">压缩</button>
</div>
</div>
js 脚本
$(function() {
var baseUrl = location.hostname
$("#upload").click(function() {
$.ajax({
url:`http://${baseUrl}:8084/upload`,
type:'POST',
data: new FormData($('#uploadFiles')[0]),
processData:false,
contentType:false,
success: function(res) {
res.fileData.forEach(item => {
let elDown = document.createElement('a'),
e = document.createEvent("MouseEvents"); //创建鼠标事件对象
e.initEvent("click", false, false); //初始化事件对象
elDown.href = item.downUrl
elDown.download = item.fileName;
elDown.dispatchEvent(e); //给指定的元素,执行事件click事件
});
},
error: function() {
}
})
})
})
这里ajax请求时。processData,contentType这两个记得填,否则会被坑
nodejs :
const express = require('express');
const app = express()
const formidable = require('formidable');
const fs = require('fs')
const path = require('path')
const UglifyJS = require('uglify-js')
const multiparty = require('multiparty');
let form = null
app.use(express.static('static'))
app.get('/', function(req, res) {
res.sendfile('index.html')
})
app.post('/upload', function(req, res) {
form = new multiparty.Form();
form.uploadDir = 'static/tmp'
form.maxFieldsSize = 1 * 1024 * 1024;
var targetDir = path.join(__dirname, '/static/upload')
fs.access(targetDir, function (err) {
if (err) {
fs.mkdir(targetDir);
}
_fileSave(req, res, targetDir)
})
})
app.listen(8084, "0.0.0.0" ,() => {
console.log('succcess in port 8084');
})
function _fileSave(req, res, target) {
form.parse(req, function (err, fields, files) {
if (err) throw err
var fileData = [];
var errCount = 0;
var keys = files.js_min
var miniJs = []
keys.forEach(function(key, index) {
var filePath = key.path;
var fileExt = filePath.substring(filePath.lastIndexOf('.'));
if (('.js.txt').indexOf(fileExt.toLowerCase()) === -1) {
errCount += 1;
} else {
var fileName = fileExt;
var targetFile = target + '/' + key.originalFilename ;
var fileUrl = req.originalUrl +"/"+ key.originalFilename
//移动文件
miniJs.push(UglifyJS.minify(fs.readFileSync(filePath, 'utf8')))
fs.writeFileSync(targetFile, miniJs[index].code, "utf8")
fs.unlinkSync(filePath);
// 文件的Url(相对路径)
fileData.push({ target: targetFile, downUrl: fileUrl, fileName: key.originalFilename})
}
})
res.json({ fileData: fileData, success: keys.length - errCount, error: errCount, result: miniJs});
})
}
写服务时,接收前端的文件时,调接口时,form 对象记得调一次就new一个,否则会报错。,,获取前端文件后,只需用UglifyJS处理,然后重命名临时文件即可,最后返回
文件url给前端,让前端自己下载。这里我也不知道怎么直接让前端自动下载,貌似通过请求不好下载,自己也没找到方法,求靠前端js解决咯
js 压缩的更多相关文章
- 【DWR系列06】- DWR日志及js压缩
img { border: solid 1px } 一.日志 DWR依赖 Apache Commons Logging,可以使用log4j实现日志记录功能. 1.1 日志简介 和其他日志框架一样,当设 ...
- 26、ASP.NET MVC入门到精通——后台管理区域及分离、Js压缩、css、jquery扩展
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 有好一段时间没更新博文了,最近在忙两件事:1.看书,学习中...2.为公司年会节目做准备,由于许久没有练习双截棍了,难免生疏,所以现在临时抱 ...
- js压缩图片base64长度
var myCanvas=$('.img-container > img').cropper('getCroppedCanvas'); (function (base64){ var image ...
- gulp-uglify《JS压缩》----gulp系列(四)
本节实现JS压缩,在实现压缩前,先配置JS任务,设置源目录和输出目录. 在系列(三)代码的基础上,再进行扩展. 1.找到gulp->config.js,对JS进行源目录(src->img) ...
- js压缩、混淆和加密
最近看到有些论坛在讨论js压缩.混淆和加密的问题,特意找了些资料看了下,现在总结一下: 1.关于三者的定义与区别 压缩:删除 Javascript 代码中所有注释.跳格符号.换行符号及无用的空格,从而 ...
- 区域及分离、Js压缩、css、jquery扩展
后台管理区域及分离.Js压缩.css.jquery扩展 本系列目录:ASP.NET MVC4入门到精通系列目录汇总 有好一段时间没更新博文了,最近在忙两件事:1.看书,学习中...2.为公司年会节目做 ...
- webpack 3.X学习之JS压缩与打包HTML文件
js压缩 webpack自带一个插件uglifyjs-webpack-plugin来压缩js,所以不需要再次安装,当一切都准备妥当,引入uglifyjs-webpack-plugin模块: const ...
- 图片纯前端JS压缩的实现
一.图片上传前端压缩的现实意义 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅 ...
- 使用zip.js压缩文件和解压文件
zip.js官方网站为:https://stuk.github.io/jszip/ 在此说明,下面的例子基本上来自官方示例,大家可以做参考,官方示例地址为:https://stuk.github.io ...
- webpack快速入门——配置JS压缩,打包
1 .首先在webpack.config.js中引入 const uglify = require('uglifyjs-webpack-plugin'); 2.然后在plugins配置里 plugin ...
随机推荐
- 阿里云服务器配置https(port443)后客户端 svn check out 失效解决办法
1. 客户端环境 1. 操作系统:Windows 7 2. svn客户端:TortoiseSVN 2. 服务端环境 1. 云服务平台:阿里云 2. 操作系统:Windows Server 2008 R ...
- IntelliJ IDEA重启Tomcat
- Django—模板
索引 一.模板语言 1.1 变量 1.2 标签 1.3 过滤器 1.4 自定义过滤器 1.5 注释 二.模板继承 三.HTML转义 四.CSRF 五.验证码 六.反向解析 模板 作为Web框架,Dja ...
- bzoj 3998
我们分成两种情况来分析这个问题:t=0和t=1 t=1时,每一个子串出现的次数就是他在parent树上所在子树内前缀节点的个数,这一点我们已经说的很清楚了 利用SAM有向无环的性质,我们可以在pare ...
- 记录一次go性能调试的过程
安装 go, git, go-torch 备注, go1.11后, 集成了 go-torch
- css3基本属性
一.css属性:1.层叠性:当出现相同的选择器时,属性冲突的时候,后面的属性会把前面的属性 覆盖掉. 2.继承:当存在父子关系的时候,子元素会继承父元素的部分属性 注意: a标签不会继承颜色:h标签不 ...
- (转载)C# 枚举 FlagsAttribute用法
这是读过几篇文章后发现整理的最完整的一篇文章 转载地址:枚举特性FlagsAttribute的用法 先看官方的解释:指示可以将枚举作为位域(即一组标志)处理. 看起来并不好理解,到底什么是作为位域处理 ...
- Nuxt.js国际化vue-i18n的搭配使用
Nuxt.js国际化的前提是,已经使用脚手架工具搭建好了Nuxt.js的开发环境. 我使用的环境是nuxt@2.3 + vuetify@1.4 + vue-i18n@7.3 1. 先安装vue-i18 ...
- QMainWindow
QMainWindow继承自QWidget,是一个顶层窗口,它可以包含其他的界面元素:菜单栏.工具栏.状态栏.子窗口等. QMainWindow不能设置布局(setLayout()方法),因为它有自己 ...
- *CTF 2019 quicksort、babyshell、upxofcpp
这次参加比赛总共出了三道,有两道队友都先交了,还是tcl,heap_master卡了差不多一天没解决....还是记录一下出的题目吧 quicksort 题目大体流程就是输入要输入的数字数量,然后输入数 ...