diff --git a/cocoscreator_projects/scripts/bump-cocos.mjs b/cocoscreator_projects/scripts/bump-cocos.mjs index d602170..63ec335 100644 --- a/cocoscreator_projects/scripts/bump-cocos.mjs +++ b/cocoscreator_projects/scripts/bump-cocos.mjs @@ -20,7 +20,7 @@ export function bumpVersion(projectDirs, version) { } // CLI 入口:bump 宿主 + 所有子游戏到指定版本 -if (import.meta.url === pathToFileURL(process.argv[1]).href) { +if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) { const version = process.argv[2]; if (!version) { console.error('用法: npm run bump-cocos 例: npm run bump-cocos 3.8.9'); diff --git a/cocoscreator_projects/scripts/check-cocos-version.mjs b/cocoscreator_projects/scripts/check-cocos-version.mjs index 4695a1e..e878c04 100644 --- a/cocoscreator_projects/scripts/check-cocos-version.mjs +++ b/cocoscreator_projects/scripts/check-cocos-version.mjs @@ -16,8 +16,12 @@ export function checkVersions(hostProject, gamesDir) { } // CLI 入口:有不一致则退出码 1 -if (import.meta.url === pathToFileURL(process.argv[1]).href) { +if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) { const { expected, mismatches } = checkVersions(HOST_PROJECT, GAMES_DIR); + if (expected == null) { + console.error('错误: 宿主工程缺少 creator.version'); + process.exit(1); + } console.log(`宿主 Cocos 版本: ${expected}`); if (mismatches.length === 0) { console.log('OK: 所有子游戏工程版本一致。'); diff --git a/cocoscreator_projects/scripts/new-game.mjs b/cocoscreator_projects/scripts/new-game.mjs index a19e2c8..01d1dd6 100644 --- a/cocoscreator_projects/scripts/new-game.mjs +++ b/cocoscreator_projects/scripts/new-game.mjs @@ -28,7 +28,7 @@ export function newGame(name, opts = {}) { } // CLI 入口 -if (import.meta.url === pathToFileURL(process.argv[1]).href) { +if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) { const name = process.argv[2]; if (!name) { console.error('用法: npm run new-game '); diff --git a/cocoscreator_projects/scripts/setup-links.mjs b/cocoscreator_projects/scripts/setup-links.mjs index d01ccd4..e77931a 100644 --- a/cocoscreator_projects/scripts/setup-links.mjs +++ b/cocoscreator_projects/scripts/setup-links.mjs @@ -19,7 +19,7 @@ export function setupLinks(gamesDir, frameworkSrc) { } // CLI 入口 -if (import.meta.url === pathToFileURL(process.argv[1]).href) { +if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) { const results = setupLinks(GAMES_DIR, FRAMEWORK_SRC); if (results.length === 0) { console.log('games/ 下暂无子游戏工程。'); diff --git a/cocoscreator_projects/scripts/test/cli-entry.test.mjs b/cocoscreator_projects/scripts/test/cli-entry.test.mjs new file mode 100644 index 0000000..8ef6c25 --- /dev/null +++ b/cocoscreator_projects/scripts/test/cli-entry.test.mjs @@ -0,0 +1,19 @@ +import { test } from 'node:test'; +import assert from 'node:assert/strict'; +import { spawnSync } from 'node:child_process'; +import { fileURLToPath, pathToFileURL } from 'node:url'; +import { dirname, join } from 'node:path'; + +const scriptsDir = join(dirname(fileURLToPath(import.meta.url)), '..'); +const CLI = ['setup-links.mjs', 'new-game.mjs', 'check-cocos-version.mjs', 'bump-cocos.mjs']; + +for (const name of CLI) { + test(`${name} 被动态 import 时不崩溃(argv[1] undefined)`, () => { + const url = pathToFileURL(join(scriptsDir, name)).href; + const r = spawnSync(process.execPath, + ['--input-type=module', '-e', `import(${JSON.stringify(url)}).then(()=>process.exit(0))`], + { encoding: 'utf8' }); + assert.equal(r.status, 0, `stderr: ${r.stderr}`); + assert.ok(!/TypeError/.test(r.stderr), `不应出现 TypeError: ${r.stderr}`); + }); +} diff --git a/cocoscreator_projects/scripts/test/scaffold.test.mjs b/cocoscreator_projects/scripts/test/scaffold.test.mjs index d334255..6d9e903 100644 --- a/cocoscreator_projects/scripts/test/scaffold.test.mjs +++ b/cocoscreator_projects/scripts/test/scaffold.test.mjs @@ -42,7 +42,7 @@ test('setProjectIdentity 改 name 并生成新 uuid', () => { const pkg = setProjectIdentity(dest, 'doudizhu'); assert.equal(pkg.name, 'doudizhu'); assert.notEqual(pkg.uuid, 'seed-uuid'); - assert.match(pkg.uuid, /^[0-9a-f-]{36}$/); + assert.match(pkg.uuid, /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/); const onDisk = JSON.parse(readFileSync(join(dest, 'package.json'), 'utf8')); assert.equal(onDisk.name, 'doudizhu'); assert.equal(onDisk.creator.version, '3.8.8'); // 引擎版本保留