vue多项目批量执行启动、打包等命令

  1. 新建一个文件夹保存所有项目:item

  2. 文件夹中创建多个vue项目:[test1, test2, test3, test4]

  3. 在item文件夹根目录创建文件夹:npm-config

    • 初始化项目:npm init

    • 配置package.json

      {
        "name": "npm-config",
        "version": "0.1.0",
        "private": true,
        "scripts": {
          "init": "node config/install.js npm",
          "cinit": "node config/install.js cnpm",
          "yinit": "node config/install.js yarn",
          "serve": "node config/start.js",
          "dev": "node config/start.js",
          "build": "node config/build.js",
          "lint": "vue-cli-service lint"
        }
      }
      
      
    • 创建config文件夹

      • 创建build.js:打包项目

        const runUnit = require("./run-util");
        console.log(process.argv);
        let apps = process.argv.slice(2); //需要运行的文件目录
        console.log("开始打包...");
        runUnit.run("npm run build", { apps, CK: "C" });
        runUnit.processOn();
        
        
      • 创建install.js:拉取依赖

        const runUnit = require("./run-util");
        console.log(process.argv);
        console.log("开始拉取依赖包...");
        let apps = process.argv.slice(3); //需要运行的文件目录
        runUnit.run(`${process.argv[2]} install`, { apps, CK: "C" });
        runUnit.processOn();
        
        
      • 创建run-util.js:读取文件夹并运行服务

        const fs = require("fs");
        const path = require("path");
        const sub_app_ath = path.resolve(__dirname, "../../");
        const defaultAllApps = [test1, test2, test3, test4]; //项目文件夹目录
        const dirs = fs.readdirSync(sub_app_ath); //所有目录
        const child_process = require("child_process");
        const commandObj = {
          serve: "启动",
          dev: "启动",
          build: "打包",
          install: "下载依赖",
        };
        function run(command, config = {}) {
          let { CK = "K", apps = [] } = config;
          let myApps = apps instanceof Array && apps.length ? apps : defaultAllApps;
          let runApps = dirs.filter((i) => myApps.includes(i));
          for (let i in commandObj) {
            if (new RegExp(i).test(command)) {
              console.log(`${commandObj[i]}项目:${myApps.join(" ")}`);
              break;
            }
          }
          runApps.forEach(async (i) => {
            child_process.exec(`start cmd.exe /${CK} "cd ../${i} && ${command}"`);
          });
        }
        function processOn() {
          process.on("unhandledRejection", (reason, p) => {
            console.log("Unhandled Rejection at: Promise", p, "reason:", reason);
          });
        }
        
        module.exports = {
          run,
          processOn,
        };
        
      • 创建start.js:运行服务

        const runUnit = require("./run-util");
        console.log(process.argv);
        let apps = process.argv.slice(2); //需要运行的文件目录
        console.log(apps);
        runUnit.run("npm run dev", { apps });
        runUnit.processOn();
        
    • 打开终端

      • npm run dev:为run-util.js中配置的所有项目执行启动命令
      • npm run build:为run-util.js中配置的所有项目执行打包命令
      • npm install:为run-util.js中配置的所有项目执行拉取依赖命令

vue多项目批量执行启动、打包等命令
http://localhost:8090//archives/vue-duo-xiang-mu-pi-liang-zhi-xing-qi-dong--da-bao-deng-ming-ling
作者
龟龟
发布于
2023年03月16日
更新于
2024年08月28日
许可协议