基于微擎小程序框架写的打包工具
在我看来,微信原生开发小程序应该被很多人放弃了 至于原因嘛 众所周知的就不多述了
uniapp 在开发微信小程序、支付宝小程序等很给力 插件市场的插件很丰富,已经可以支撑它走向更远的地方了
好了,废话不多说 uniapp打包发布到微擎小程序我们需要干啥呢?
你得安装nodejs
uniapp打包以后一般会经过如下步骤:
1.进行打包操作以后会生成这样一个目录
./unpackage/dist/build/mp-weixin/
2. 将siteinfo.js复制到unpackage下的dist下的build的mp-weixin下
3. 将siteInfo:require("siteinfo.js");写入到./unpackage/dist/build/mp-weixin/的app.js文件第一行 存在则不写入
4. 读取writePath目录下的common/vendor.js文件,然后找到域名并且一一替换
5. 修改完了以后打包,包名是模块名
有了这个工具以后,你就直接复制该JavaScript到(uniapp)项目根目录下 执行以下命令即可
npm i archiver
如果没有初始化npm ,记得
npm init -y
如果以上命令执行正确的话,执行这行命令就会在你的项目根目录生成和模块名相同的zip压缩包
node xx.js
/**
* 微擎微信小程序写入文件以及打包
* @auther: ML
* @date "2022/02/10"
*/
// 导入fs模块
const fs = require("fs");
// 导入zip模块
const archiver = require("archiver");
// 压缩包后缀
const zipSuffix = ".zip";
// 压缩等级
const zipLevel = 9;
// 写入目录
const writePath = "./unpackage/dist/build/mp-weixin/";
// 如果writePath目录不存在则不执行
if (!fs.existsSync(writePath)) {
console.log(`${writePath}目录不存在`);
return;
}
// 将siteinfo.js复制到unpackage下的dist下的build的mp-weixin下
fs.copyFile("./siteinfo.js", `${writePath}siteinfo.js`, (err) => {
if (err) {
console.log("siteinfo.js复制失败!");
} else {
console.log("1、siteinfo.js复制成功");
// 将siteInfo:require("siteinfo.js");写入到./unpackage/dist/build/mp-weixin/的app.js文件第一行 存在则不写入
fs.readFile(`${writePath}app.js`, "utf-8", (err, data) => {
if (err) {
console.log(err);
} else {
if (data.indexOf("siteInfo:require") === -1) {
data = 'siteInfo:require("siteinfo.js");\r' + data;
console.log("2、siteInfo字符串写入app.js成功");
} else {
console.log("2、app.js已存在siteInfo:require,不再写入");
}
fs.writeFile(`${writePath}app.js`, data, "utf-8", (err) => {
if (err) {
console.log(err);
} else {
// 读取writePath目录下的common/vendor.js文件
fs.readFile(
`${writePath}common/vendor.js`,
"utf-8",
(err, data) => {
if (err) {
console.log(err);
} else {
data = data.replace(
/\{name:"\w+",uniacid:"\d+",acid:"\d+",multiid:"\d+",version:"\d+\.\d+\.\d+",siteroot:"https:\/\/\w+\.\w+\.\w+\/app\/index\.php",method_design:"\d+"\}/,
`{ name: require("../siteinfo.js").name, uniacid: require("../siteinfo.js").uniacid,acid: require("../siteinfo.js").acid,multiid: require("../siteinfo.js").multiid,version: require("../siteinfo.js").version,siteroot:require("../siteinfo.js").siteroot,method_design: require("../siteinfo.js").method_design}`
);
fs.writeFile(
`${writePath}common/vendor.js`,
data,
"utf-8",
(err) => {
if (err) {
console.log(err);
} else {
console.log(
`3、siteinfo.js写入“vendor.js”成功`);
// 读取siteinfo.js文件中的name字段
fs.readFile("./siteinfo.js", "utf-8", (
err, data) => {
if (err) {
console.log(err);
} else {
const str = data
.replace(/'/g, '"');
const reg =
/{[\S\s]*?}/g;
const result = str
.match(reg)[0];
const filename = JSON
.parse(result).name;
console.log(
`4、读取siteinfo.js中压缩包名称“${filename}”成功`
);
const output = fs
.createWriteStream(
__dirname +
`/${filename}${zipSuffix}`
);
// 压缩类型
const archiveType =
zipSuffix.replace(
".", "");
const archive =
archiver(
archiveType, {
zlib: {
level: zipLevel,
},
});
archive.pipe(output);
archive.directory(
`${writePath}/`,
"");
archive.finalize();
console.log(
`5、压缩成功,文件名为“${filename}${zipSuffix}”请在根目录下查看`
);
}
});
}
}
);
}
}
);
}
});
}
});
}
});