@coze-arch/cli 0.0.1-alpha.f37dff → 0.0.1-alpha.f626fa

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.
Files changed (33) hide show
  1. package/lib/__templates__/expo/.cozeproj/scripts/dev_run.sh +10 -10
  2. package/lib/__templates__/expo/.cozeproj/scripts/prod_build.sh +2 -2
  3. package/lib/__templates__/expo/.cozeproj/scripts/prod_run.sh +2 -2
  4. package/lib/__templates__/expo/.cozeproj/scripts/server_dev_run.sh +45 -0
  5. package/lib/__templates__/expo/client/app/_layout.tsx +14 -14
  6. package/lib/__templates__/expo/client/app/index.tsx +1 -1
  7. package/lib/__templates__/expo/client/app.config.ts +4 -3
  8. package/lib/__templates__/expo/client/constants/theme.ts +14 -10
  9. package/lib/__templates__/expo/client/declarations.d.ts +5 -0
  10. package/lib/__templates__/expo/client/screens/{home → demo}/index.tsx +7 -3
  11. package/lib/__templates__/expo/client/screens/{home → demo}/styles.ts +10 -6
  12. package/lib/__templates__/expo/client/scripts/install-missing-deps.js +1 -0
  13. package/lib/__templates__/expo/client/utils/index.ts +22 -0
  14. package/lib/__templates__/expo/pnpm-lock.yaml +35 -5
  15. package/lib/__templates__/expo/server/build.js +21 -0
  16. package/lib/__templates__/expo/server/package.json +4 -3
  17. package/lib/__templates__/nextjs/_npmrc +1 -0
  18. package/lib/__templates__/nextjs/next.config.ts +3 -1
  19. package/lib/__templates__/nextjs/package.json +1 -1
  20. package/lib/__templates__/nextjs/pnpm-lock.yaml +13 -5
  21. package/lib/__templates__/nextjs/src/app/globals.css +10 -2
  22. package/lib/__templates__/nextjs/src/app/layout.tsx +1 -12
  23. package/lib/__templates__/nextjs/src/app/page.tsx +33 -20
  24. package/lib/__templates__/nextjs/template.config.js +9 -3
  25. package/lib/__templates__/vite/_npmrc +1 -0
  26. package/lib/__templates__/vite/package.json +2 -1
  27. package/lib/__templates__/vite/pnpm-lock.yaml +2628 -2
  28. package/lib/__templates__/vite/src/main.ts +1 -2
  29. package/lib/__templates__/vite/template.config.js +24 -4
  30. package/lib/cli.js +58 -27
  31. package/package.json +1 -1
  32. package/lib/__templates__/expo/client/app/home.tsx +0 -1
  33. package/lib/__templates__/expo/client/assets/images/coze-logo.png +0 -0
@@ -13,8 +13,7 @@ export function initApp(): void {
13
13
  <!-- 头部:Logo 和 产品名称 -->
14
14
  <div class="flex items-center gap-3">
15
15
  <img
16
- class="dark:invert"
17
- src="https://lf3-static.bytednsdoc.com/obj/eden-cn/hkpzboz/coze_logo.png"
16
+ src="https://lf-coze-web-cdn.coze.cn/obj/eden-cn/lm-lgvj/ljhwZthlaukjlkulzlp/favicon.svg"
18
17
  alt="扣子编程 Logo"
19
18
  width="40"
20
19
  height="40"
@@ -59,11 +59,31 @@ const config = {
59
59
 
60
60
  onAfterRender: async (context, outputPath) => {
61
61
  console.log(`\nProject created at: ${outputPath}`);
62
- console.log(`\nConfiguration:`);
63
- console.log(` - TypeScript: enabled`);
64
- console.log(` - Framework: None (Vanilla JS/TS)`);
65
- console.log(` - Build Tool: Vite`);
62
+ console.log('\nConfiguration:');
63
+ console.log(' - Framework: vite');
64
+ console.log(' - TypeScript: enabled');
65
+ console.log(' - App Router: enabled');
66
66
  console.log(` - Port: ${context.port}`);
67
+
68
+ // Skip pnpm add in test environment to avoid monorepo workspace issues
69
+ if (process.env.NODE_ENV === 'test') {
70
+ console.log('⊘ Skipping dependency update in test environment');
71
+ return;
72
+ }
73
+
74
+ const cmd = `pnpm add coze-coding-dev-sdk@"^0.7.0"`;
75
+ console.log(`${cmd}`);
76
+ try {
77
+ const projectRoot = resolve(outputPath);
78
+ execSync(cmd, {
79
+ cwd: projectRoot,
80
+ stdio: 'inherit',
81
+ });
82
+ console.log('✓ coze-coding-dev-sdk updated successfully');
83
+ } catch (error) {
84
+ console.error('✗ Failed to update coze-coding-dev-sdk:', error);
85
+ throw error;
86
+ }
67
87
  },
68
88
  };
69
89
 
package/lib/cli.js CHANGED
@@ -7,10 +7,10 @@ var fs = require('fs');
7
7
  var shelljs = require('shelljs');
8
8
  var perf_hooks = require('perf_hooks');
9
9
  var fs$1 = require('fs/promises');
10
+ var os = require('os');
10
11
  var toml = require('@iarna/toml');
11
12
  var jsYaml = require('js-yaml');
12
13
  var child_process = require('child_process');
13
- var os = require('os');
14
14
  var addFormats = require('ajv-formats');
15
15
  var Ajv = require('ajv');
16
16
  var minimist = require('minimist');
@@ -826,23 +826,48 @@ const getCommandConfig = (
826
826
  function _nullishCoalesce$1(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
827
827
 
828
828
  /**
829
- * 创建日志管理器
829
+ * 日志文件名常量
830
830
  */
831
- const createLogManager = (logDir = '.coze-logs') => {
832
- const ensureLogDir = () => {
833
- if (!fs.existsSync(logDir)) {
834
- fs.mkdirSync(logDir, { recursive: true });
835
- }
836
- };
831
+ const LOG_FILE_NAME = 'dev.log';
832
+
833
+ /**
834
+ * 获取日志目录
835
+ * 优先使用环境变量 COZE_LOG_DIR,否则使用 ~/.coze-logs
836
+ */
837
+ const getLogDir = () =>
838
+ process.env.COZE_LOG_DIR || path.join(os.homedir(), '.coze-logs');
837
839
 
838
- const getLogPath = (logFile) => path.join(logDir, logFile);
840
+ /**
841
+ * 解析日志文件路径
842
+ * - 如果是绝对路径,直接使用
843
+ * - 如果是相对路径,基于 getLogDir() + 相对路径
844
+ * - 如果为空,使用 getLogDir() + LOG_FILE_NAME
845
+ */
846
+ const resolveLogFilePath = (logFile) => {
847
+ if (!logFile) {
848
+ return path.join(getLogDir(), LOG_FILE_NAME);
849
+ }
839
850
 
840
- return {
841
- createWriteStream: (logFile) => {
842
- ensureLogDir();
843
- return fs.createWriteStream(getLogPath(logFile), { flags: 'a' });
844
- },
845
- };
851
+ if (path.isAbsolute(logFile)) {
852
+ return logFile;
853
+ }
854
+
855
+ return path.join(getLogDir(), logFile);
856
+ };
857
+
858
+ /**
859
+ * 创建日志写入流
860
+ */
861
+ const createLogStream = (logFilePath) => {
862
+ const logDir = path.dirname(logFilePath);
863
+
864
+ // 确保日志目录存在
865
+ if (!fs.existsSync(logDir)) {
866
+ fs.mkdirSync(logDir, { recursive: true });
867
+ }
868
+
869
+ // 使用 'w' 标志覆盖之前的日志
870
+ return fs.createWriteStream(logFilePath, { flags: 'w' });
846
871
  };
847
872
 
848
873
  /**
@@ -860,16 +885,15 @@ const executeRun = async (
860
885
  const commandArgs = getCommandConfig(config, commandName);
861
886
 
862
887
  // 2. 准备日志
863
- const logManager = createLogManager();
864
- const logFile = options.logFile || `${commandName}.log`;
865
- const logStream = logManager.createWriteStream(logFile);
888
+ const logFilePath = resolveLogFilePath(options.logFile);
889
+ const logStream = createLogStream(logFilePath);
866
890
 
867
891
  // 3. 执行命令
868
892
  const commandString = commandArgs.join(' ');
869
893
 
870
894
  logger.info(`Executing: ${commandString}`);
871
895
  logger.info(`Working directory: ${process.cwd()}`);
872
- logger.info(`Log file: ${logFile}`);
896
+ logger.info(`Log file: ${logFilePath}`);
873
897
 
874
898
  const childProcess = shelljs.exec(commandString, {
875
899
  async: true,
@@ -898,11 +922,11 @@ const executeRun = async (
898
922
  logger.error(
899
923
  `Command exited with code ${_nullishCoalesce$1(code, () => ( 'unknown'))}${signal ? ` and signal ${signal}` : ''}`,
900
924
  );
901
- logger.error(`Check log file for details: ${logFile}`);
925
+ logger.error(`Check log file for details: ${logFilePath}`);
902
926
  process.exit(code || 1);
903
927
  } else {
904
928
  logger.success('Command completed successfully');
905
- logger.info(`Log file: ${logFile}`);
929
+ logger.info(`Log file: ${logFilePath}`);
906
930
  }
907
931
  });
908
932
 
@@ -1724,13 +1748,20 @@ const runGitInit = (projectPath) => {
1724
1748
  /**
1725
1749
  * 运行开发服务器(后台模式)
1726
1750
  * 启动后台子进程运行开发服务器,父进程可以直接退出
1751
+ * 使用 CLI 自己的 dev 命令(定义在 run.ts)而不是直接运行 npm run dev
1727
1752
  */
1728
- const runNpmDev = (projectPath) => {
1753
+ const runDev = (projectPath) => {
1729
1754
  logger.info('\nStarting development server in background...');
1730
- logger.info(`Executing: npm run dev in ${projectPath}`);
1755
+
1756
+ // 获取当前 CLI 的可执行文件路径
1757
+ // process.argv[0] 是 node,process.argv[1] 是 CLI 入口文件
1758
+ const cliPath = process.argv[1];
1759
+
1760
+ logger.info(`Executing: ${cliPath} dev in ${projectPath}`);
1731
1761
 
1732
1762
  // 使用通用的后台执行函数启动开发服务器
1733
- const pid = spawnDetached('npm', ['run', 'dev'], {
1763
+ // 调用 CLI 自己的 dev 命令
1764
+ const pid = spawnDetached(process.argv[0], [cliPath, 'dev'], {
1734
1765
  cwd: projectPath,
1735
1766
  verbose: false, // 不输出额外的进程信息,由 logger 统一处理
1736
1767
  });
@@ -1806,7 +1837,7 @@ const executeInit = async (
1806
1837
 
1807
1838
  // 如果没有跳过 dev,则启动开发服务器
1808
1839
  if (!skipDev) {
1809
- runNpmDev(absoluteOutputPath);
1840
+ runDev(absoluteOutputPath);
1810
1841
  timer.logPhase('Dev server startup');
1811
1842
  } else {
1812
1843
  // 只有跳过 dev 时才显示 Next steps
@@ -1820,7 +1851,7 @@ const executeInit = async (
1820
1851
  ' git init && git add . && git commit -m "initial commit"',
1821
1852
  );
1822
1853
  }
1823
- logger.info(' npm run dev');
1854
+ logger.info(' coze dev');
1824
1855
  }
1825
1856
 
1826
1857
  // 输出总耗时
@@ -1854,7 +1885,7 @@ const registerCommand = program => {
1854
1885
  });
1855
1886
  };
1856
1887
 
1857
- var version = "0.0.1-alpha.f37dff";
1888
+ var version = "0.0.1-alpha.f626fa";
1858
1889
  var packageJson = {
1859
1890
  version: version};
1860
1891
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coze-arch/cli",
3
- "version": "0.0.1-alpha.f37dff",
3
+ "version": "0.0.1-alpha.f626fa",
4
4
  "private": false,
5
5
  "description": "coze coding devtools cli",
6
6
  "license": "MIT",
@@ -1 +0,0 @@
1
- export { default } from '@/screens/home'