一.安装依赖

npm install miniprogram-ci

二.在根目录新建publishMiniProgram.js

const path = require('path');
//在第一步安装的路径
const ci = require(path.resolve(__dirname, '../extend/node_modules', 'miniprogram-ci'));
const fs = require('fs');

// 获取传递的 JSON 文件路径
const dataFilePath = process.argv[2]; // 获取命令行参数
if (!dataFilePath) {
    console.error('未传入配置文件路径');
    process.exit(1);
}

// 读取配置文件
const config = JSON.parse(fs.readFileSync(dataFilePath, 'utf-8'));

// 项目配置
const projectConfig = {
    appid: config.appid, // 使用从 JSON 文件中读取的 appid
    type: 'miniProgram',
    projectPath: path.resolve(__dirname, '../../weixin'), // 小程序项目路径
    privateKey:config.privateKey, // 私钥路径
    version: config.version, // 小程序版本号
    description: config.description // 上传描述
};

// 初始化小程序项目配置
const project = new ci.Project(projectConfig);

// 上传小程序代码
async function upload() {
    try {
        const res = await ci.upload({
            project,
            version: config.version,
            desc: config.description,
        });
        console.log('上传成功:', res);
    } catch (error) {
        console.error('上传失败:', error);
    }finally {
        // ✅ 不管成功失败,最后都退出 Node 进程
        process.exit(0);
    }
}

upload();

三.PHP方法 执行JS文件实现上传


$publishScript = './publishMiniProgram.js'; // 发布小程序的脚本路径

 $data = [
            'privateKey' => base64_decode($result['privateKey']),
            'description'=>'自动化上传',
            'appid' => $result['appid'],
            'plat_id' => $result['plat_id'],
            'version' => $result['mini_version'],
        ];

        // 将数据传递给 Node.js 脚本
        $dataJson = json_encode($data);
        $dataJsonFile = $result['appid'].'.json'; // 保存为一个 JSON 文件
        if (file_put_contents($dataJsonFile, $dataJson) === false) {
            return error('保存数据到 JSON 文件失败');
        }

		// 执行发布小程序脚本
        $publishCommand = "node $publishScript $dataJsonFile";
        $publishOutput = shell_exec($publishCommand);

        if ($publishOutput === null) {
            return error('发布失败');
        }

四.读取配置文件并替换 新建modifySiteinfo.js

// modifySiteinfo.js

const fs = require('fs');
const path = require('path');

// 获取传递的 platid 参数
const platid = process.argv[2]; // 从命令行参数获取 platid

if (!platid) {
  console.log("Error: platid 参数缺失");
  process.exit(1); // 如果没有提供 platid 参数,退出脚本
}

// `siteinfo.js` 文件路径
const siteinfoPath = '../../weixin/siteinfo.js';  // 确保路径准确

// 读取 siteinfo.js 文件
fs.readFile(siteinfoPath, 'utf8', (err, data) => {
  if (err) {
    console.log("Error reading siteinfo.js:", err);
    process.exit(1);
  }

  // 替换 `platid` 的值  正则替换需要修改的内容
  const updatedData = data.replace(/(PLAT_ID\s*=\s*['"])([^'"]+)(['"])/, `$1${platid}$3`);

  // 写回修改后的内容
  fs.writeFile(siteinfoPath, updatedData, 'utf8', (err) => {
    if (err) {
      console.log("Error writing to siteinfo.js:", err);
      process.exit(1);
    }

    console.log("siteinfo.js 文件更新成功!");
  });
});

五.PHP方法执行替换配置JS文件


 		$nodeScript = './modifySiteinfo.js'; // Node.js 脚本路径
 
 		// 执行命令,传递 platid 参数
        $command = "node $nodeScript $platid";
        //  执行并获取输出
        $output = shell_exec($command);
        //  检查执行结果
        if ($output === null) {
            return error('修改失败');
        }
Logo

一站式 AI 云服务平台

更多推荐