npm scrpit/node实现静态资源(js/css)复制重命名(版本号)、压缩tar.gz、上传至服务器
来源:互联网 发布:知豆电动汽车官方电话 编辑:程序博客网 时间:2024/05/20 22:38
使用场景:一些插件js包、css样式包等文件较大。由于服务器带宽(1M)限制,每次加载时相当慢,偶尔还能达到20s。所以将静态资源另外部署到第三方平台,如腾讯云对象存储、阿里云、CND等等,后期根据相关接口获取版本号及相关静态资源地址…
具体流程:
#使用:
npm run build
# 目录结构:
build/ |- static-resource-packaging.jsdist/static/ |- css/ |- common.min.css |- js/ |- common.min.js |- plugins.min.jspackage.json
# static-resource-packaging.js
/** * 静态资源归类,打包,上传 * Create by Capricorncd 2017-09-25 */// 依赖安装// npm install needle tar tar.gz --savevar fs = require('fs');var targz = require('tar.gz')();var needle = require('needle');// 版本号// 可随机生成,也可手动配置(或从package.json中读取)var version = '201509251522';// 待拷贝的文件(需要版本号,后期需要初始化加载的静态资源)// FILES_HAS_VER属性:静态资源原目录// FILES_HAS_VER属性值:静态资源需要拷贝到的目录var FILES_HAS_VER = { 'static/css/common.min.css': './dist/static/css/common.min.css', 'static/js/plugins.min.js': './dist/static/js/plugins.min.js', 'static/js/common.min.js': './dist/static/js/common.min.js'};// 需要创建的目录var NEED_CREATE_DIRECTORY = [ './dist/static', './dist/static/js', './dist/static/css'];// 清空dev/static目录// 打包前先清空目录,防止旧版本文件存在deleteFolder('./dist/static');// 创建目录(同步任务)createDirectory(NEED_CREATE_DIRECTORY);// 复制文件到指定目录(需要重命名)copyFile(FILES_HAS_VER, function (paths) { // 生成压缩包的名称 var targzFile = './dist/statics.'+ version +'.tar.gz'; // 创建压缩包/压缩文件夹 compressDirectory('./dist/static', targzFile, function () { console.log('版本号:' + version); console.log('静态文件:'); console.log(paths); // 向服务器发送压缩包文件 // 读取文件 var buffer = fs.readFileSync(targzFile); // 接口参数 var params = { class: 'Mainten', // 与后台约定的接口参数 method: 'upstatic', // 与后台约定的接口参数 data: JSON.stringify({ver: version, paths: paths}), // needle 上传文件配置 zip_file: { buffer : buffer, filename : targzFile.split('/').pop(), content_type : 'application/octet-stream' } } // 上传(相当于提交multipart/form-data表单) // needle 详细说明,请见github // https://github.com/tomas/needle needle.post('http://192.168.5.52:8787', params, { timeout: 60000, multipart: true }, function (err, resp, body) { console.log('err -----------------------------------'); console.log(err); // console.log('resp -----------------------------------'); // console.log(resp); console.log('body -----------------------------------'); // 上传成功,服务器返回body结构(字符串) // {code: 0, msg: 'success!'} try { // 尝试转换为js对象 body = JSON.parse(body); } catch (e) {} console.log(body); if (body && body.code === 0) { // 删除本地targzFile压缩文件 var unlink = fs.unlinkSync(targzFile); if (!unlink) { console.log('删除成功: '+ targzFile); } else { console.log('删除失败: '+ targzFile); console.log(unlink); } } else { console.log('没有删除压缩包 '+ targzFile); } console.log('complation -----------------------------------'); }); });});/** * 删除目录及文件夹 * @param directoryPath 文件夹路径 */function deleteFolder(directoryPath) { var files = []; if (fs.existsSync(directoryPath)) { files = fs.readdirSync(directoryPath); files.forEach(function (file, index) { var curPath = directoryPath + "/" + file; if (fs.statSync(curPath).isDirectory()) { // recurse deleteFolder(curPath); } else { // delete file fs.unlinkSync(curPath); } }); fs.rmdirSync(directoryPath); }};/** * 创建目录 * @param arr 需要创建的目录列表数组 */function createDirectory(arr) { for (var i = 0; i < arr.length; i++) { if (!fs.existsSync(arr[i])) { fs.mkdirSync(arr[i]); } }}/** * 拷贝文件 && 重命名 * @param arr 需要拷贝的文件列表数组 * @param callback 回调函数 */function copyFile(obj, callback) { // 需要加载的文件路径 var paths = []; // 处理计数 var count = 0; // 对象长度 var len = 0; for (var p in obj) { len++; } for (var src in obj) { // 目标文件名,将压缩文件的'.min.'改为'.版本号.' var dst = obj[src].replace('.min.', '.'+ version +'.'); // 读取文件 _readFile(src, dst); } // 读取文件 function _readFile(src, dst) { fs.readFile(src, function (err, data) { if (err) { console.log(err); } else { _writeFile(dst, data); } }) } // 写入文件 function _writeFile(dst, data) { fs.writeFile( dst, data, function (error) { if (error) { throw error; } else { console.log("文件已保存 " + dst); } count++; // 如果文件拷贝完成,回调 if (count === len) { callback && callback(paths); } }); }}/** * 压缩文件夹 * @param dir 被压缩的目录文件夹 * @param fileName 生成压缩文件的地址及名称 * @param callback 回调 */function compressDirectory(dir, fileName, callback) { // 被压缩文件夹 var read = targz.createReadStream(dir); // 写入文件 var write = fs.createWriteStream(fileName); // Let the magic happen read.pipe(write); // 压缩包创建完成 read.on('end', callback);};
# package.json
{ "name": "static-resource-packaging", "version": "1.0.0", "description": "", "author": "Capricorncd", "scripts": { "build": "node build/static-resource-packaging.js" }, "dependencies": { "needle": "^2.0.1", "tar": "^4.0.1", "tar.gz": "^1.0.5" }, "engines": { "node": ">= 4.0.0", "npm": ">= 3.0.0" }}
至此,静态资源复制重命名压缩及上传就完成。
http://blog.csdn.net/Yagizacd/article/details/78095761
关于静态资源预加载方法封装,估计会在github发布…
https://github.com/capricorncd
阅读全文
0 0
- npm scrpit/node实现静态资源(js/css)复制重命名(版本号)、压缩tar.gz、上传至服务器
- node js静态资源服务器代码
- 使用Node.js搭建静态资源服务器
- 使用nodejs压缩js,css静态资源
- java压缩tar.gz
- tar.gz解压,压缩
- gulp实现静态资源压缩,打包,上传总结
- Node实现静态服务器
- tar.gz本地文件上传到服务器无法解压.
- Java实现将多个文件打包压缩成tar.gz文件
- 利用tar32.dll实现压缩成.tar.gz文件
- 关于windows下C++实现解压、压缩 .tar.gz文件
- 扩展7-zip右键,一步实现tar.gz的压缩
- Java 实现*.tar.gz文件压缩和解压
- TAR GZ 压缩,解压缩命令
- java 压缩/解压【tar.gz】
- linux 解压 压缩 tar.gz
- node.js配置静态服务器
- 大牛建议的Java初学者的学习(1—5年内)
- CentOS 7下 Oracle 11gR2 安装最新详解
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 B. Train Seats Reservation(贪心问题+区间覆盖)
- Choose and divide UVA
- 2017大二第六周学习笔记
- npm scrpit/node实现静态资源(js/css)复制重命名(版本号)、压缩tar.gz、上传至服务器
- 一个关于 nolock 的故事
- 深入理解计算机系统第二章学习笔记
- 第三周 项目3 -- 求集合并集
- 关于数据库方面的面试技巧:如何从建表展现自己能力
- Android启动篇 — init原理(一)
- smart-framework
- L
- QT+ros