听到同事说没找到压缩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 压缩的更多相关文章

  1. 【DWR系列06】- DWR日志及js压缩

    img { border: solid 1px } 一.日志 DWR依赖 Apache Commons Logging,可以使用log4j实现日志记录功能. 1.1 日志简介 和其他日志框架一样,当设 ...

  2. 26、ASP.NET MVC入门到精通——后台管理区域及分离、Js压缩、css、jquery扩展

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 有好一段时间没更新博文了,最近在忙两件事:1.看书,学习中...2.为公司年会节目做准备,由于许久没有练习双截棍了,难免生疏,所以现在临时抱 ...

  3. js压缩图片base64长度

    var myCanvas=$('.img-container > img').cropper('getCroppedCanvas'); (function (base64){ var image ...

  4. gulp-uglify《JS压缩》----gulp系列(四)

    本节实现JS压缩,在实现压缩前,先配置JS任务,设置源目录和输出目录. 在系列(三)代码的基础上,再进行扩展. 1.找到gulp->config.js,对JS进行源目录(src->img) ...

  5. js压缩、混淆和加密

    最近看到有些论坛在讨论js压缩.混淆和加密的问题,特意找了些资料看了下,现在总结一下: 1.关于三者的定义与区别 压缩:删除 Javascript 代码中所有注释.跳格符号.换行符号及无用的空格,从而 ...

  6. 区域及分离、Js压缩、css、jquery扩展

    后台管理区域及分离.Js压缩.css.jquery扩展 本系列目录:ASP.NET MVC4入门到精通系列目录汇总 有好一段时间没更新博文了,最近在忙两件事:1.看书,学习中...2.为公司年会节目做 ...

  7. webpack 3.X学习之JS压缩与打包HTML文件

    js压缩 webpack自带一个插件uglifyjs-webpack-plugin来压缩js,所以不需要再次安装,当一切都准备妥当,引入uglifyjs-webpack-plugin模块: const ...

  8. 图片纯前端JS压缩的实现

    一.图片上传前端压缩的现实意义 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅 ...

  9. 使用zip.js压缩文件和解压文件

    zip.js官方网站为:https://stuk.github.io/jszip/ 在此说明,下面的例子基本上来自官方示例,大家可以做参考,官方示例地址为:https://stuk.github.io ...

  10. webpack快速入门——配置JS压缩,打包

    1 .首先在webpack.config.js中引入 const uglify = require('uglifyjs-webpack-plugin'); 2.然后在plugins配置里 plugin ...

随机推荐

  1. 记一次较坑的eclipse安装AmaterasUML插件经历

    先是最开始以为只用下载AmaterasUML插件压缩包,解压之后把三个jar包放进eclipse-plugins目录之后重启就可以了,结果发现重启之后毫无反应orz 于是又去查资料,发现还需要安装GE ...

  2. Nginx命令行控制

    在Linux中,需要使用命令行来控制Nginx服务器的启动与停止.重载配置文件.回滚日志文件.平滑升级等行为.默认情况下,Nginx被安装在目录usrlocal/nginx/中,其二进制文件路径为us ...

  3. [Linux]出错处理errno

    概述 公共头文件<errno.h>定义了一个整型值errno以及可以赋予它的各种常量. 大部分函数出错后返回-1,并且自动给errno赋予当前发生的错误枚举值. 需要注意的一点是,errn ...

  4. Python 猜数游戏

    import random//引用随机数rand=random.randint(0,99)t=0while 1: //用t来记录使用次数 t+=1 //自行输入一个随机数 aNumber=int(in ...

  5. ArrayList源码学习

    1.ArrayList:基于数据实现,允许出现空值和重复元素,当ArrayList中添加的元素数量大于底层数组容量是,会通过扩容机制重新生成一个更大的数组.(非线程安全) 2.源码分析 构造函数 /* ...

  6. 浅谈Python装饰器

    一.概念 装饰器是Python语言中的高级语法.主要的功能是对一个函数.方法.或者类进行加工,作用是为已经存在的对象添加额外的功能,提升代码的可读性.装饰器是设计模式的一种,被用于有切面需求的场景,较 ...

  7. About The Order of The Declarations And Definition When Making a Member Function a Friend.关于使类成员成为另一个类友元函数的声明顺序和定义。

    If only member function clear of WindowMgr is a friend of Screen, there are some points need to note ...

  8. Cocos动作执行时,同时执行完毕再进行下一步的方式

    在js中,runAction是统一保存起来等单个文件运行完了再统一进行回调运行的,所以如果想在动作执行完毕之后调用某个函数,那这个函数就应该存在于回调函数中,不会就不能同步了

  9. OpenCV函数学习:alignPtr对齐指针

    转载地址:https://www.tuicool.com/articles/q2QrQr 在某些架构上,只有能被指定数(如4,16)整除的内存地址才能够被访问,否则程序会crash,或者出现错误的结果 ...

  10. mysql驱动问题

    Unknown initial character set index '255' received from server. Initial client character 解决方法 驱动版本不对 ...