请选择 进入手机版 | 继续访问电脑版
MSIPO技术圈 首页 IT技术 查看内容

使用 Google 的 zx 库编写切换微信小程序环境的脚本

2023-07-13

背景

微信小程序目前为止还没有提供API或者具体的配置方式,给我们设置环境变量,所以还得自己想办法。

创建一个 shell 脚本——一个由诸如 Bash 或 zsh 之类的 shell 执行的脚本——可以是自动化重复任务的好方法。Node.js 似乎是编写 shell 脚本的理想选择,因为它为我们提供了许多核心模块,并允许我们导入我们选择的任何库。它还使我们能够访问 JavaScript 提供的语言特性和内置函数。
但是,如果您尝试编写一个在 Node.js 下运行的 shell 脚本,您可能会发现它并不像您希望的那样流畅。您需要为子进程编写特殊处理,注意转义命令行参数,然后最终弄乱stdout(标准输出)和stderr(标准错误)。它不是特别直观,并且会使用 shell 脚本非常尴尬。
Bash shell 脚本语言是编写 shell 脚本的流行选择。无需编写代码来处理子进程,并且它具有用于处理stdout和stderr. 但是用 Bash 编写 shell 脚本也不是那么容易。语法可能很混乱,难以实现逻辑,或处理诸如提示用户输入之类的事情。
Google 的 zx库有助于使用 Node.js 高效且愉快地编写 shell 脚本。

编码实战

envConfig文件夹内容如下:

在这里插入图片描述

mjs文件内容如下:

async function promptForModuleSystem(moduleSystems) {
  const moduleSystem = await question(
    `需要切换到什么环境? (${moduleSystems.join(" or ")}) `,
    {
      choices: moduleSystems,
    }
  );
  return moduleSystem;
}

async function setConfigByEnv() {
  const moduleSystems = ["test", "pro"];
  const selectedModuleSystem = await promptForModuleSystem(moduleSystems);

  const isValidModuleSystem = moduleSystems.includes(selectedModuleSystem);
  if (!isValidModuleSystem) {
    console.error(
      chalk.red(`Error: 环境变量必须为 '${moduleSystems.join("' or '")}'\n`)
    );

    return await setConfigByEnv();
  }

  return copyFile(selectedModuleSystem);
}

setConfigByEnv();


async function copyFile(env) {
  await fs.copy(
    `./envConfig/project.${env}.json`,
    `./project.config.json`,
    (err) => {
      if (err) return console.error(err);
      console.log(chalk.green(`操作成功,当前环境已切换为${env}`));
    }
  );
 
}


参考资料

相关阅读

手机版|MSIPO技术圈 皖ICP备19022944号-2

Copyright © 2023, msipo.com

返回顶部