@icebreakers/monorepo 3.1.5 → 3.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,7 +8,7 @@ export default defineMonorepoConfig({
8
8
  },
9
9
  clean: {
10
10
  autoConfirm: false,
11
- ignorePackages: ['@icebreakers/website'],
11
+ includePrivate: true,
12
12
  },
13
13
  sync: {
14
14
  concurrency: 4,
@@ -48,7 +48,7 @@
48
48
  "@icebreakers/monorepo": "workspace:*",
49
49
  "@icebreakers/stylelint-config": "^1.2.3",
50
50
  "@types/fs-extra": "^11.0.4",
51
- "@types/node": "^24.10.2",
51
+ "@types/node": "^24.10.3",
52
52
  "@types/semver": "^7.7.1",
53
53
  "@vitest/coverage-v8": "~4.0.15",
54
54
  "ci-info": "^4.3.1",
@@ -65,7 +65,7 @@
65
65
  "pkg-types": "^2.3.0",
66
66
  "rimraf": "^6.1.2",
67
67
  "stylelint": "^16.26.1",
68
- "tsdown": "0.17.2",
68
+ "tsdown": "0.17.3",
69
69
  "tslib": "^2.8.1",
70
70
  "tsup": "^8.5.1",
71
71
  "tsx": "^4.21.0",
package/dist/cli.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const require_upgrade = require('./upgrade-C9C_ciHG.cjs');
1
+ const require_upgrade = require('./upgrade-BnrzVPeg.cjs');
2
2
  let node_process = require("node:process");
3
3
  node_process = require_upgrade.__toESM(node_process);
4
4
  let __inquirer_input = require("@inquirer/input");
@@ -50,6 +50,7 @@ commander.program.command("ai").description("AI 助手工具集").command("creat
50
50
  const tasksFile = opts.tasks ?? aiConfig?.tasksFile;
51
51
  const name$1 = opts.name;
52
52
  if (Boolean(tasksFile && !opts.output && !opts.name)) {
53
+ if (!tasksFile) throw new Error("tasks file path is required when using tasks mode");
53
54
  await require_upgrade.generateAgenticTemplates(await require_upgrade.loadAgenticTasks(tasksFile, cwd), {
54
55
  cwd,
55
56
  baseDir,
package/dist/cli.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { A as defaultAgenticBaseDir, C as name, M as generateAgenticTemplates, N as loadAgenticTasks, O as resolveCommandConfig, P as logger, T as cleanProjects, c as getCreateChoices, i as init, j as generateAgenticTemplate, k as createTimestampFolderName, n as syncNpmMirror, o as createNewProject, r as setVscodeBinaryMirror, s as defaultTemplate, t as upgradeMonorepo, w as version } from "./upgrade-B6Ko1TFE.mjs";
1
+ import { A as defaultAgenticBaseDir, C as name, M as generateAgenticTemplates, N as loadAgenticTasks, O as resolveCommandConfig, P as logger, T as cleanProjects, c as getCreateChoices, i as init, j as generateAgenticTemplate, k as createTimestampFolderName, n as syncNpmMirror, o as createNewProject, r as setVscodeBinaryMirror, s as defaultTemplate, t as upgradeMonorepo, w as version } from "./upgrade-DmdJLHLb.mjs";
2
2
  import process from "node:process";
3
3
  import input from "@inquirer/input";
4
4
  import select from "@inquirer/select";
@@ -47,6 +47,7 @@ program.command("ai").description("AI 助手工具集").command("create").alias(
47
47
  const tasksFile = opts.tasks ?? aiConfig?.tasksFile;
48
48
  const name$1 = opts.name;
49
49
  if (Boolean(tasksFile && !opts.output && !opts.name)) {
50
+ if (!tasksFile) throw new Error("tasks file path is required when using tasks mode");
50
51
  await generateAgenticTemplates(await loadAgenticTasks(tasksFile, cwd), {
51
52
  cwd,
52
53
  baseDir,
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const require_upgrade = require('./upgrade-C9C_ciHG.cjs');
1
+ const require_upgrade = require('./upgrade-BnrzVPeg.cjs');
2
2
 
3
3
  exports.GitClient = require_upgrade.GitClient;
4
4
  exports.assetsDir = require_upgrade.assetsDir;
package/dist/index.d.cts CHANGED
@@ -252,7 +252,7 @@ interface CleanCommandConfig {
252
252
  ignorePackages?: string[];
253
253
  /**
254
254
  * 是否包含 private 包。
255
- * @default false
255
+ * @default true
256
256
  */
257
257
  includePrivate?: boolean;
258
258
  /**
package/dist/index.d.mts CHANGED
@@ -252,7 +252,7 @@ interface CleanCommandConfig {
252
252
  ignorePackages?: string[];
253
253
  /**
254
254
  * 是否包含 private 包。
255
- * @default false
255
+ * @default true
256
256
  */
257
257
  includePrivate?: boolean;
258
258
  /**
package/dist/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
- import { A as defaultAgenticBaseDir, C as name, D as loadMonorepoConfig, E as defineMonorepoConfig, F as getWorkspaceData, I as getWorkspacePackages, L as GitClient, M as generateAgenticTemplates, N as loadAgenticTasks, O as resolveCommandConfig, P as logger, S as templatesDir, T as cleanProjects, _ as toWorkspaceGitignorePath, a as createContext, b as packageDir, c as getCreateChoices, d as escapeStringRegexp, f as isMatch, g as toPublishGitignorePath, h as isGitignoreFile, i as init, j as generateAgenticTemplate, k as createTimestampFolderName, l as getTemplateMap, m as isFileChanged, n as syncNpmMirror, o as createNewProject, p as getFileHash, r as setVscodeBinaryMirror, t as upgradeMonorepo, u as templateMap, v as isIgnorableFsError, w as version, x as rootDir, y as assetsDir } from "./upgrade-B6Ko1TFE.mjs";
1
+ import { A as defaultAgenticBaseDir, C as name, D as loadMonorepoConfig, E as defineMonorepoConfig, F as getWorkspaceData, I as getWorkspacePackages, L as GitClient, M as generateAgenticTemplates, N as loadAgenticTasks, O as resolveCommandConfig, P as logger, S as templatesDir, T as cleanProjects, _ as toWorkspaceGitignorePath, a as createContext, b as packageDir, c as getCreateChoices, d as escapeStringRegexp, f as isMatch, g as toPublishGitignorePath, h as isGitignoreFile, i as init, j as generateAgenticTemplate, k as createTimestampFolderName, l as getTemplateMap, m as isFileChanged, n as syncNpmMirror, o as createNewProject, p as getFileHash, r as setVscodeBinaryMirror, t as upgradeMonorepo, u as templateMap, v as isIgnorableFsError, w as version, x as rootDir, y as assetsDir } from "./upgrade-DmdJLHLb.mjs";
2
2
 
3
3
  export { GitClient, assetsDir, cleanProjects, createContext, createNewProject, createTimestampFolderName, defaultAgenticBaseDir, defineMonorepoConfig, escapeStringRegexp, generateAgenticTemplate, generateAgenticTemplates, getCreateChoices, getFileHash, getTemplateMap, getWorkspaceData, getWorkspacePackages, init, isFileChanged, isGitignoreFile, isIgnorableFsError, isMatch, loadAgenticTasks, loadMonorepoConfig, logger, name, packageDir, resolveCommandConfig, rootDir, setVscodeBinaryMirror, syncNpmMirror, templateMap, templatesDir, toPublishGitignorePath, toWorkspaceGitignorePath, upgradeMonorepo, version };
@@ -572,10 +572,11 @@ async function resolveCommandConfig(name$1, cwd) {
572
572
  //#region src/commands/clean.ts
573
573
  var import_set_value$5 = /* @__PURE__ */ __toESM(require_set_value(), 1);
574
574
  function mergeCleanConfig(base, overrides) {
575
- if (!overrides) return base;
575
+ const normalizedBase = base ?? {};
576
+ if (!overrides) return normalizedBase;
576
577
  const definedOverrides = Object.fromEntries(Object.entries(overrides).filter(([, value]) => value !== void 0));
577
578
  return {
578
- ...base,
579
+ ...normalizedBase,
579
580
  ...definedOverrides
580
581
  };
581
582
  }
@@ -584,7 +585,7 @@ function mergeCleanConfig(base, overrides) {
584
585
  */
585
586
  async function cleanProjects(cwd, overrides) {
586
587
  const cleanConfig = mergeCleanConfig(await resolveCommandConfig("clean", cwd), overrides);
587
- const { packages, workspaceDir } = await getWorkspaceData(cwd, cleanConfig?.includePrivate ? { ignorePrivatePackage: false } : void 0);
588
+ const { packages, workspaceDir } = await getWorkspaceData(cwd, cleanConfig?.includePrivate ?? true ? { ignorePrivatePackage: false } : void 0);
588
589
  const filteredPackages = packages.filter((pkg) => {
589
590
  const name$2 = pkg.manifest.name ?? "";
590
591
  if (!name$2) return true;
@@ -604,7 +605,8 @@ async function cleanProjects(cwd, overrides) {
604
605
  };
605
606
  })
606
607
  });
607
- const candidates = Array.from(new Set(cleanDirs.filter(Boolean)));
608
+ const readmeZh = pathe.default.resolve(workspaceDir, "README.zh-CN.md");
609
+ const candidates = Array.from(new Set([...cleanDirs.filter(Boolean), readmeZh]));
608
610
  await Promise.all(candidates.map(async (dir) => {
609
611
  if (await fs_extra.default.pathExists(dir)) await fs_extra.default.remove(dir);
610
612
  }));
@@ -617,7 +619,7 @@ async function cleanProjects(cwd, overrides) {
617
619
  //#endregion
618
620
  //#region package.json
619
621
  var name = "@icebreakers/monorepo";
620
- var version = "3.1.5";
622
+ var version = "3.1.7";
621
623
 
622
624
  //#endregion
623
625
  //#region src/constants.ts
@@ -560,10 +560,11 @@ async function resolveCommandConfig(name$1, cwd) {
560
560
  //#region src/commands/clean.ts
561
561
  var import_set_value$5 = /* @__PURE__ */ __toESM(require_set_value(), 1);
562
562
  function mergeCleanConfig(base, overrides) {
563
- if (!overrides) return base;
563
+ const normalizedBase = base ?? {};
564
+ if (!overrides) return normalizedBase;
564
565
  const definedOverrides = Object.fromEntries(Object.entries(overrides).filter(([, value]) => value !== void 0));
565
566
  return {
566
- ...base,
567
+ ...normalizedBase,
567
568
  ...definedOverrides
568
569
  };
569
570
  }
@@ -572,7 +573,7 @@ function mergeCleanConfig(base, overrides) {
572
573
  */
573
574
  async function cleanProjects(cwd, overrides) {
574
575
  const cleanConfig = mergeCleanConfig(await resolveCommandConfig("clean", cwd), overrides);
575
- const { packages, workspaceDir } = await getWorkspaceData(cwd, cleanConfig?.includePrivate ? { ignorePrivatePackage: false } : void 0);
576
+ const { packages, workspaceDir } = await getWorkspaceData(cwd, cleanConfig?.includePrivate ?? true ? { ignorePrivatePackage: false } : void 0);
576
577
  const filteredPackages = packages.filter((pkg) => {
577
578
  const name$2 = pkg.manifest.name ?? "";
578
579
  if (!name$2) return true;
@@ -592,7 +593,8 @@ async function cleanProjects(cwd, overrides) {
592
593
  };
593
594
  })
594
595
  });
595
- const candidates = Array.from(new Set(cleanDirs.filter(Boolean)));
596
+ const readmeZh = path.resolve(workspaceDir, "README.zh-CN.md");
597
+ const candidates = Array.from(new Set([...cleanDirs.filter(Boolean), readmeZh]));
596
598
  await Promise.all(candidates.map(async (dir) => {
597
599
  if (await fs.pathExists(dir)) await fs.remove(dir);
598
600
  }));
@@ -605,7 +607,7 @@ async function cleanProjects(cwd, overrides) {
605
607
  //#endregion
606
608
  //#region package.json
607
609
  var name = "@icebreakers/monorepo";
608
- var version = "3.1.5";
610
+ var version = "3.1.7";
609
611
 
610
612
  //#endregion
611
613
  //#region src/constants.ts
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@icebreakers/monorepo",
3
3
  "type": "module",
4
- "version": "3.1.5",
4
+ "version": "3.1.7",
5
5
  "description": "The icebreaker's monorepo manager",
6
6
  "author": "ice breaker <1324318532@qq.com>",
7
7
  "license": "MIT",
@@ -69,7 +69,7 @@
69
69
  "@pnpm/workspace.read-manifest": "^1000.2.8",
70
70
  "c12": "^3.3.2",
71
71
  "commander": "^14.0.2",
72
- "comment-json": "^4.4.1",
72
+ "comment-json": "^4.5.0",
73
73
  "consola": "^3.4.2",
74
74
  "execa": "^9.6.1",
75
75
  "fs-extra": "^11.3.2",
@@ -26,26 +26,26 @@
26
26
  "tailwind-variants": "^3.2.2",
27
27
  "vue": "^3.5.25",
28
28
  "vue-i18n": "^11.2.2",
29
- "vue-router": "^4.6.3"
29
+ "vue-router": "^4.6.4"
30
30
  },
31
31
  "devDependencies": {
32
- "@cloudflare/vite-plugin": "^1.17.0",
32
+ "@cloudflare/vite-plugin": "^1.17.1",
33
33
  "@hono/node-server": "^1.19.7",
34
34
  "@hono/trpc-server": "^0.4.1",
35
- "@tailwindcss/vite": "^4.1.17",
35
+ "@tailwindcss/vite": "^4.1.18",
36
36
  "@trpc/server": "^11.7.2",
37
37
  "@vitejs/plugin-vue": "^6.0.2",
38
38
  "@vitejs/plugin-vue-jsx": "^5.1.2",
39
39
  "@vue/tsconfig": "^0.8.1",
40
40
  "hono": "^4.10.8",
41
- "tailwindcss": "^4.1.17",
41
+ "tailwindcss": "^4.1.18",
42
42
  "typescript": "~5.9.3",
43
43
  "unplugin-vue-router": "^0.19.0",
44
44
  "vite": "^7.2.7",
45
45
  "vite-plugin-vue-devtools": "^8.0.5",
46
46
  "vite-tsconfig-paths": "^5.1.4",
47
47
  "vue-tsc": "3.1.8",
48
- "wrangler": "^4.53.0",
48
+ "wrangler": "^4.54.0",
49
49
  "zod": "^4.1.13"
50
50
  }
51
51
  }
@@ -53,7 +53,7 @@
53
53
  "devDependencies": {
54
54
  "@hono/node-server": "^1.19.7",
55
55
  "hono": "^4.10.8",
56
- "wrangler": "^4.53.0",
56
+ "wrangler": "^4.54.0",
57
57
  "zod": "^4.1.13"
58
58
  }
59
59
  }
@@ -18,7 +18,7 @@ layout: doc
18
18
 
19
19
  1. **拉取模板**:[GitHub](https://github.com/sonofmagic/monorepo-template) 右上角 `Use this template`,或克隆源码。
20
20
  2. **安装依赖**:在 `pnpm-workspace.yaml` 所在目录执行 `pnpm install`(需要 Node.js ≥ 20,推荐 `npm i -g pnpm`)。
21
- 3. **可选清理**:运行 `pnpm script:clean` 移除演示包,仅保留最小打包模板;随后再次执行 `pnpm install` 更新 lockfile。
21
+ 3. **可选清理**:直接运行 `npx -y @icebreakers/monorepo@latest clean` 远程执行清理,移除演示包后再执行 `pnpm install`(避免依赖本地构建 `monorepo`);如已安装依赖,也可使用 `pnpm script:clean`。
22
22
  4. **初始化元数据**:`pnpm script:init` 会批量更新 `package.json`、`README.md` 等公共信息。
23
23
 
24
24
  ## 仓库结构速览
@@ -49,7 +49,7 @@ layout: doc
49
49
 
50
50
  ```bash
51
51
  npx monorepo new # 创建子包/应用
52
- npx monorepo clean # 批量删除已勾选的子项目
52
+ npx -y @icebreakers/monorepo@latest clean # 远程清理已勾选的子项目,避免依赖本地构建
53
53
  npx monorepo sync # 同步所有包到 npmmirror
54
54
  npx monorepo mirror # 写入 VS Code 镜像配置
55
55
  npx monorepo up # 从最新模板同步配置文件
@@ -98,8 +98,11 @@ jobs:
98
98
  - uses: pnpm/action-setup@v4
99
99
  - uses: actions/setup-node@v4
100
100
  with:
101
- node-version: 22
101
+ # 这是为了使用新版本的 npm, 只有 npm@11.5.x 以上版本才支持 OIDC
102
+ # 否则你就必须使用 npm i -g npm@latest 来升级 npm 版本
103
+ node-version: 24
102
104
  cache: pnpm
105
+ registry-url: https://registry.npmjs.org
103
106
  - run: pnpm install
104
107
  - name: Create Release Pull Request or Publish to npm
105
108
  uses: changesets/action@v1
@@ -107,11 +110,13 @@ jobs:
107
110
  publish: pnpm publish-packages
108
111
  env:
109
112
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
110
- NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
113
+ # npm/action-oidc-auth 会设置 NODE_AUTH_TOKEN 供 publish 使用
111
114
  ```
112
115
 
113
116
  `pnpm publish-packages` 为模板内脚本,可替换为自定义构建+发布流程。
114
117
 
118
+ > 说明:npm 现行 token 默认 90 天过期,推荐在 CI 中使用 OIDC(如上)动态获取 `NODE_AUTH_TOKEN`,无需手动传入 `NPM_TOKEN`。若使用自托管或其他 CI,需要确保工作流具备 `id-token: write` 权限。
119
+
115
120
  ## 与其他方案对比
116
121
 
117
122
  | 能力 / 工具 | changesets | lerna 经典模式 | 手写脚本 |
@@ -26,13 +26,13 @@
26
26
  },
27
27
  "devDependencies": {
28
28
  "@braintree/sanitize-url": "^7.1.1",
29
- "@tailwindcss/vite": "^4.1.17",
29
+ "@tailwindcss/vite": "^4.1.18",
30
30
  "cytoscape": "^3.33.1",
31
31
  "cytoscape-cose-bilkent": "^4.1.0",
32
32
  "dayjs": "^1.11.19",
33
33
  "debug": "^4.4.3",
34
34
  "mermaid": "^11.12.2",
35
- "tailwindcss": "^4.1.17",
35
+ "tailwindcss": "^4.1.18",
36
36
  "vitepress": "^1.6.4",
37
37
  "vitepress-plugin-mermaid": "^2.0.17"
38
38
  }
@@ -68,7 +68,7 @@ registry.npmjs.org/:_authToken=npm_hashhashhashhashhashhashhashhashhash
68
68
 
69
69
  假如这一行存在,说明你本地的 `npm Access Token` 就设置好了,然后你才有发包的权限。
70
70
 
71
- > 你也可以在 `https://www.npmjs.com/settings/<你的用户名>/tokens` 中管理你的 `token`,给不同的 `token` 设置不同的作用域,有效期和 `ip` 限制,帮助你适配正常开发,`CI/CD`,`Token` 分发的各种场景
71
+ > 你也可以在 `https://www.npmjs.com/settings/<你的用户名>/tokens` 中管理你的 `token`,给不同的 `token` 设置不同的作用域,有效期(目前最长 90 天)和 `ip` 限制,帮助你适配正常开发,`CI/CD`,`Token` 分发的各种场景;如需避免手动轮换,CI 场景推荐使用 npm 官方的 OIDC 方案获取临时 `NODE_AUTH_TOKEN`,并在工作流开启 `id-token: write` 权限。
72
72
 
73
73
  同样发私有源包也是同理:
74
74
 
@@ -45,17 +45,17 @@
45
45
  "types": "./dist/index.d.ts"
46
46
  },
47
47
  "devDependencies": {
48
- "@tailwindcss/vite": "^4.1.17",
48
+ "@tailwindcss/vite": "^4.1.18",
49
49
  "@vitejs/plugin-vue": "^6.0.2",
50
50
  "@vue/test-utils": "^2.4.6",
51
51
  "@vue/tsconfig": "^0.8.1",
52
52
  "jsdom": "^27.3.0",
53
- "tailwindcss": "^4.1.17",
53
+ "tailwindcss": "^4.1.18",
54
54
  "unplugin-vue-router": "^0.19.0",
55
55
  "vite": "^7.2.7",
56
56
  "vite-plugin-dts": "^4.5.4",
57
57
  "vue": "^3.5.25",
58
- "vue-router": "^4.6.3",
58
+ "vue-router": "^4.6.4",
59
59
  "vue-tsc": "^3.1.8"
60
60
  }
61
61
  }