@kmlckj/licos-ai-cli 0.0.32 → 0.0.35

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 (28) hide show
  1. package/lib/__templates__/expo/.licosproj/scripts/prod_build.sh +39 -0
  2. package/lib/__templates__/expo/server/src/index.ts +12 -0
  3. package/lib/__templates__/native-static/.licos +2 -2
  4. package/lib/__templates__/nextjs/next.config.ts +9 -2
  5. package/lib/__templates__/nextjs/src/server.ts +6 -1
  6. package/lib/__templates__/nuxt-vue/nuxt.config.ts +33 -25
  7. package/lib/__templates__/nuxt-vue/package.json +20 -14
  8. package/lib/__templates__/nuxt-vue/pnpm-lock.yaml +451 -460
  9. package/lib/__templates__/nuxt-vue/scripts/build.sh +10 -0
  10. package/lib/__templates__/nuxt-vue/scripts/start.sh +10 -0
  11. package/lib/__templates__/nuxt-vue/server/middleware/logger.ts +2 -1
  12. package/lib/__templates__/taro/.licosproj/scripts/deploy_run.sh +1 -1
  13. package/lib/__templates__/taro/AGENTS.md +37 -0
  14. package/lib/__templates__/taro/README.md +4 -3
  15. package/lib/__templates__/taro/config/index.ts +1 -1
  16. package/lib/__templates__/taro/eslint.config.mjs +1 -1
  17. package/lib/__templates__/taro/package.json +2 -1
  18. package/lib/__templates__/taro/pnpm-lock.yaml +42 -1978
  19. package/lib/__templates__/taro/server/package.json +3 -12
  20. package/lib/__templates__/taro/server/src/main.ts +17 -0
  21. package/lib/__templates__/taro/src/presets/env.ts +1 -1
  22. package/lib/__templates__/taro/types/global.d.ts +1 -2
  23. package/lib/__templates__/vite/scripts/build.sh +1 -0
  24. package/lib/__templates__/vite/server/server.ts +6 -1
  25. package/lib/__templates__/vite/server/vite.ts +11 -3
  26. package/lib/__templates__/vite/vite.config.ts +9 -1
  27. package/lib/cli.js +20 -1
  28. package/package.json +1 -1
@@ -9,6 +9,16 @@ echo "Installing dependencies..."
9
9
  pnpm install --registry=https://registry.npmmirror.com --prefer-frozen-lockfile --prefer-offline --loglevel debug --reporter=append-only
10
10
 
11
11
  echo "Building the Nuxt.js project..."
12
+ BASE_URL="${NUXT_PUBLIC_BASE_URL:-${BASE_PATH:-/}}"
13
+ if [ "${BASE_URL}" != "/" ]; then
14
+ BASE_URL="/$(printf '%s' "${BASE_URL}" | sed 's#^/*##; s#/*$##')/"
15
+ fi
16
+ export NUXT_PUBLIC_BASE_URL="${BASE_URL}"
17
+ if [ "${BASE_URL}" = "/" ]; then
18
+ export NUXT_APP_BUILD_ASSETS_DIR="/_nuxt/"
19
+ else
20
+ export NUXT_APP_BUILD_ASSETS_DIR="${BASE_URL}_nuxt/"
21
+ fi
12
22
  pnpm nuxt build
13
23
 
14
24
  echo "Build completed successfully!"
@@ -14,6 +14,16 @@ DEPLOY_RUN_PORT="${DEPLOY_RUN_PORT:-$PORT}"
14
14
  start_service() {
15
15
  cd "${PROJECT_DIR}"
16
16
  echo "Starting Nuxt.js service on port ${DEPLOY_RUN_PORT} for production..."
17
+ BASE_URL="${NUXT_PUBLIC_BASE_URL:-${BASE_PATH:-/}}"
18
+ if [ "${BASE_URL}" != "/" ]; then
19
+ BASE_URL="/$(printf '%s' "${BASE_URL}" | sed 's#^/*##; s#/*$##')/"
20
+ fi
21
+ export NUXT_PUBLIC_BASE_URL="${BASE_URL}"
22
+ if [ "${BASE_URL}" = "/" ]; then
23
+ export NUXT_APP_BUILD_ASSETS_DIR="/_nuxt/"
24
+ else
25
+ export NUXT_APP_BUILD_ASSETS_DIR="${BASE_URL}_nuxt/"
26
+ fi
17
27
  HOST=0.0.0.0 PORT=${DEPLOY_RUN_PORT} node .output/server/index.mjs
18
28
  }
19
29
 
@@ -2,7 +2,8 @@
2
2
  * 请求日志中间件(仅开发环境)
3
3
  */
4
4
  export default defineEventHandler((event) => {
5
- const isDev = process.env.LICOS_PROJECT_ENV !== 'PROD';
5
+ const normalizedEnv = process.env.LICOS_PROJECT_ENV?.trim().toLowerCase();
6
+ const isDev = !['prod', 'production', 'release'].includes(normalizedEnv || '');
6
7
 
7
8
  if (isDev) {
8
9
  console.log(`${event.method} ${event.path}`);
@@ -5,7 +5,7 @@ start_service() {
5
5
  local project_dir="${LICOS_PROJECT_PATH:-${LICOS_WORKSPACE_PATH:-$(pwd)}}"
6
6
  cd "${project_dir}/server/dist"
7
7
 
8
- local port="${DEPLOY_RUN_PORT:-${PORT:-3000}}"
8
+ local port="${DEPLOY_RUN_PORT:-${PORT:-5000}}"
9
9
  echo "Starting Static File Server on port ${port} for deploy..."
10
10
 
11
11
  node ./main.js -p "${port}"
@@ -14,6 +14,43 @@ pnpm remove <package> # 移除依赖
14
14
  - 除非用户明确要求,修改代码时不要运行 `pnpm install`、`pnpm dev`、`pnpm build`、`pnpm validate`。平台预览和部署会负责依赖安装与启动。
15
15
  - 如果平台预览或部署阶段报依赖缺失,才运行 `pnpm install --registry=https://registry.npmmirror.com --prefer-frozen-lockfile --prefer-offline --reporter=append-only`,不要用 `pnpm add` 重装模板已经声明过的依赖。
16
16
 
17
+ ## 项目入口与环境变量
18
+
19
+ - 用户要求创建页面或应用时,必须把主入口实现到 `src/pages/index/index.tsx`,或将 `src/app.config.ts` 的第一个页面调整为实际入口;禁止保留默认“应用开发中”占位首页。
20
+ - `src/` 下禁止直接使用 `process.env`,不要使用 `__PUBLIC_PATH__`。请求前缀使用全局 `PROJECT_DOMAIN`,构建平台判断使用全局 `LICOS_TARO_ENV`。
21
+ - 不要在业务代码里使用裸标识符 `TARO_ENV`。如需展示文字 “TARO_ENV”,只作为普通中文/英文说明文本使用,不要把它当作变量读取。
22
+ - Taro API 只允许单次导入,统一写 `import Taro, { useLoad } from '@tarojs/taro'`,不要同时写 `import { useLoad } from '@tarojs/taro'` 和 `import Taro from '@tarojs/taro'`。
23
+ - 需要在 `src/` 展示构建环境或项目域名时,直接读取全局常量:`LICOS_TARO_ENV || 'unknown'`、`PROJECT_DOMAIN || ''`,不要写 `process.env.TARO_ENV` 或 `process.env.PROJECT_DOMAIN`。
24
+ - 需要引用本地资源时使用 ESM import,例如 `import logoUrl from '@/assets/images/logo.svg'`,不要在 `src/` 中写 CommonJS `require(...)`。
25
+ - 从第三方图标包导入前必须确认导出存在;不确定时优先使用已验证的 `Package`、`Globe`、`Cpu`、`Layers` 等基础图标,避免引入不存在的命名导出导致构建失败。
26
+
27
+ 正确示例:
28
+
29
+ ```tsx
30
+ import { View, Text, Image } from '@tarojs/components'
31
+ import Taro, { useLoad } from '@tarojs/taro'
32
+ import logoUrl from '@/assets/images/logo.svg'
33
+ import { Textarea } from '@/components/ui/textarea'
34
+
35
+ export default function IndexPage() {
36
+ useLoad(() => {
37
+ Taro.setNavigationBarTitle({ title: '首页' })
38
+ })
39
+
40
+ const envName = LICOS_TARO_ENV || 'unknown'
41
+ const projectDomain = PROJECT_DOMAIN || '未配置'
42
+
43
+ return (
44
+ <View>
45
+ <Image src={logoUrl} mode="aspectFit" />
46
+ <Text className="block">构建类型:{envName}</Text>
47
+ <Text className="block">项目域:{projectDomain}</Text>
48
+ <Textarea value="测试结果" disabled autoHeight />
49
+ </View>
50
+ )
51
+ }
52
+ ```
53
+
17
54
  ## 图片与视频资源使用规范
18
55
 
19
56
  **强制规则**:图片、视频等静态资源必须通过 TOS 对象存储管理,代码中使用 TOS 返回的 URL 引用。
@@ -77,7 +77,8 @@ pnpm dev:server # 仅后端服务
77
77
  ### 构建
78
78
 
79
79
  ```bash
80
- pnpm build # 构建所有(H5 + 小程序 + 后端)
80
+ pnpm build # 构建部署产物(H5 + 后端)
81
+ pnpm build:all # 构建所有(H5 + 小程序 + 后端)
81
82
  pnpm build:web # 仅构建 H5,输出到 dist-web
82
83
  pnpm build:weapp # 仅构建微信小程序,输出到 dist
83
84
  pnpm build:server # 仅构建后端
@@ -712,9 +713,9 @@ export class HttpExceptionFilter implements ExceptionFilter {
712
713
  app.useGlobalFilters(new HttpExceptionFilter());
713
714
  ```
714
715
 
715
- ### 数据库 (Drizzle ORM)
716
+ ### 数据库
716
717
 
717
- 推荐使用 [Drizzle ORM](https://orm.drizzle.team/),已预安装。
718
+ 数据库能力统一通过平台 API / SDK 使用,模板不预置本地数据库或数据库直连依赖。
718
719
 
719
720
  ### 类型校验 (Zod)
720
721
 
@@ -95,7 +95,7 @@ export default defineConfig<'vite'>(async (merge, _env) => {
95
95
  process.env.LICOS_PROJECT_DOMAIN_DEFAULT ||
96
96
  '',
97
97
  ),
98
- TARO_ENV: JSON.stringify(process.env.TARO_ENV),
98
+ LICOS_TARO_ENV: JSON.stringify(process.env.TARO_ENV || ''),
99
99
  },
100
100
  copy: {
101
101
  patterns: [],
@@ -47,7 +47,7 @@ const baseRestrictedSyntaxRules = [
47
47
  {
48
48
  selector: "MemberExpression[object.name='process'][property.name='env']",
49
49
  message:
50
- '工程规范:请勿在 src 目录下直接使用 process.env\n如需获取 URL 请求前缀,请使用已经注入全局的 PROJECT_DOMAIN',
50
+ '工程规范:请勿在 src 目录下直接使用 process.env\n如需获取 URL 请求前缀,请使用已经注入全局的 PROJECT_DOMAIN;如需判断构建平台,请使用 LICOS_TARO_ENV',
51
51
  },
52
52
  {
53
53
  selector:
@@ -4,7 +4,8 @@
4
4
  "private": true,
5
5
  "description": "LICOS Mini Program Application",
6
6
  "scripts": {
7
- "build": "pnpm exec concurrently --kill-others-on-fail --kill-signal SIGKILL -n lint,tsc,web,weapp,tt,server -c red,blue,green,yellow,cyan,magenta \"pnpm lint:build\" \"pnpm tsc\" \"pnpm build:web\" \"pnpm build:weapp\" \"pnpm build:tt\" \"pnpm build:server\"",
7
+ "build": "pnpm exec concurrently --kill-others-on-fail --kill-signal SIGKILL -n lint,tsc,web,server -c red,blue,green,magenta \"pnpm lint:build\" \"pnpm tsc\" \"pnpm build:web\" \"pnpm build:server\"",
8
+ "build:all": "pnpm exec concurrently --kill-others-on-fail --kill-signal SIGKILL -n lint,tsc,web,weapp,tt,server -c red,blue,green,yellow,cyan,magenta \"pnpm lint:build\" \"pnpm tsc\" \"pnpm build:web\" \"pnpm build:weapp\" \"pnpm build:tt\" \"pnpm build:server\"",
8
9
  "build:pack": "pnpm exec concurrently --kill-others-on-fail --kill-signal SIGKILL -n weapp,tt -c yellow,cyan \"pnpm build:weapp\" \"pnpm build:tt\"",
9
10
  "build:server": "pnpm --filter server build",
10
11
  "build:tt": "taro build --type tt",