听到同事说没找到压缩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. Java基础11-List;Set;Map

    作业解析: remove(int index); //删除指定位置的元素 List list = new ArrayList(); list.add("s1"); list.add ...

  2. 使用SpringSecurity体验OAuth2 (入门2)

    本文继续使用SpringSecurity从实战角度对OAuth2进行体验,上一篇 搭建了项目环境,并对配置做了初步分析,分析发现会有两套配置可能在影响OAuth,一个是由授权服务的启动类上的注解@En ...

  3. webpack2 实践

    实例gif图: 目录截图: 目录介绍: dist目录(最后生成的目录,里面文件为配置webpack自动生成的): c/:css文件夹; i/:img文件夹; j/:js文件夹; src目录下(开发目录 ...

  4. Codeforces 558E A Simple Task (计数排序&&线段树优化)

    题目链接:http://codeforces.com/contest/558/problem/E E. A Simple Task time limit per test5 seconds memor ...

  5. C#发送带附件的邮件的代码

    如下的代码是关于C#发送带附件的邮件的代码. MailMessage m = new MailMessage();m.Subject = "File attachment!";m. ...

  6. linux线程 join/detach

    linux中创建线程时,可以通过 __attr 指定线程的属性 extern int pthread_create (pthread_t *__thread, __const pthread_attr ...

  7. Hanlp学习笔记

    一.首先要引入mawen依赖包: <dependency> <groupId>com.hankcs</groupId> <artifactId>hanl ...

  8. 解决MongoDB登录的WARNING

    解决MongoDB登录的WARNING 1.安装完成运行mongodb警告内容如下: 2019-01-17T15:41:50.578+0800 I CONTROL [initandlisten] ** ...

  9. ***阿里云ECS实战配置虚拟主机 + Apache 配置虚拟主机三种方式

    阿里云ECS实战配置虚拟主机 买了一台ECS阿里云服务器,性能感觉有点富余,想着可以陪着虚拟主机多一些WWW目录好放一些其他的程序.比如DEMO什么的. 今天研究了下,主要是就是做基于不同域名的虚拟主 ...

  10. Node js redis

    const redis = require('redis');//redis , '172.16.4.2'); //redis操作 client.set("hello", &quo ...