UNPKG

@ccos/package_maker

Version:

Coocaa WebOS APP Command-Line Tools.

105 lines (80 loc) 3.05 kB
#!/usr/bin/env node import os from 'os'; import path from 'path'; import fs from 'fs'; import crypto from 'crypto'; import tar from './lib/tar.js'; import finder from './lib/finder.js'; import AdmZip from 'adm-zip'; import { rimrafSync } from 'rimraf'; function calculateMD5(filePath) { return new Promise((resolve, reject) => { // 创建一个 hash 实例 const hash = crypto.createHash('md5'); const stream = fs.createReadStream(filePath); stream.on('data', (data) => { hash.update(data); // 逐块更新 hash 值 }); stream.on('end', () => { const md5 = hash.digest('hex'); // 获取 MD5 值 resolve(md5); }); stream.on('error', (err) => { reject(err); }); }); } let distDirExist = false; // 是否存在 dist 目录 let packageJsonFileExist = false; // 是否存在 manifest.json 文件 let tarSourcePath = ''; // tar输入源 let projectName = ''; // 工程名 let outputDirName = 'publish'; // 输出目录 const currDirPath = process.cwd(); // 当前目录 const tmpdir = os.tmpdir(); // 临时文件夹 console.log(' '); distDirExist = finder.findDirInCurr('dist'); // 如果 dist 目录不存在,则继续寻找 build 目录 (react编译之后放在 build 目录) if (!distDirExist) { console.error('目录 \"dist\" 不存在 !'); process.exit(-1); } packageJsonFileExist = finder.findFileInCurr('package.json'); if (!packageJsonFileExist) { console.error('文件 \"package.json\" 不存在 !'); process.exit(-1); } tarSourcePath = 'dist'; console.log('正在打包 dist 目录'); const zipfile = new AdmZip(); zipfile.addLocalFolder('./' + tarSourcePath); if (fs.existsSync('package.json')) { let packageJsonText = fs.readFileSync('package.json', {encoding: 'utf8'}); console.log(packageJsonText); try { let manifest = JSON.parse(packageJsonText); projectName = manifest.name || ''; //let targetJsonStr = JSON.stringify(manifest); //zipfile.addFile('manifest.json', Buffer.from(targetJsonStr)); } catch (e) { console.log('process manifest.json exception: ' + e); } } if (!projectName) { projectName = 'app'; } rimrafSync(outputDirName); if (!fs.existsSync(outputDirName)) { fs.mkdirSync(outputDirName); } const outputPkgFileName = outputDirName + '/' + projectName + '.zip'; const outputJsonFileName = outputDirName + '/' + projectName + '.json'; zipfile.writeZip(outputPkgFileName); console.log(`\n 生成文件 ${outputPkgFileName}\n`); const md5value = await calculateMD5(outputPkgFileName); console.log(`md5 = ${md5value}`); const jsonContent = { md5: md5value, }; fs.writeFileSync(outputJsonFileName, JSON.stringify(jsonContent)); console.log(`\n 生成文件 ${outputJsonFileName}\n`);