基于微擎小程序框架写的打包工具

在我看来,微信原生开发小程序应该被很多人放弃了 至于原因嘛 众所周知的就不多述了

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}”请在根目录下查看`
                                                        );
                                                    }
                                                });
                                            }
                                        }
                                    );
                                }
                            }
                        );
                    }
                });
            }
        });
    }
});

 

posted @ 2023-02-12 20:36  Sunsin  阅读(484)  评论(0编辑  收藏  举报