uniapp多入口/多项目的配置方法

/run.project.js

// run.project.js
const fs = require("fs");
const path = require("path");
const { execSync } = require("child_process");

// 1. 从命令行读取:mode = "dev" 或 "build",project 默认为 "zanGon"
const mode = process.argv[2]; // e.g. "dev" 或 "build"
const project = process.argv[3] || "zanGon"; // e.g. "jinKai",不传则用 "zanGon"

// 如果 mode 不是 dev/build,就报错并退出
if (!["dev", "build"].includes(mode)) {
  console.error(
    "❌ 请以 `node run.project.js dev` 或 `node run.project.js build` 方式运行;\n" +
      "   如果要指定 jinKai,请写成 `node run.project.js dev jinKai` 或 `node run.project.js build jinKai`"
  );
  process.exit(1);
}

console.log(
  `\n🚀 开始${
    mode === "dev" ? "启动开发服务器" : "构建"
  },项目:${project},平台:H5\n`
);

// 2. 先用 pages.<project>.json 覆盖 src/pages.json
//    优先在 src/ 文件夹下找 pages.<project>.json
const pagesSrc = path.resolve(__dirname, "src", `pages.${project}.json`);
const pagesDest = path.resolve(__dirname, "src", "pages.json");

if (fs.existsSync(pagesSrc)) {
  // 确保 src/ 目录存在
  const destDir = path.dirname(pagesDest);
  if (!fs.existsSync(destDir)) {
    fs.mkdirSync(destDir, { recursive: true });
  }
  fs.copyFileSync(pagesSrc, pagesDest);
  console.log(`✅ 已替换 src/pages.json:${pagesSrc} → ${pagesDest}`);
} else {
  console.warn(`⚠️ 找不到 src/pages.${project}.json,跳过覆盖 src/pages.json`);
}

// 3. 再用 global.<project>.js 覆盖 src/common/config/global.js
const globalSrc = path.resolve(
  __dirname,
  "src",
  "common",
  "config",
  `global.${project}.js`
);
const globalDest = path.resolve(
  __dirname,
  "src",
  "common",
  "config",
  "global.js"
);

if (fs.existsSync(globalSrc)) {
  const destDir = path.dirname(globalDest);
  if (!fs.existsSync(destDir)) {
    fs.mkdirSync(destDir, { recursive: true });
  }
  fs.copyFileSync(globalSrc, globalDest);
  console.log(
    `✅ 已替换 src/common/config/global.js:${globalSrc} → ${globalDest}`
  );
} else {
  console.warn(
    `⚠️ 找不到 src/common/config/global.${project}.js,跳过覆盖 src/common/config/global.js`
  );
}

// 4. 最后,根据 mode 和 project 调用对应的 H5 脚本:npm run <mode>:h5:<project>
const command = `npm run ${mode}:h5:${project}`;
console.log(`🚧 即将执行命令:${command}\n`);

try {
  execSync(command, { stdio: "inherit" });
} catch (error) {
  console.error("❌ H5 构建/运行失败:", error);
  process.exit(1);
}


/package.json

"scripts": {
  "dev": "node run.project.js dev",
  "build": "node run.project.js build",
  "dev:jinKai": "node run.project.js dev jinKai",
  "build:jinKai": "node run.project.js build jinKai",
  "dev:h5:zanGon": "cross-env NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service serve --mode zanGon",
  "build:h5:zanGon": "cross-env NODE_ENV=production  UNI_PLATFORM=h5 vue-cli-service uni-build --mode zanGon",
  "dev:h5:jinKai": "cross-env NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service serve --mode jinKai",
  "build:h5:jinKai": "cross-env NODE_ENV=production  UNI_PLATFORM=h5 vue-cli-service uni-build --mode jinKai"
}

// 目录结构

├── src/
│   ├── common/
│   │   └── config/
│   │       ├── global.zanGon.js
│   │       ├── global.jinKai.js
│   │       ├── global.js  ← 构建时覆盖
│   ├── pages/apply
│   ├── pages/apply_jinKai
│   ├── pages.zanGon.json
│   ├── pages.jinKai.json
│   ├── pages.json ← 构建时覆盖
├── run.project.js
├── package.json

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容