微信小程序 node脚本 自动化 代码上传、预览
miniprogram-ci
miniprogram-ci
从 1.0.28 开始支持第三方平台开发的上传和预览,调用方式与普通开发模式无异。查看详情
密钥及 IP
白名单配置
使用 miniprogram-ci
前应访问"微信公众平台-开发-开发设置"后下载代码上传密钥,并配置 IP
白名单 开发者可选择打开 IP
白名单,打开后只有白名单中的 IP
才能调用相关接口。我们建议所有开发者默认开启这个选项,降低风险 代码上传密钥拥有预览、上传代码的权限,密钥不会明文存储在微信公众平台上,一旦遗失必须重置,请开发者妥善保管
IP
白名单
IP
可以在 查询ip
网站查看自己的 ip
地址 比如:http://mip.chinaz.com/
密钥
上图中的 小程序代码上传密钥,重置或者生成,会下载该密钥文件。
文件修改之后,可能会报下面错误,此时重新生成密钥即可
20003 Error: {"errCode":-1,"errMsg":"get new ticket fail innerCode: -80011"}
脚本调用
npm install miniprogram-ci --save
upload.js
const ci = require("miniprogram-ci");
// 小程序打包之后的路径
const cwd = process.cwd() + "/dist/build/mp-weixin";
const project = new ci.Project({
appid:'你得appid',
type: "miniProgram",
projectPath: cwd,
// 密钥文件路径
privateKeyPath: process.cwd() + "/src/你得密钥文件.key",
ignores: ["node_modules/**/*"],
});
const uploadResult = ci
.upload({
project,
version:'1.0.0',
desc:'desc',
setting: {
es6: false,
},
onProgressUpdate: console.log,
})
.then((res) => {
console.log(res);
console.log("上传成功");
})
.catch((error) => {
if (error.errCode == -1) {
console.log("上传成功");
}
console.log(error);
console.log("上传失败");
process.exit(-1);
});
配置 package.json
"scripts":{
"build:prod": "cross-env NODE_ENV=production UNI_PLATFORM=mp-weixin vue-cli-service uni-build && node upload.js"
}
可以通过 环境变量 配置 生产、测试、本地等
HTTP V2
升级说明:自
1.02.202003092
开始,CLI
& HTTP 接口升级v2
版本,在v2
版本中,旧版命令仍然可以使用,但已废弃并会在未来移除,请使用 v2 命令。v2 版本增加了云开发管理操作支持、优化命令形式、增加细致状态提示、支持长时间命令执行、支持国际化(中英文选择)等。
通过命令行调用安装完成的工具可执行文件,完成登录、预览、上传、自动化测试等操作。调用返回码为 0 时代表正常,为 -1 时错误。
要使用命令行,注意首先需要在开发者工具的设置 -> 安全设置中开启服务端口。
命令行工具所在位置:
macOS
: <安装路径>/Contents/MacOS/cli
Windows
: <安装路径>/cli.bat
upload-cli.js
- 打开微信开发者工具以及上传代码
// upload.js
const child = require("child_process");
const exec = child.execSync;
function getDays() {
const date = new Date();
const year = date.getFullYear();
const month = date.getMonth() + 1;
const strDate = date.getDate();
const hours = date.getHours();
const minutes = date.getMinutes();
return `在${year}年${month}月${strDate}日${hours}点${minutes}分提交上传`;
}
const branch = child.execSync("git name-rev --name-only HEAD", {
encoding: "utf8",
});
const config = {
// cli.bat 所在目录
path: `D:/微信web开发者工具/cli.bat`,
projectPath: `${process.cwd()}/dist/build/mp-weixin`,
version: `1.2.1`,
desc: `${getDays()},发布分支${branch}`,
};
// package.json scripts 配置
exec('npm run build', { stdio: 'inherit' });
child.exec(
`${config.path} islogin`,
{ stdio: "inherit" },
(error, stdout, stderr) => {
// 判断是否已经登录微信开发者工具
const isLogin = JSON.parse(stdout).login;
if (isLogin) {
exec(
`${config.path} upload --project ${config.projectPath} -v ${config.version} -d ${config.desc}`,
{ stdio: "inherit" }
);
} else {
exec(`${config.path} login --qr-size small`, { stdio: "inherit" });
exec(
`${config.path} upload --project ${config.projectPath} -v ${config.version} -d ${config.desc}`,
{ stdio: "inherit" }
);
}
}
);
preview-cli.js
- 生成预览二维码
const child = require("child_process");
const exec = child.execSync;
const config = {
path: `D:/微信web开发者工具/cli.bat`,
projectPath: `${process.cwd()}/dist/build/mp-weixin`,
version: `1.2.1`,
};
exec(
`${config.path} preview --project ${config.projectPath} --qr-size small`,
{ stdio: "inherit" }
);
待优化的点
- 设置版本号
- 填写版本描述
- …