vue3+vite打包自动生成dist.zip压缩包
vue3+vite打包自动生成dist.zip压缩包
·
先写个生成zip的功能。新建一个zip.js文件,放在和vite.config.js同一级
// zip.js
const plugin = function(fileName = 'dist', output){
const path = require('path');
if(!output)output = path.resolve(__dirname,'./dist');
fileName += '.zip';
const makeZip = function () {
const path = require('path')
const fs = require('fs')
const JSZip = require('jszip');
const zip = new JSZip()
const distPath = path.resolve(output)
const readDir = function (zip, dirPath) {
// 读取dist下的根文件目录
const files = fs.readdirSync(dirPath);
files.forEach(fileName => {
const fillPath = path.join(dirPath, "./", fileName)
const file = fs.statSync(fillPath);
// 如果是文件夹的话需要递归遍历下面的子文件
if (file.isDirectory()) {
const dirZip = zip.folder(fileName);
readDir(dirZip, fillPath);
} else {
// 读取每个文件为buffer存到zip中
zip.file(fileName, fs.readFileSync(fillPath))
}
});
}
const removeExistedZip = () => {
const dest = path.join(distPath, './' + fileName)
if (fs.existsSync(dest)) {
fs.unlinkSync(dest)
}
}
const zipDir = function () {
readDir(zip, distPath);
zip.generateAsync({
type: "nodebuffer", // 压缩类型
compression: "DEFLATE", // 压缩算法
compressionOptions: { // 压缩级别
level: 9
}
}).then(content => {
const dest = path.join(distPath, '../' + fileName)
removeExistedZip()
// 把zip包写到硬盘中,这个content现在是一段buffer
fs.writeFileSync(dest, content);
});
}
removeExistedZip()
zipDir(distPath)
}
return {
name: 'vite-plugin-auto-zip',
apply: 'build',
closeBundle(){
makeZip()
}
}
}
module.exports = plugin
在vite.config.js中引入插件
// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from "path";
import myPlugin from './zip'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
myPlugin()
],
resolve: {
alias: {
"@": path.resolve(__dirname, "src"),
},
},
})
这样就大功告成了
更多推荐
已为社区贡献2条内容
所有评论(0)