在此之前,操作目录、压缩文件是通过scripts来实现的,在windows机器上多有不便,需要通过linux命令行来实现cp、rm命令:
"cpdist": "cp -r ./dist/* ../../qw-portal/assetAllocation/",
"rmdist": "rm -rf ../../qw-portal/assetAllocation/*",
"build:test": "umi build && npm run rmdist && npm run cpdist",
还有使用7z命令来压缩文件,需要先在电脑上安装7z程序:
"build:h5:prod": "umi build && 7z a h5-prod.zip dist",
现在学到了一种新方法,通过nodejs环境来实现文件、文件夹的复制粘贴,还有压缩解压缩等操作,那就是使用adm-zip、fs-extra这两个工具。
首先是编写压缩脚本,在根目录下新建build文件夹,新建index.js:
const AdmZip = require("adm-zip");
const dayjs = require("dayjs");
const fse = require("fs-extra");/** 异步复制文件夹 */
const copyFilesAsync = async (source, target) => {if (fse.existsSync(source)) {await fse.copy(source, target);} else {console.warn(`未找到源文件夹[${source}],检查是否打包失败`);}
}//删除老文件夹,如果文件夹不存在,则不会做任何变更
fse.removeSync('./dist');
//创建文件夹
fse.mkdirpSync('./dist');Promise.all([copyFilesAsync('./packages/assetAllocation/dist/', './dist/assetAllocation/'),copyFilesAsync('./packages/fundDiagnosis/dist/', './dist/fundDiagnosis/'),copyFilesAsync('./packages/investmentAdvisor/dist/', './dist/investmentAdvisor/'),copyFilesAsync('./packages/productSalesCalendar/dist/', './dist/productSalesCalendar/'),copyFilesAsync('./packages/videoReview/dist/', './dist/videoReview/'),
]).then(() => {try {//如果存在老的,则改名作为备份if (fse.existsSync('./qw-portal.zip')) {fse.moveSync('./qw-portal.zip', `./qw-portal_${dayjs().format('YYYYMMDD')}.zip`, { overwrite: true });}} catch (error) {console.log('moveSync fail', error);}// 在内存中创建新的zip文件const distZip = new AdmZip();// 为zip添加本地文件夹distZip.addLocalFolder('./dist/', './qw-portal/');// 生成zip文件distZip.writeZip(`./qw-portal.zip`);
})
最后只需要在scripts中增加命令即可:
"gzip": "node build/index.js",
"build:prod": "pnpm -r --filter=./packages/* run build:prod && npm run gzip",