听到同事说没找到压缩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. 基于WebGL/Threejs技术的BIM模型轻量化之图元合并

    伴随着互联网的发展,从桌面端走向Web端.移动端必然的趋势.互联网技术的兴起极大地改变了我们的娱乐.生活和生产方式.尤其是HTML5/WebGL技术的发展更是在各个行业内引起颠覆性的变化.随着WebG ...

  2. AttributeError: 'module' object has no attribute 'enableTrace'

    Traceback (most recent call last): File "Long-lived-connection.py", line 29, in <module ...

  3. 03中间件mycat对pxc集群的分片处理

    安装第二个pxc集群 作为mycat的第二个分片 直接拷贝其中的一个虚拟机,然后还原到最初的状态,这样会小很多,启动改一下IP和基础配置,然后再次拷贝这个虚拟机两份改IP重启即可 正常安装pxc集群即 ...

  4. Java版InfluxDB工具类

    InfluxDB工具类 package com.influxdb.test; import java.util.Map; import org.influxdb.InfluxDB; import or ...

  5. 手把手详解持续集成之GitLab CI/CD

    一.环境准备 首先需要有一台 GitLab 服务器,然后需要有个项目:这里示例项目以 Spring Boot 项目为例,然后最好有一台专门用来 Build 的机器,实际生产中如果 Build 任务不频 ...

  6. C# 高级编程05----常用修饰符

    常用修饰符: 1.访问可见性修饰符 修饰符 应用于 说明 public 类型或成员 任何代码都可访问 protected 类型或内嵌类型的成员 只有子类能访问 internal 类型或成员 只能在包含 ...

  7. SSM框架:解决后台传数据到前台中文乱码问题,使用@ResponseBody返回json 中文乱码

    解决方法一:@RequestMapping(value="/getphone",produces = "text/plain;charset=utf-8") / ...

  8. Continuity of arithmetic operations

    Arithmetic operations taught in elementary schools are continuous in the high level topological poin ...

  9. nginx配置负载均衡

    本教程不讲解nginx的安装,若安装请看博客 http://www.cnblogs.com/hqjy/p/8092983.html 本教程不讲解tomcat的安装,若安装请看博客 http://www ...

  10. Visual Studio Code 搭建Python开发环境

    1.下载Python https://www.python.org/downloads/windows/ 选择一个版本,目前2.0的源码比较多,我下载的2.7.12 2.配置环境变量 3.Visual ...