在此之前,操作目錄、壓縮文件是通過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",