@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.
- package/lib/__templates__/expo/.cozeproj/scripts/dev_run.sh +10 -10
- package/lib/__templates__/expo/.cozeproj/scripts/prod_build.sh +2 -2
- package/lib/__templates__/expo/.cozeproj/scripts/prod_run.sh +2 -2
- package/lib/__templates__/expo/.cozeproj/scripts/server_dev_run.sh +45 -0
- package/lib/__templates__/expo/client/app/_layout.tsx +14 -14
- package/lib/__templates__/expo/client/app/index.tsx +1 -1
- package/lib/__templates__/expo/client/app.config.ts +4 -3
- package/lib/__templates__/expo/client/constants/theme.ts +14 -10
- package/lib/__templates__/expo/client/declarations.d.ts +5 -0
- package/lib/__templates__/expo/client/screens/{home → demo}/index.tsx +7 -3
- package/lib/__templates__/expo/client/screens/{home → demo}/styles.ts +10 -6
- package/lib/__templates__/expo/client/scripts/install-missing-deps.js +1 -0
- package/lib/__templates__/expo/client/utils/index.ts +22 -0
- package/lib/__templates__/expo/pnpm-lock.yaml +35 -5
- package/lib/__templates__/expo/server/build.js +21 -0
- package/lib/__templates__/expo/server/package.json +4 -3
- package/lib/__templates__/nextjs/_npmrc +1 -0
- package/lib/__templates__/nextjs/next.config.ts +3 -1
- package/lib/__templates__/nextjs/package.json +1 -1
- package/lib/__templates__/nextjs/pnpm-lock.yaml +13 -5
- package/lib/__templates__/nextjs/src/app/globals.css +10 -2
- package/lib/__templates__/nextjs/src/app/layout.tsx +1 -12
- package/lib/__templates__/nextjs/src/app/page.tsx +33 -20
- package/lib/__templates__/nextjs/template.config.js +9 -3
- package/lib/__templates__/vite/_npmrc +1 -0
- package/lib/__templates__/vite/package.json +2 -1
- package/lib/__templates__/vite/pnpm-lock.yaml +2628 -2
- package/lib/__templates__/vite/src/main.ts +1 -2
- package/lib/__templates__/vite/template.config.js +24 -4
- package/lib/cli.js +58 -27
- package/package.json +1 -1
- package/lib/__templates__/expo/client/app/home.tsx +0 -1
- 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
|
-
|
|
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(
|
|
63
|
-
console.log(
|
|
64
|
-
console.log(
|
|
65
|
-
console.log(
|
|
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
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
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
|
-
|
|
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
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
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
|
|
864
|
-
const
|
|
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: ${
|
|
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: ${
|
|
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: ${
|
|
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
|
|
1753
|
+
const runDev = (projectPath) => {
|
|
1729
1754
|
logger.info('\nStarting development server in background...');
|
|
1730
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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('
|
|
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.
|
|
1888
|
+
var version = "0.0.1-alpha.f626fa";
|
|
1858
1889
|
var packageJson = {
|
|
1859
1890
|
version: version};
|
|
1860
1891
|
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default } from '@/screens/home'
|
|
Binary file
|