前言:开发环境没接jenkins,每次打完包后需要手动压缩上传服务器再解压,体验比较差,因此打算写个自动部署的脚本,在这之前呢,需要对我们打包后的文件做个压缩。
jszip
这里用到的库是jszip,主要就三个关键方法:
-
const zip = new JSZIP()
:我们需要新建一个实例,这个实例保存着需要压缩的数据和目录结构 -
zip.generateAsync
:返回一个promise,then的参数就是压缩后的内容,可以通过fs.writeFile写成zip文件。参数是一个对象{ type: 'nodebuffer', compression: 'DEFLATE', //压缩算法 compressionOptions: { level: 9 //压缩等级 } }
-
zip.folder
:如果是一个文件夹,需要用这个方法生成zip文件中对应的文件夹 -
zip.file
:压缩一个文件
举个例子:打包后的文件在根目录下的prod文件夹中,在根目录下新建一个zip.js,具体代码如下
const path = require('path');
const JSZIP = require('jszip');
const fs = require('fs');
const zip = new JSZIP();
pushZip(zip, path.resolve(__dirname, './prod'));
zip.generateAsync({
type: 'nodebuffer',
compression: 'DEFLATE',
compressionOptions: {
level: 9
}
}).then(function(content) {
fs.writeFile(path.resolve(__dirname, './prod/XX.zip'), content, err => {
if (err) throw err;
console.log('文件已被保存');
});
});
function pushZip(floder, pPath) {
const files = fs.readdirSync(pPath, {withFileTypes: true});
files.forEach((dirent, index) => {
let filePath = `${pPath}/${dirent.name}`;
if (dirent.isDirectory()) {
let zipFloder = zip.folder(filePath.replace(`${__dirname}\\prod/`, ''));
pushZip(zipFloder, filePath);
} else {
floder.file(dirent.name, fs.readFileSync(filePath));
}
});
}
执行node zip.js即可看到prod文件夹中多了一个XX.zip文件
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。