create-yarn-workspaces 3.0.24 → 3.0.26
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.
- package/CHANGELOG.md +33 -0
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/lib/package.demo.json +2 -2
- package/package.json +9 -9
- package/yargs-setting.d.ts +2 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,39 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [3.0.26](https://github.com/bluelovers/ws-yarn-workspaces/compare/create-yarn-workspaces@3.0.25...create-yarn-workspaces@3.0.26) (2026-10-14)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package create-yarn-workspaces
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [3.0.25](https://github.com/bluelovers/ws-yarn-workspaces/compare/create-yarn-workspaces@3.0.24...create-yarn-workspaces@3.0.25) (2026-10-14)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### BREAKING CHANGES
|
|
18
|
+
|
|
19
|
+
* 遷移 tsdx 靜態檔案配置並重新命名靜態檔案檢查函式
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### 📦 Code Refactoring
|
|
24
|
+
|
|
25
|
+
* 遷移 tsdx 靜態檔案配置並重新命名靜態檔案檢查函式 ([f6aeade](https://github.com/bluelovers/ws-yarn-workspaces/commit/f6aeade629fae32306790eed2267a769ae665c84))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### 🛠 Build System
|
|
29
|
+
|
|
30
|
+
* update build ([f69d928](https://github.com/bluelovers/ws-yarn-workspaces/commit/f69d928cc6eaf0f7eaf385f47e3d7d1a07474a33))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### 🔖 Miscellaneous
|
|
34
|
+
|
|
35
|
+
* . ([cb55425](https://github.com/bluelovers/ws-yarn-workspaces/commit/cb554252b1b16f1a7a49483e405ccce7f2d0e368))
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
6
39
|
## [3.0.24](https://github.com/bluelovers/ws-yarn-workspaces/compare/create-yarn-workspaces@3.0.23...create-yarn-workspaces@3.0.24) (2026-10-12)
|
|
7
40
|
|
|
8
41
|
|
package/index.js
CHANGED
|
@@ -282,7 +282,7 @@ function _createYarnWorkspaces(targetPath, options = {}) {
|
|
|
282
282
|
* 此呼叫點 addStaticFiles 預設為 true,可用 noStaticFiles 關閉
|
|
283
283
|
* addStaticFiles defaults to true at this call site; disable it with noStaticFiles
|
|
284
284
|
*/
|
|
285
|
-
if ((0, staticFiles_1.
|
|
285
|
+
if ((0, staticFiles_1._isAddStaticFilesOrReset)(options, true)) {
|
|
286
286
|
(0, static_file_1.copyStaticFiles)({
|
|
287
287
|
cwd: targetPath,
|
|
288
288
|
file_map,
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * 創建 Yarn Workspaces 工具模組\n * Yarn Workspaces Creation Tool Module\n *\n * 提供初始化 Yarn Workspaces 專案結構的功能,包含 package.json 設定、\n * Lerna 整合、目錄創建與靜態檔案複製等功能。\n * Provides functionality to initialize Yarn Workspaces project structure,\n * including package.json configuration, Lerna integration, directory creation,\n * and static file copying.\n *\n * @author user\n * @since 2018/5/13/013\n */\n\nimport findYarnWorkspaceRoot from 'find-yarn-workspace-root2/core';\nimport { resolve, join, basename } from 'upath2';\nimport pkgDir from 'pkg-dir';\nimport { consoleLogger as console } from 'debug-color2/logger';\nimport { copyStaticFiles } from '@yarn-tool/static-file';\nimport { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs-extra';\nimport { sortPackageJson } from 'sort-package-json3';\nimport { getDefaultPackageJson } from './lib';\nimport { isSamePath } from './lib/util';\nimport { ILernaJson } from '@ts-type/package-dts/lerna-json';\nimport { IPackageJson } from '@ts-type/package-dts/package-json';\nimport { getWsCopyStaticFiles } from '@yarn-tool/static-file/lib/ws/wsCopyStaticFiles';\nimport { findRootLazy } from '@yarn-tool/find-root';\nimport { normalize as pathNormalize } from 'upath2';\nimport { _isAddStaticFilesWithReset } from '@yarn-tool/fix-all/lib/file/staticFiles';\nimport { INpmAutoFixAll } from '@yarn-tool/fix-all';\n\nexport * from './lib/index';\nexport * from './lib/util';\n\n/**\n * 創建 Workspaces 的選項介面\n * Interface for creating workspaces options\n */\nexport interface IOptions extends Pick<INpmAutoFixAll, 'addStaticFiles' | 'noStaticFiles'>\n{\n\t/**\n\t * 工作目錄路徑 / Working directory path\n\t */\n\tcwd?: string,\n\n\t/**\n\t * 忽略父層 Workspaces / Ignore parent workspaces\n\t */\n\tignoreParentWorkspaces?: boolean,\n\n\t/**\n\t * 忽略已存在的 Package / Ignore existing package\n\t */\n\tignoreExistsPackage?: boolean,\n\n\t/**\n\t * 初始化 Package.json 的回呼函式\n\t * Callback function to initialize package.json\n\t * @template T - 擴展屬性類型 / Extended property type\n\t * @param current - 當前的 package.json / Current package.json\n\t * @returns 修改後的 package.json / Modified package.json\n\t */\n\tinitPackageJson?<T extends Record<string, any> = {}>(current: IPackageJson): IPackageJson & T,\n\n\t/**\n\t * 啟用除錯模式 / Enable debug mode\n\t */\n\tdebug?: boolean,\n}\n\n/**\n * 創建 Yarn Workspaces 主函式\n * Main function to create Yarn Workspaces\n *\n * 檢查並創建 Workspaces 專案結構,處理已存在 Package 與父層 Workspaces 的情況\n * Checks and creates workspace project structure, handling existing packages\n * and parent workspaces\n *\n * @param cwd - 工作目錄路徑 / Working directory path\n * @param options - 配置選項 / Configuration options\n * @returns 是否成功創建 / Whether creation was successful\n */\nexport function createYarnWorkspaces(cwd?: string, options: IOptions = {})\n{\n\t// 處理第一個參數可能是選項物件的情況\n\t// Handle case where first argument might be options object\n\tif (cwd && typeof cwd != 'string')\n\t{\n\t\toptions = cwd;\n\t\tcwd = options.cwd;\n\t}\n\n\t// 預設使用當前工作目錄 / Default to current working directory\n\tcwd ??= process.cwd();\n\n\t// 尋找專案根目錄資訊 / Find project root information\n\tconst rootData = findRootLazy({\n\t\tcwd,\n\t});\n\n\t// 標準化路徑 / Normalize path\n\tcwd = pathNormalize(rootData?.cwd ?? cwd);\n\n\t// 取得 Package 根目錄與 Workspaces 路徑\n\t// Get package root directory and workspace path\n\tlet root: string = rootData?.pkg;\n\tlet ws: string = rootData?.ws;\n\n\t// 實際要初始化的目標路徑:優先採用既有 package 根目錄,否則退回 cwd。\n\t// The actual init target: prefer an existing package root, otherwise fall back to `cwd`.\n\tlet targetPath = resolve(root || cwd);\n\n\t// 除錯輸出 / Debug output\n\toptions.debug && console.debug({\n\t\ttargetPath,\n\t\tws,\n\t\toptions,\n\t});\n\n\t/**\n\t * 檢查是否已存在 Package\n\t * Check if package already exists\n\t */\n\tif (!options.ignoreExistsPackage && root)\n\t{\n\t\tconsole.error(`already have package at \"${root}\", or use ignoreExistsPackage for overwrite it`);\n\n\t\treturn false;\n\t}\n\telse if (root)\n\t{\n\t\t// 忽略已存在的 Package / Ignore existing package\n\t\tconsole.warn(`ignore exists package \"${root}\"`);\n\t}\n\n\t/**\n\t * 檢查是否已存在 Workspaces\n\t * Check if workspace already exists\n\t */\n\tif (ws)\n\t{\n\t\t// 檢查目標路徑是否與現有 Workspace 相同\n\t\t// Check if target path is same as existing workspace\n\t\tlet bool: boolean = !isSamePath(targetPath, ws);\n\n\t\tconsole.warn(`detect exists workspace \"${ws}\"`);\n\n\t\tif (bool)\n\t\t{\n\t\t\t// 根據選項決定是否忽略父層 Workspaces\n\t\t\t// Decide whether to ignore parent workspaces based on options\n\t\t\tif (options.ignoreParentWorkspaces)\n\t\t\t{\n\t\t\t\tconsole.warn(`ignoreParentWorkspaces = true`);\n\t\t\t\tbool = false;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconsole.error(`target path already is workspace`);\n\t\t\t}\n\t\t}\n\n\t\tif (bool)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn _createYarnWorkspaces(targetPath, options);\n}\n\n/**\n * 內部創建 Workspaces 實作函式\n * Internal implementation function for creating workspaces\n *\n * 執行實際的 Workspaces 初始化工作,包含:\n * - 讀取並更新 Lerna 配置\n * - 創建或更新 package.json\n * - 複製靜態範本檔案\n * - 創建 packages 目錄\n *\n * Performs actual workspace initialization including:\n * - Reading and updating Lerna configuration\n * - Creating or updating package.json\n * - Copying static template files\n * - Creating packages directory\n *\n * @param targetPath - 目標路徑 / Target path\n * @param options - 配置選項 / Configuration options\n * @returns 是否成功 / Whether successful\n */\nexport function _createYarnWorkspaces(targetPath: string, options: IOptions = {})\n{\n\tconsole.info(`create in target path \"${targetPath}\"`);\n\n\tlet pkg: IPackageJson;\n\n\tlet lerna: ILernaJson;\n\n\t/**\n\t * 嘗試讀取現有的 lerna.json 配置\n\t * Try to read existing lerna.json configuration\n\t */\n\t{\n\t\tlet file = join(targetPath, 'lerna.json');\n\n\t\tif (existsSync(file))\n\t\t{\n\t\t\tlet json: ILernaJson = JSON.parse(readFileSync(file).toString());\n\n\t\t\t/**\n\t\t\t * 清理空的 packages 陣列\n\t\t\t * Clean up empty packages array\n\t\t\t */\n\t\t\tif (json.packages && !Object.keys(json.packages).length)\n\t\t\t{\n\t\t\t\tjson.packages = undefined;\n\t\t\t}\n\n\t\t\tlerna = json;\n\t\t}\n\t}\n\n\t/**\n\t * 預設 packages 目錄模式\n\t * Default packages directory pattern\n\t */\n\tlet packages = lerna && lerna.packages || [\n\t\t\"packages/*\",\n\t];\n\n\tlet file = join(targetPath, 'package.json');\n\n\t/**\n\t * 處理 package.json 不存在的情況\n\t * Handle case when package.json does not exist\n\t */\n\tif (!existsSync(file))\n\t{\n\t\t// 使用目錄名作為預設 Package 名稱\n\t\t// Use directory name as default package name\n\t\tlet name = basename(targetPath);\n\n\t\t// 創建目標目錄(如果不存在)\n\t\t// Create target directory if it doesn't exist\n\t\tif (!existsSync(targetPath))\n\t\t{\n\t\t\tmkdirSync(targetPath);\n\t\t}\n\n\t\t// 合併預設配置與基本資訊\n\t\t// Merge default configuration with basic info\n\t\tpkg = Object.assign(getDefaultPackageJson(name), {\n\t\t\tname,\n\t\t\tworkspaces: packages,\n\t\t});\n\n\t\t/**\n\t\t * 執行自定義初始化回呼\n\t\t * Execute custom initialization callback\n\t\t */\n\t\tif (options.initPackageJson)\n\t\t{\n\t\t\tlet ret = options.initPackageJson(pkg);\n\n\t\t\tif (ret)\n\t\t\t{\n\t\t\t\tpkg = ret;\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t{\n\t\t/**\n\t\t * 處理已存在的 package.json\n\t\t * Handle existing package.json\n\t\t */\n\t\tlet json: IPackageJson = JSON.parse(readFileSync(file).toString());\n\n\t\tlet workspaces: ILernaJson['packages'];\n\n\t\t/**\n\t\t * 解析現有的 workspaces 配置\n\t\t * Parse existing workspaces configuration\n\t\t */\n\t\tif (json.workspaces && Object.keys(json.workspaces).length)\n\t\t{\n\t\t\tworkspaces = json.workspaces;\n\n\t\t\t/**\n\t\t\t * 支援 nohoist 配置格式\n\t\t\t * Support nohoist configuration format\n\t\t\t * @see https://yarnpkg.com/blog/2018/02/15/nohoist/\n\t\t\t */\n\t\t\t// @ts-ignore\n\t\t\tpackages = workspaces.packages || workspaces;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tworkspaces = packages;\n\t\t}\n\n\t\t/**\n\t\t * 更新 Package.json 內容\n\t\t * Update package.json content\n\t\t */\n\t\tpkg = Object.assign(json, {\n\t\t\t\"private\": true,\n\t\t\t\"workspaces\": workspaces,\n\t\t});\n\n\t\t/**\n\t\t * 合併預設腳本與欄位\n\t\t * Merge default scripts and fields\n\t\t */\n\t\tObject.entries(getDefaultPackageJson(json.name))\n\t\t\t.forEach(([field, value]) => {\n\n\t\t\t\t/**\n\t\t\t\t * 特殊處理 scripts 欄位:合併而非覆蓋\n\t\t\t\t * Special handling for scripts field: merge instead of overwrite\n\t\t\t\t */\n\t\t\t\tif (field === 'scripts')\n\t\t\t\t{\n\t\t\t\t\tpkg.scripts ??= {};\n\t\t\t\t\tpkg.scripts = {\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t...value,\n\t\t\t\t\t\t...pkg.scripts,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// 使用空值合併運算子設置預設值\n\t\t\t\t\t// Use nullish coalescing operator for default values\n\t\t\t\t\tpkg[field] ??= value\n\t\t\t\t}\n\n\t\t\t})\n\t\t;\n\n\t}\n\n\t/**\n\t * 寫入格式化後的 package.json\n\t * Write formatted package.json\n\t */\n\tlet s = JSON.stringify(sortPackageJson(pkg), null, 2);\n\twriteFileSync(file, s);\n\n\tconsole.success(`create workspace package.json`);\n\n\t/**\n\t * 更新 Lerna 配置(如果存在且需要更新)\n\t * Update Lerna configuration if exists and needs updating\n\t */\n\tif (lerna && (packages != lerna.packages || lerna.npmClient !== 'yarn' || lerna['useWorkspaces'] !== true))\n\t{\n\t\tlet file = join(targetPath, 'lerna.json');\n\n\t\t// 更新為 Yarn Workspaces 模式\n\t\t// Update to Yarn Workspaces mode\n\t\tlerna.packages = packages;\n\t\tlerna.npmClient ??= 'pnpm';\n\t\t// lerna['useWorkspaces'] = true;\n\n\t\tlet s = JSON.stringify(sortPackageJson(lerna), null, 2);\n\t\twriteFileSync(file, s);\n\n\t\tconsole.info(`update lerna.json`);\n\t}\n\n\t/**\n\t * 複製靜態範本檔案\n\t * Copy static template files\n\t */\n\tconst file_map = getWsCopyStaticFiles();\n\n\t/**\n\t * 複製靜態範本檔案\n\t * Copy static template files\n\t *\n\t * 此呼叫點 addStaticFiles 預設為 true,可用 noStaticFiles 關閉\n\t * addStaticFiles defaults to true at this call site; disable it with noStaticFiles\n\t */\n\tif (_isAddStaticFilesWithReset(options, true))\n\t{\n\t\tcopyStaticFiles({\n\t\t\tcwd: targetPath,\n\t\t\tfile_map,\n\t\t});\n\t}\n\n\t/**\n\t * 根據 packages 模式創建目錄\n\t * Create directories based on packages pattern\n\t */\n\tcreateDirByPackages(targetPath, packages);\n\n\treturn true;\n}\n\n/**\n * 根據 packages 模式創建目錄\n * Create directories based on packages pattern\n *\n * 解析 packages 陣列中的目錄模式(如 \"packages/*\"),\n * 並創建對應的實體目錄。\n * Parses directory patterns from packages array (e.g., \"packages/*\")\n * and creates corresponding physical directories.\n *\n * @param cwd - 當前工作目錄 / Current working directory\n * @param packages - packages 模式陣列 / Array of package patterns\n * @returns 是否有創建任何目錄 / Whether any directories were created\n */\nexport function createDirByPackages(cwd: string, packages: string[])\n{\n\treturn packages.some(function (value)\n\t{\n\t\tlet bool: boolean;\n\n\t\t// 提取路徑的第一個部分(目錄名稱)\n\t\t// Extract first part of path (directory name)\n\t\tlet s = value.split(/[\\/\\\\]/)[0];\n\n\t\t/**\n\t\t * 只處理不包含 glob 模式的純目錄路徑\n\t\t * Only handle pure directory paths without glob patterns\n\t\t */\n\t\tif (!/[!?\\*{}\\[\\]]/.test(s))\n\t\t{\n\t\t\tlet dir = join(cwd, s);\n\n\t\t\t// 目錄不存在時創建 / Create directory if it doesn't exist\n\t\t\tif (!existsSync(dir))\n\t\t\t{\n\t\t\t\tmkdirSync(dir);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn bool;\n\t})\n}\n\n/**\n * 預設導出創建函式\n * Default export of creation function\n */\nexport default createYarnWorkspaces;\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * 創建 Yarn Workspaces 工具模組\n * Yarn Workspaces Creation Tool Module\n *\n * 提供初始化 Yarn Workspaces 專案結構的功能,包含 package.json 設定、\n * Lerna 整合、目錄創建與靜態檔案複製等功能。\n * Provides functionality to initialize Yarn Workspaces project structure,\n * including package.json configuration, Lerna integration, directory creation,\n * and static file copying.\n *\n * @author user\n * @since 2018/5/13/013\n */\n\nimport findYarnWorkspaceRoot from 'find-yarn-workspace-root2/core';\nimport { resolve, join, basename } from 'upath2';\nimport pkgDir from 'pkg-dir';\nimport { consoleLogger as console } from 'debug-color2/logger';\nimport { copyStaticFiles } from '@yarn-tool/static-file';\nimport { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs-extra';\nimport { sortPackageJson } from 'sort-package-json3';\nimport { getDefaultPackageJson } from './lib';\nimport { isSamePath } from './lib/util';\nimport { ILernaJson } from '@ts-type/package-dts/lerna-json';\nimport { IPackageJson } from '@ts-type/package-dts/package-json';\nimport { getWsCopyStaticFiles } from '@yarn-tool/static-file/lib/ws/wsCopyStaticFiles';\nimport { findRootLazy } from '@yarn-tool/find-root';\nimport { normalize as pathNormalize } from 'upath2';\nimport { _isAddStaticFilesOrReset } from '@yarn-tool/fix-all/lib/file/staticFiles';\nimport { INpmAutoFixAll } from '@yarn-tool/fix-all';\n\nexport * from './lib/index';\nexport * from './lib/util';\n\n/**\n * 創建 Workspaces 的選項介面\n * Interface for creating workspaces options\n */\nexport interface IOptions extends Pick<INpmAutoFixAll, 'addStaticFiles' | 'noStaticFiles'>\n{\n\t/**\n\t * 工作目錄路徑 / Working directory path\n\t */\n\tcwd?: string,\n\n\t/**\n\t * 忽略父層 Workspaces / Ignore parent workspaces\n\t */\n\tignoreParentWorkspaces?: boolean,\n\n\t/**\n\t * 忽略已存在的 Package / Ignore existing package\n\t */\n\tignoreExistsPackage?: boolean,\n\n\t/**\n\t * 初始化 Package.json 的回呼函式\n\t * Callback function to initialize package.json\n\t * @template T - 擴展屬性類型 / Extended property type\n\t * @param current - 當前的 package.json / Current package.json\n\t * @returns 修改後的 package.json / Modified package.json\n\t */\n\tinitPackageJson?<T extends Record<string, any> = {}>(current: IPackageJson): IPackageJson & T,\n\n\t/**\n\t * 啟用除錯模式 / Enable debug mode\n\t */\n\tdebug?: boolean,\n}\n\n/**\n * 創建 Yarn Workspaces 主函式\n * Main function to create Yarn Workspaces\n *\n * 檢查並創建 Workspaces 專案結構,處理已存在 Package 與父層 Workspaces 的情況\n * Checks and creates workspace project structure, handling existing packages\n * and parent workspaces\n *\n * @param cwd - 工作目錄路徑 / Working directory path\n * @param options - 配置選項 / Configuration options\n * @returns 是否成功創建 / Whether creation was successful\n */\nexport function createYarnWorkspaces(cwd?: string, options: IOptions = {})\n{\n\t// 處理第一個參數可能是選項物件的情況\n\t// Handle case where first argument might be options object\n\tif (cwd && typeof cwd != 'string')\n\t{\n\t\toptions = cwd;\n\t\tcwd = options.cwd;\n\t}\n\n\t// 預設使用當前工作目錄 / Default to current working directory\n\tcwd ??= process.cwd();\n\n\t// 尋找專案根目錄資訊 / Find project root information\n\tconst rootData = findRootLazy({\n\t\tcwd,\n\t});\n\n\t// 標準化路徑 / Normalize path\n\tcwd = pathNormalize(rootData?.cwd ?? cwd);\n\n\t// 取得 Package 根目錄與 Workspaces 路徑\n\t// Get package root directory and workspace path\n\tlet root: string = rootData?.pkg;\n\tlet ws: string = rootData?.ws;\n\n\t// 實際要初始化的目標路徑:優先採用既有 package 根目錄,否則退回 cwd。\n\t// The actual init target: prefer an existing package root, otherwise fall back to `cwd`.\n\tlet targetPath = resolve(root || cwd);\n\n\t// 除錯輸出 / Debug output\n\toptions.debug && console.debug({\n\t\ttargetPath,\n\t\tws,\n\t\toptions,\n\t});\n\n\t/**\n\t * 檢查是否已存在 Package\n\t * Check if package already exists\n\t */\n\tif (!options.ignoreExistsPackage && root)\n\t{\n\t\tconsole.error(`already have package at \"${root}\", or use ignoreExistsPackage for overwrite it`);\n\n\t\treturn false;\n\t}\n\telse if (root)\n\t{\n\t\t// 忽略已存在的 Package / Ignore existing package\n\t\tconsole.warn(`ignore exists package \"${root}\"`);\n\t}\n\n\t/**\n\t * 檢查是否已存在 Workspaces\n\t * Check if workspace already exists\n\t */\n\tif (ws)\n\t{\n\t\t// 檢查目標路徑是否與現有 Workspace 相同\n\t\t// Check if target path is same as existing workspace\n\t\tlet bool: boolean = !isSamePath(targetPath, ws);\n\n\t\tconsole.warn(`detect exists workspace \"${ws}\"`);\n\n\t\tif (bool)\n\t\t{\n\t\t\t// 根據選項決定是否忽略父層 Workspaces\n\t\t\t// Decide whether to ignore parent workspaces based on options\n\t\t\tif (options.ignoreParentWorkspaces)\n\t\t\t{\n\t\t\t\tconsole.warn(`ignoreParentWorkspaces = true`);\n\t\t\t\tbool = false;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconsole.error(`target path already is workspace`);\n\t\t\t}\n\t\t}\n\n\t\tif (bool)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn _createYarnWorkspaces(targetPath, options);\n}\n\n/**\n * 內部創建 Workspaces 實作函式\n * Internal implementation function for creating workspaces\n *\n * 執行實際的 Workspaces 初始化工作,包含:\n * - 讀取並更新 Lerna 配置\n * - 創建或更新 package.json\n * - 複製靜態範本檔案\n * - 創建 packages 目錄\n *\n * Performs actual workspace initialization including:\n * - Reading and updating Lerna configuration\n * - Creating or updating package.json\n * - Copying static template files\n * - Creating packages directory\n *\n * @param targetPath - 目標路徑 / Target path\n * @param options - 配置選項 / Configuration options\n * @returns 是否成功 / Whether successful\n */\nexport function _createYarnWorkspaces(targetPath: string, options: IOptions = {})\n{\n\tconsole.info(`create in target path \"${targetPath}\"`);\n\n\tlet pkg: IPackageJson;\n\n\tlet lerna: ILernaJson;\n\n\t/**\n\t * 嘗試讀取現有的 lerna.json 配置\n\t * Try to read existing lerna.json configuration\n\t */\n\t{\n\t\tlet file = join(targetPath, 'lerna.json');\n\n\t\tif (existsSync(file))\n\t\t{\n\t\t\tlet json: ILernaJson = JSON.parse(readFileSync(file).toString());\n\n\t\t\t/**\n\t\t\t * 清理空的 packages 陣列\n\t\t\t * Clean up empty packages array\n\t\t\t */\n\t\t\tif (json.packages && !Object.keys(json.packages).length)\n\t\t\t{\n\t\t\t\tjson.packages = undefined;\n\t\t\t}\n\n\t\t\tlerna = json;\n\t\t}\n\t}\n\n\t/**\n\t * 預設 packages 目錄模式\n\t * Default packages directory pattern\n\t */\n\tlet packages = lerna && lerna.packages || [\n\t\t\"packages/*\",\n\t];\n\n\tlet file = join(targetPath, 'package.json');\n\n\t/**\n\t * 處理 package.json 不存在的情況\n\t * Handle case when package.json does not exist\n\t */\n\tif (!existsSync(file))\n\t{\n\t\t// 使用目錄名作為預設 Package 名稱\n\t\t// Use directory name as default package name\n\t\tlet name = basename(targetPath);\n\n\t\t// 創建目標目錄(如果不存在)\n\t\t// Create target directory if it doesn't exist\n\t\tif (!existsSync(targetPath))\n\t\t{\n\t\t\tmkdirSync(targetPath);\n\t\t}\n\n\t\t// 合併預設配置與基本資訊\n\t\t// Merge default configuration with basic info\n\t\tpkg = Object.assign(getDefaultPackageJson(name), {\n\t\t\tname,\n\t\t\tworkspaces: packages,\n\t\t});\n\n\t\t/**\n\t\t * 執行自定義初始化回呼\n\t\t * Execute custom initialization callback\n\t\t */\n\t\tif (options.initPackageJson)\n\t\t{\n\t\t\tlet ret = options.initPackageJson(pkg);\n\n\t\t\tif (ret)\n\t\t\t{\n\t\t\t\tpkg = ret;\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t{\n\t\t/**\n\t\t * 處理已存在的 package.json\n\t\t * Handle existing package.json\n\t\t */\n\t\tlet json: IPackageJson = JSON.parse(readFileSync(file).toString());\n\n\t\tlet workspaces: ILernaJson['packages'];\n\n\t\t/**\n\t\t * 解析現有的 workspaces 配置\n\t\t * Parse existing workspaces configuration\n\t\t */\n\t\tif (json.workspaces && Object.keys(json.workspaces).length)\n\t\t{\n\t\t\tworkspaces = json.workspaces;\n\n\t\t\t/**\n\t\t\t * 支援 nohoist 配置格式\n\t\t\t * Support nohoist configuration format\n\t\t\t * @see https://yarnpkg.com/blog/2018/02/15/nohoist/\n\t\t\t */\n\t\t\t// @ts-ignore\n\t\t\tpackages = workspaces.packages || workspaces;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tworkspaces = packages;\n\t\t}\n\n\t\t/**\n\t\t * 更新 Package.json 內容\n\t\t * Update package.json content\n\t\t */\n\t\tpkg = Object.assign(json, {\n\t\t\t\"private\": true,\n\t\t\t\"workspaces\": workspaces,\n\t\t});\n\n\t\t/**\n\t\t * 合併預設腳本與欄位\n\t\t * Merge default scripts and fields\n\t\t */\n\t\tObject.entries(getDefaultPackageJson(json.name))\n\t\t\t.forEach(([field, value]) => {\n\n\t\t\t\t/**\n\t\t\t\t * 特殊處理 scripts 欄位:合併而非覆蓋\n\t\t\t\t * Special handling for scripts field: merge instead of overwrite\n\t\t\t\t */\n\t\t\t\tif (field === 'scripts')\n\t\t\t\t{\n\t\t\t\t\tpkg.scripts ??= {};\n\t\t\t\t\tpkg.scripts = {\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t...value,\n\t\t\t\t\t\t...pkg.scripts,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// 使用空值合併運算子設置預設值\n\t\t\t\t\t// Use nullish coalescing operator for default values\n\t\t\t\t\tpkg[field] ??= value\n\t\t\t\t}\n\n\t\t\t})\n\t\t;\n\n\t}\n\n\t/**\n\t * 寫入格式化後的 package.json\n\t * Write formatted package.json\n\t */\n\tlet s = JSON.stringify(sortPackageJson(pkg), null, 2);\n\twriteFileSync(file, s);\n\n\tconsole.success(`create workspace package.json`);\n\n\t/**\n\t * 更新 Lerna 配置(如果存在且需要更新)\n\t * Update Lerna configuration if exists and needs updating\n\t */\n\tif (lerna && (packages != lerna.packages || lerna.npmClient !== 'yarn' || lerna['useWorkspaces'] !== true))\n\t{\n\t\tlet file = join(targetPath, 'lerna.json');\n\n\t\t// 更新為 Yarn Workspaces 模式\n\t\t// Update to Yarn Workspaces mode\n\t\tlerna.packages = packages;\n\t\tlerna.npmClient ??= 'pnpm';\n\t\t// lerna['useWorkspaces'] = true;\n\n\t\tlet s = JSON.stringify(sortPackageJson(lerna), null, 2);\n\t\twriteFileSync(file, s);\n\n\t\tconsole.info(`update lerna.json`);\n\t}\n\n\t/**\n\t * 複製靜態範本檔案\n\t * Copy static template files\n\t */\n\tconst file_map = getWsCopyStaticFiles();\n\n\t/**\n\t * 複製靜態範本檔案\n\t * Copy static template files\n\t *\n\t * 此呼叫點 addStaticFiles 預設為 true,可用 noStaticFiles 關閉\n\t * addStaticFiles defaults to true at this call site; disable it with noStaticFiles\n\t */\n\tif (_isAddStaticFilesOrReset(options, true))\n\t{\n\t\tcopyStaticFiles({\n\t\t\tcwd: targetPath,\n\t\t\tfile_map,\n\t\t});\n\t}\n\n\t/**\n\t * 根據 packages 模式創建目錄\n\t * Create directories based on packages pattern\n\t */\n\tcreateDirByPackages(targetPath, packages);\n\n\treturn true;\n}\n\n/**\n * 根據 packages 模式創建目錄\n * Create directories based on packages pattern\n *\n * 解析 packages 陣列中的目錄模式(如 \"packages/*\"),\n * 並創建對應的實體目錄。\n * Parses directory patterns from packages array (e.g., \"packages/*\")\n * and creates corresponding physical directories.\n *\n * @param cwd - 當前工作目錄 / Current working directory\n * @param packages - packages 模式陣列 / Array of package patterns\n * @returns 是否有創建任何目錄 / Whether any directories were created\n */\nexport function createDirByPackages(cwd: string, packages: string[])\n{\n\treturn packages.some(function (value)\n\t{\n\t\tlet bool: boolean;\n\n\t\t// 提取路徑的第一個部分(目錄名稱)\n\t\t// Extract first part of path (directory name)\n\t\tlet s = value.split(/[\\/\\\\]/)[0];\n\n\t\t/**\n\t\t * 只處理不包含 glob 模式的純目錄路徑\n\t\t * Only handle pure directory paths without glob patterns\n\t\t */\n\t\tif (!/[!?\\*{}\\[\\]]/.test(s))\n\t\t{\n\t\t\tlet dir = join(cwd, s);\n\n\t\t\t// 目錄不存在時創建 / Create directory if it doesn't exist\n\t\t\tif (!existsSync(dir))\n\t\t\t{\n\t\t\t\tmkdirSync(dir);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn bool;\n\t})\n}\n\n/**\n * 預設導出創建函式\n * Default export of creation function\n */\nexport default createYarnWorkspaces;\n"]}
|
package/lib/package.demo.json
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
"@bluelovers/tsconfig": "^2.0.3",
|
|
8
8
|
"@types/jest": "^30.0.0",
|
|
9
9
|
"@types/node": "^26.6.5",
|
|
10
|
-
"@yarn-tool/require-resolve": "^4.0.
|
|
11
|
-
"@yarn-tool/ws-find-up-paths": "^1.0.
|
|
10
|
+
"@yarn-tool/require-resolve": "^4.0.11",
|
|
11
|
+
"@yarn-tool/ws-find-up-paths": "^1.0.24"
|
|
12
12
|
},
|
|
13
13
|
"peerDependencies": {
|
|
14
14
|
"@bluelovers/conventional-changelog-bluelovers": "*"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-yarn-workspaces",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.26",
|
|
4
4
|
"description": "Quickly initialize Yarn Workspaces project structure",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"create",
|
|
@@ -60,24 +60,24 @@
|
|
|
60
60
|
"@types/jest": "^30.0.0",
|
|
61
61
|
"@types/node": "^26.6.5",
|
|
62
62
|
"@yarn-tool/find-root": "^2.0.27",
|
|
63
|
-
"@yarn-tool/pkg-entry-util": "^3.0.
|
|
64
|
-
"@yarn-tool/require-resolve": "^4.0.
|
|
65
|
-
"@yarn-tool/static-file": "^3.0.
|
|
66
|
-
"@yarn-tool/ws-find-up-paths": "^1.0.
|
|
63
|
+
"@yarn-tool/pkg-entry-util": "^3.0.17",
|
|
64
|
+
"@yarn-tool/require-resolve": "^4.0.12",
|
|
65
|
+
"@yarn-tool/static-file": "^3.0.23",
|
|
66
|
+
"@yarn-tool/ws-find-up-paths": "^1.0.25",
|
|
67
67
|
"debug-color2": "^1.3.2",
|
|
68
68
|
"find-yarn-workspace-root2": "^1.2.57",
|
|
69
69
|
"fs-extra": "^11.4.1",
|
|
70
70
|
"path-is-same": "^1.0.29",
|
|
71
71
|
"pkg-dir": "<6 >=5",
|
|
72
|
-
"sort-package-json3": "^3.0.
|
|
72
|
+
"sort-package-json3": "^3.0.15",
|
|
73
73
|
"ts-type": "^3.0.18",
|
|
74
74
|
"tslib": "^2.8.1",
|
|
75
75
|
"upath2": "^3.1.25",
|
|
76
76
|
"yargs": "<18 >=17.7.2"
|
|
77
77
|
},
|
|
78
78
|
"devDependencies": {
|
|
79
|
-
"@yarn-tool/ncu": "^3.0.
|
|
80
|
-
"@yarn-tool/write-package-json": "^1.0.
|
|
79
|
+
"@yarn-tool/ncu": "^3.0.13",
|
|
80
|
+
"@yarn-tool/write-package-json": "^1.0.20"
|
|
81
81
|
},
|
|
82
|
-
"gitHead": "
|
|
82
|
+
"gitHead": "298e125907abc4dc8c8187e82636ccd8e9c10aaa"
|
|
83
83
|
}
|
package/yargs-setting.d.ts
CHANGED