fast.js IRS快速打包应用node脚本说明
1.原理
在 IRS 应用平台上传编译的的源码 zip包后 会执行以下编译流程
- 解压 zip 包
- 在解压后的目录执行
npm install
命令 - 执行
npm run build
命令 - 将编译完成的构建物目录(默认
/build
)下文件内容拷贝至部署目录 - 构建完成
根据观察日志 ,编译流程主要耗时在 安装依赖 和 build 阶段,所以我们可以将该步骤在本地提前做好 可以大大提高平台的构建速度,以及规避一些因为 node 或系统环境与本地开发环境不一致导致的编译失败问题。
手动实现步骤如下
- 本地执行
npm run build
- 创建一个新的文件夹
fast-pack
(叫什么随意) - 在该文件夹下 创建
/fast-pack/dist
目录 - 在
fast-pack
目录下创建package.json
文件并写入以下内容
json
{
"name": "fast-build",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"scripts": {
"build": "mkdir build;mv ./dist/* ./build"
}
}
在上方代码中 核心的是 mkdir build;mv ./dist/* ./build
命令,该命令将会在 IRS 上执行,其意思是
① mkdir build
创建一个 build目录。 ② mv ./dist/* ./build
将./dist/
下的所有文件拷贝至 ./build
目录 。当在 IRS 平台的编译环境中执行 npm run build
时就会执行这两个命令 5. 将步骤 1
的构建结果拷贝至fast-pack/dist/
目录下 6. 将fast-pack
目录打包为 fast-pack.zip
7. 将fast-pack.zip
上传至 IRS 平台 (和原来上传整个源码包一样)
2.脚本完整代码
javascript
const util = require("util") ;
const child_process = require('child_process');
const fs = require('fs');
const execter = util.promisify(child_process.exec);
const log = (msg)=>console.log('[FAST-PACK]-LOG:',msg);
async function main(){
log('程序启动')
if(fs.existsSync('./fast-pack')){
log('删除已存在文件夹')
fs.rmdirSync('./fast-pack', { recursive: true });
}
if(fs.existsSync('./fast-pack.zip')){
log("清理旧的打包");
fs.rmSync('./fast-pack.zip')
}
log('创建目录')
fs.mkdirSync('./fast-pack')
log("创建构建物目录")
fs.mkdirSync('./fast-pack/dist')
log('拷贝构建物')
await execter('cp -r ./build/* ./fast-pack/dist')
const packageJSON = `
{
"name": "fast-build",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"scripts": {
"build": "mkdir build;mv ./dist/* ./build"
}
}
`
log('写入package.json')
fs.writeFileSync('./fast-pack/package.json',packageJSON)
log('压缩文件...')
const res = await execter('zip -r ./fast-pack.zip ./fast-pack/*;')
console.log(res)
log('Success! 执行结束打包成功')
}
main();
// fs.copy('./fast-pack/dist','./dist')
3.使用
- 将
fast.js
拷贝至项目根目录下 - 执行
node fast.js
- 执行成功后 会在项目根目录生成一个
fast-pack.zip
文件 - 上传该文件至 IRS 平台
4.说明
因涉及 unix/linux 命令执行
目前本脚本仅在 macOS
下可执行,Windows
环境下可尝试手动打包步骤 或者自行改写脚本 要改的话其实只要 更改 const res = await execter('zip -r ./fast-pack.zip ./fast-pack/*;')
部分的zip 打包实现部分的代码即可,可以通过安装一些node 的 zip 打包库 应该就可以实现 跨平台共用