76 lines
2.2 KiB
JavaScript
76 lines
2.2 KiB
JavaScript
|
|
/*
|
|||
|
|
* @FilePath : /public/js/zip.js
|
|||
|
|
* @Description :
|
|||
|
|
*/
|
|||
|
|
/*
|
|||
|
|
* @Author: suhang suhang_max@163.com
|
|||
|
|
* @Date: 2023-06-01 00:14:29
|
|||
|
|
* @LastEditors: suhang suhang_max@163.com
|
|||
|
|
* @LastEditTime: 2023-06-01 10:56:19
|
|||
|
|
* @FilePath: \train-assessd:\Code\basic-frontend\zip.js
|
|||
|
|
* @Description: 将打包后的文件夹自动压缩成zip
|
|||
|
|
*/
|
|||
|
|
// console.log(import.meta, 'import.meta.env.VITE_APP_GISURL')
|
|||
|
|
import path from 'path'
|
|||
|
|
import fs from 'fs'
|
|||
|
|
import JSZip from 'jszip'
|
|||
|
|
const plugin = (fileName = 'pms-front', output) => {
|
|||
|
|
// if (!output) output = path.resolve(__dirname, `../..${import.meta.env.VITE_BASE_URL}`)
|
|||
|
|
output = path.resolve(__dirname, `../..${output}`)
|
|||
|
|
fileName += '.zip'
|
|||
|
|
const makeZip = () => {
|
|||
|
|
const zip = new JSZip()
|
|||
|
|
const distPath = path.resolve(output)
|
|||
|
|
const readDir = (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 = () => {
|
|||
|
|
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()
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
export default plugin
|