UNPKG

unpack-wxapkg

Version:

unpack-wxapkg是用来对微信小程序(或者微信小游戏)的.wxapkg包进行解析的工具,由于开发时使用的node环境是v8.10.0,建议在该版本或更高版本node下使用。

68 lines (61 loc) 2.17 kB
const fs = require('fs-extra'); const path = require('path'); const glob = require('glob'); const Wxapkg = require('./lib/Wxapkg'); const mkdirp = require('./lib/mkdirp'); async function unpackWxapkg(source, destination) { console.log('unpackWxapkg start: ' + source); const basename = path.basename(source).replace(path.extname(source), ''); const file = await fs.readFileSync(source); let wxapkg = new Wxapkg(file); let files = wxapkg.decode(); let pArr = []; for (let i = 0; i < files.length; i++) { const f = files[i]; let filePath = path.join(process.cwd(), './', destination, basename, f.name); let dir = path.dirname(filePath); mkdirp(dir, function (err) { if (err) return cb(err); fs.writeFileSync(filePath, f.chunk, 'binary'); pArr.push(Promise.resolve()) }); } return Promise.all(pArr).then(() => { console.log('unpackWxapkg over '); }).catch((err)=> console.error(err)) } /** 查找路径下的所有wxapkg文件 */ async function findWxapkgFiles(src) { return new Promise((resolve, reject) => { const filePath = path.join(src, '**/*.wxapkg'); glob(filePath, function (err, arr) { if (err) { resolve([]); console.error(err); return; } resolve(arr); }); }); } async function unpack(src, dest) { if (!dest) { dest = 'dest'; console.warn('没有设置输出文件目录, 使用默认配置: ' + dest); } if (!src) { src = './'; console.warn('没有设置要解压的文件或文件目录, 使用默认配置: ' + src); } const extname = path.extname(src); if (extname && extname === '.wxapkg') { // 是文件 await unpackWxapkg(src, dest); } else { // 是目录 const files = await findWxapkgFiles(src); for (let i = 0; i < files.length; i++) { const file = files[i]; await unpackWxapkg(file, dest); } } } module.exports = unpack;