@lazycatcloud/lzc-cli 2.0.0-pre.0 → 2.0.0-pre.2
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/README.md +46 -7
- package/changelog.md +56 -19
- package/lib/app/apkshell.js +7 -44
- package/lib/app/index.js +5 -1
- package/lib/app/lpk_build.js +266 -56
- package/lib/app/lpk_build_images.js +424 -229
- package/lib/app/lpk_build_images_local.js +425 -0
- package/lib/app/lpk_build_images_pack_local.js +409 -0
- package/lib/app/lpk_create.js +158 -83
- package/lib/app/lpk_create_generator.js +35 -42
- package/lib/app/lpk_devshell.js +6 -2
- package/lib/app/lpk_installer.js +4 -3
- package/lib/app/manifest_build.js +259 -0
- package/lib/app/project_cp.js +5 -10
- package/lib/app/project_deploy.js +80 -11
- package/lib/app/project_exec.js +48 -11
- package/lib/app/project_info.js +59 -59
- package/lib/app/project_log.js +5 -10
- package/lib/app/project_runtime.js +113 -18
- package/lib/app/project_start.js +6 -11
- package/lib/app/project_sync.js +499 -0
- package/lib/appstore/apkshell.js +50 -0
- package/lib/appstore/publish.js +54 -15
- package/lib/build_remote.js +0 -1
- package/lib/config/index.js +1 -1
- package/lib/debug_bridge.js +217 -47
- package/lib/i18n/locales/en/translation.json +262 -262
- package/lib/i18n/locales/zh/translation.json +262 -262
- package/lib/lpk/core.js +2 -1
- package/lib/migrate/index.js +52 -0
- package/lib/package_info.js +135 -0
- package/lib/shellapi.js +35 -1
- package/lib/sig/core.js +2 -2
- package/lib/utils.js +92 -15
- package/package.json +89 -89
- package/scripts/cli.js +2 -0
- package/scripts/smoke/frontend-dev-entry.mjs +104 -0
- package/scripts/smoke/template-project.mjs +311 -0
- package/template/_lpk/README.md +6 -3
- package/template/_lpk/gui-vnc.manifest.yml.in +0 -9
- package/template/_lpk/hello-vue.manifest.yml.in +38 -0
- package/template/_lpk/manifest.yml.in +0 -9
- package/template/_lpk/package.yml.in +7 -0
- package/template/_lpk/todolist-golang.manifest.yml.in +23 -9
- package/template/_lpk/todolist-java.manifest.yml.in +23 -9
- package/template/_lpk/todolist-python.manifest.yml.in +31 -9
- package/template/_lpk/todolist-serverless.manifest.yml.in +38 -0
- package/template/blank/lzc-build.dev.yml +4 -0
- package/template/blank/lzc-build.yml +0 -2
- package/template/blank/lzc-manifest.yml +3 -12
- package/template/blank/package.yml +7 -0
- package/template/golang/Dockerfile +1 -1
- package/template/golang/Dockerfile.dev +20 -0
- package/template/golang/README.md +22 -11
- package/template/golang/_lzcdevignore +21 -0
- package/template/golang/lzc-build.dev.yml +12 -0
- package/template/golang/lzc-build.yml +0 -5
- package/template/golang/main.go +1 -1
- package/template/golang/manifest.dev.page.js +24 -0
- package/template/golang/run.sh +7 -0
- package/template/gui-vnc/README.md +5 -1
- package/template/gui-vnc/lzc-build.dev.yml +4 -0
- package/template/gui-vnc/lzc-build.yml +0 -5
- package/template/python/Dockerfile +2 -2
- package/template/python/Dockerfile.dev +18 -0
- package/template/python/README.md +28 -11
- package/template/python/_lzcdevignore +21 -0
- package/template/python/app.py +1 -1
- package/template/python/lzc-build.dev.yml +12 -0
- package/template/python/lzc-build.yml +0 -5
- package/template/python/manifest.dev.page.js +25 -0
- package/template/python/run.sh +12 -1
- package/template/springboot/Dockerfile +1 -1
- package/template/springboot/Dockerfile.dev +20 -0
- package/template/springboot/README.md +22 -11
- package/template/springboot/_lzcdevignore +21 -0
- package/template/springboot/lzc-build.dev.yml +12 -0
- package/template/springboot/lzc-build.yml +0 -5
- package/template/springboot/manifest.dev.page.js +24 -0
- package/template/springboot/run.sh +7 -0
- package/template/vue/README.md +14 -27
- package/template/vue/_gitignore +0 -1
- package/template/vue/lzc-build.dev.yml +7 -0
- package/template/vue/lzc-build.yml +0 -2
- package/template/vue/manifest.dev.page.js +50 -0
- package/template/vue/src/App.vue +1 -1
- package/template/vue-minidb/README.md +11 -19
- package/template/vue-minidb/_gitignore +0 -1
- package/template/vue-minidb/lzc-build.dev.yml +7 -0
- package/template/vue-minidb/lzc-build.yml +0 -2
- package/template/vue-minidb/manifest.dev.page.js +50 -0
- package/template/blank/_gitignore +0 -1
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ npm install -g @lazycatcloud/lzc-cli
|
|
|
14
14
|
lzc-cli completion >> ~/.zshrc
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
下面开始使用 `lzc-cli`
|
|
17
|
+
下面开始使用 `lzc-cli` 去创建一个项目吧。
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
20
|
# 在新目录创建项目(交互选择模板)
|
|
@@ -23,24 +23,63 @@ lzc-cli project create you_project
|
|
|
23
23
|
# 在当前目录初始化空白项目
|
|
24
24
|
lzc-cli project create --in-place
|
|
25
25
|
|
|
26
|
-
#
|
|
27
|
-
lzc-cli project
|
|
26
|
+
# 部署开发态项目(优先使用 lzc-build.dev.yml)
|
|
27
|
+
lzc-cli project deploy
|
|
28
28
|
|
|
29
|
-
#
|
|
30
|
-
lzc-cli
|
|
29
|
+
# 查看当前部署信息与 Target URL
|
|
30
|
+
lzc-cli project info
|
|
31
31
|
|
|
32
|
-
#
|
|
33
|
-
lzc-cli project
|
|
32
|
+
# 持续同步本地代码到真实运行环境
|
|
33
|
+
lzc-cli project sync --watch
|
|
34
34
|
|
|
35
35
|
# 进入运行容器调试
|
|
36
36
|
lzc-cli project exec /bin/sh
|
|
37
37
|
|
|
38
|
+
# 构建 release lpk 包(使用 lzc-build.yml)
|
|
39
|
+
lzc-cli project release
|
|
40
|
+
|
|
41
|
+
# 将 lpk 包安装到盒子中去
|
|
42
|
+
lzc-cli lpk install
|
|
43
|
+
|
|
38
44
|
# 经过测试后,将包发布到懒猫云商店中去
|
|
39
45
|
lzc-cli appstore publish
|
|
40
46
|
```
|
|
41
47
|
|
|
48
|
+
补充说明:
|
|
49
|
+
|
|
50
|
+
1. 只要项目里存在 `lzc-build.dev.yml`,`project deploy/info/start/exec/cp/log/sync` 默认都会优先使用它。
|
|
51
|
+
2. 所有 `project` 命令都会打印当前实际使用的 `Build config`。
|
|
52
|
+
3. 如需显式操作 release,请加 `--release`。
|
|
53
|
+
4. 前端模板建议先 `project deploy` 并打开应用,再根据页面提示执行 `npm run dev`。
|
|
54
|
+
5. 后端模板建议先打开应用,再根据页面提示执行 `project sync --watch` 与容器内进程启动。
|
|
55
|
+
6. `project create` 生成的新项目会默认包含 `lzc-manifest.yml` 与 `package.yml`;静态包元数据不再写在 manifest 顶层。
|
|
56
|
+
|
|
42
57
|
[changelog](./changelog.md)
|
|
43
58
|
|
|
59
|
+
#### images 本地构建
|
|
60
|
+
|
|
61
|
+
`lzc-build.yml:images.<alias>.builder` 支持两种模式:
|
|
62
|
+
|
|
63
|
+
1. `remote`:默认值。在微服上的 developer tools 中构建镜像。
|
|
64
|
+
2. `local`:在开发机本地构建镜像,再上传给 developer tools 生成最终的 `images/` 与 `images.lock`。
|
|
65
|
+
|
|
66
|
+
示例:
|
|
67
|
+
|
|
68
|
+
```yml
|
|
69
|
+
images:
|
|
70
|
+
app-runtime:
|
|
71
|
+
builder: local
|
|
72
|
+
dockerfile: ./images/Dockerfile
|
|
73
|
+
context: ./images
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
说明:
|
|
77
|
+
|
|
78
|
+
1. `builder=local` 的目标平台会自动从当前目标微服获取,例如 `linux/amd64`。
|
|
79
|
+
2. `builder=local` 依赖开发机本地可用的 Docker/buildx 兼容命令。
|
|
80
|
+
3. 基础镜像需要开发机自己能够拉取;如果当前网络环境有限制,建议显式使用可访问的镜像地址。
|
|
81
|
+
4. `upstream-match` 对 `builder=remote` 与 `builder=local` 都生效;`builder=local` 会优先读取本地构建器元数据,必要时再根据 Dockerfile 的最终基底镜像推导上游层。
|
|
82
|
+
|
|
44
83
|
#### box add-by-ssh 远端直连模式
|
|
45
84
|
|
|
46
85
|
当运行环境无法使用 `hclient` 时,可通过 `box add-by-ssh` 配置远端 ssh 目标,由 `lzc-cli` 直连 `lzcos ssh` 并在远端执行 debug bridge 命令。
|
package/changelog.md
CHANGED
|
@@ -1,52 +1,89 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 2.0.0-pre.0
|
|
3
|
+
## [2.0.0-pre.2](https://gitee.com/linakesi/lzc-cli/compare/v2.0.0-pre.1...v2.0.0-pre.2) (2026-03-12)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
### Bug Fixes
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
- publish the current LPK v2 preview through the `lpkv2` dist-tag
|
|
8
|
+
|
|
9
|
+
## [2.0.0-pre.1](https://gitee.com/linakesi/lzc-cli/compare/v1.3.17...v2.0.0-pre.1) (2026-03-11)
|
|
10
|
+
|
|
11
|
+
### Features
|
|
8
12
|
|
|
13
|
+
- add the LPK v2 project workflow with `project deploy`, `project start`, `project exec`, `project log`, `project cp`, and `project sync`
|
|
14
|
+
- refresh `project create` templates for request inject based frontend and backend development
|
|
15
|
+
- add dev id sync support during `project deploy` for remote development routing
|
|
9
16
|
|
|
10
17
|
### Bug Fixes
|
|
11
18
|
|
|
12
|
-
|
|
19
|
+
- restore old cli devshell compatibility with current developer tools backend
|
|
20
|
+
- refine `project exec` and deploy behavior in dev mode
|
|
21
|
+
- load Vue devtools only in serve mode
|
|
13
22
|
|
|
23
|
+
## [1.3.17](https://gitee.com/linakesi/lzc-cli/compare/v1.3.15...v1.3.17) (2026-03-03)
|
|
14
24
|
|
|
15
|
-
### Features
|
|
16
25
|
|
|
17
|
-
|
|
26
|
+
### Bug Fixes
|
|
18
27
|
|
|
19
|
-
|
|
28
|
+
* dealing with the error prompt of creating a new app ([6069b28](https://gitee.com/linakesi/lzc-cli/commits/6069b282027c7a6ddbcde45a0ff26156e6745030))
|
|
29
|
+
* playground site url ([5afd2ec](https://gitee.com/linakesi/lzc-cli/commits/5afd2ec5edd8aee51579add5daed3ccaabc4650f))
|
|
30
|
+
* submit the app file size ([7dffe90](https://gitee.com/linakesi/lzc-cli/commits/7dffe90b4a18f6f4b8afd8ace23c836d7fba17a7))
|
|
20
31
|
|
|
32
|
+
## [1.3.16](https://gitee.com/linakesi/lzc-cli/compare/v1.3.13...v1.3.16) (2026-02-28)
|
|
33
|
+
|
|
34
|
+
### Bug Fixes
|
|
35
|
+
|
|
36
|
+
- dealing with the i18n difference escape problem ([2b98cdf](https://gitee.com/linakesi/lzc-cli/commits/2b98cdf0573a1537bee409079d6160da1b7cd80b))
|
|
37
|
+
- disable i18next support notice output ([f433c88](https://gitee.com/linakesi/lzc-cli/commits/f433c88e9a2434c9cff303c088fa39d33bf59309))
|
|
38
|
+
- playground site url ([5afd2ec](https://gitee.com/linakesi/lzc-cli/commits/5afd2ec5edd8aee51579add5daed3ccaabc4650f))
|
|
21
39
|
|
|
22
40
|
### Features
|
|
23
41
|
|
|
24
|
-
|
|
25
|
-
* add i18n config ([185418d](https://gitee.com/linakesi/lzc-cli/commits/185418d5e77858d55fca485ff115191c0c95834e))
|
|
26
|
-
* some copywriters provide i18n calls ([54d92f1](https://gitee.com/linakesi/lzc-cli/commits/54d92f17520e6413d735c82d57d3aa3404410add))
|
|
42
|
+
- cmd publish add `changelog-files` option ([17d95c6](https://gitee.com/linakesi/lzc-cli/commits/17d95c6fa761f25af234946dedd3d6a0503ba962))
|
|
27
43
|
|
|
28
|
-
## [1.3.
|
|
44
|
+
## [1.3.15](https://gitee.com/linakesi/lzc-cli/compare/v1.3.14...v1.3.15) (2026-02-26)
|
|
29
45
|
|
|
46
|
+
### Bug Fixes
|
|
47
|
+
|
|
48
|
+
- disable i18next support notice output ([f433c88](https://gitee.com/linakesi/lzc-cli/commits/f433c88e9a2434c9cff303c088fa39d33bf59309))
|
|
49
|
+
|
|
50
|
+
## [1.3.14](https://gitee.com/linakesi/lzc-cli/compare/v1.3.13...v1.3.14) (2025-12-17)
|
|
30
51
|
|
|
31
52
|
### Bug Fixes
|
|
32
53
|
|
|
33
|
-
|
|
34
|
-
|
|
54
|
+
- dealing with the i18n difference escape problem ([2b98cdf](https://gitee.com/linakesi/lzc-cli/commits/2b98cdf0573a1537bee409079d6160da1b7cd80b))
|
|
55
|
+
|
|
56
|
+
### Features
|
|
35
57
|
|
|
58
|
+
- cmd publish add `changelog-files` option ([17d95c6](https://gitee.com/linakesi/lzc-cli/commits/17d95c6fa761f25af234946dedd3d6a0503ba962))
|
|
59
|
+
|
|
60
|
+
## [1.3.13](https://gitee.com/linakesi/lzc-cli/compare/v1.3.12...v1.3.13) (2025-12-10)
|
|
36
61
|
|
|
37
62
|
### Features
|
|
38
63
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
64
|
+
- add i18n ([f62c52a](https://gitee.com/linakesi/lzc-cli/commits/f62c52a9b443d2226ffa06d17593f1912b9dc4de))
|
|
65
|
+
- add i18n config ([185418d](https://gitee.com/linakesi/lzc-cli/commits/185418d5e77858d55fca485ff115191c0c95834e))
|
|
66
|
+
- some copywriters provide i18n calls ([54d92f1](https://gitee.com/linakesi/lzc-cli/commits/54d92f17520e6413d735c82d57d3aa3404410add))
|
|
42
67
|
|
|
43
|
-
## [1.3.
|
|
68
|
+
## [1.3.12](https://gitee.com/linakesi/lzc-cli/compare/v1.3.11...v1.3.12) (2025-10-29)
|
|
44
69
|
|
|
70
|
+
### Bug Fixes
|
|
71
|
+
|
|
72
|
+
- ci friendly publish command ([1e7b477](https://gitee.com/linakesi/lzc-cli/commits/1e7b47740f1d9ae15d677a16a97d7cc461814c42))
|
|
73
|
+
- pre publish print error ([55c8326](https://gitee.com/linakesi/lzc-cli/commits/55c832625aa532bab3e0fcf0d7ec09d8235db190))
|
|
74
|
+
|
|
75
|
+
### Features
|
|
76
|
+
|
|
77
|
+
- add `LZC_CLI_CHECK_DNS_RESOLVE` set check dev tools to use built-in dns resolution ([78ba39e](https://gitee.com/linakesi/lzc-cli/commits/78ba39e6869cbed956141e7ff7812ce3718e41ce))
|
|
78
|
+
- supports config the language key for publish app update logs through `--clang` ([e06eec8](https://gitee.com/linakesi/lzc-cli/commits/e06eec88f11827816ddd4e3a7ccd43b2883a1003))
|
|
79
|
+
- uninstall app add `--delete-data` parameter ([b4378f7](https://gitee.com/linakesi/lzc-cli/commits/b4378f77b528fbb5b5a1c74771ddda9f60f4e49a))
|
|
80
|
+
|
|
81
|
+
## [1.3.11](https://gitee.com/linakesi/lzc-cli/compare/v1.3.10...v1.3.11) (2025-10-10)
|
|
45
82
|
|
|
46
83
|
### Features
|
|
47
84
|
|
|
48
|
-
|
|
49
|
-
|
|
85
|
+
- support setting token through environment variables ([4a25f84](https://gitee.com/linakesi/lzc-cli/commits/4a25f84fe4df938cb3d85f6391e27772dae5b071))
|
|
86
|
+
- the copy-image command adds the `trace-level` parameter ([cd4d4c3](https://gitee.com/linakesi/lzc-cli/commits/cd4d4c351d4bd43bffcfe5f67087c6bffd65d3f4))
|
|
50
87
|
|
|
51
88
|
## [1.3.10](https://gitee.com/linakesi/lzc-cli/compare/v0.0.8...v1.3.10) (2025-08-15)
|
|
52
89
|
|
package/lib/app/apkshell.js
CHANGED
|
@@ -1,45 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
import logger from 'loglevel';
|
|
3
|
-
import axios from 'axios';
|
|
4
|
-
import { t } from '../i18n/index.js';
|
|
1
|
+
import { triggerApk as triggerApkFunc } from '../appstore/apkshell.js';
|
|
5
2
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
(error) => {
|
|
13
|
-
if (error.response && error.response.status === 304) {
|
|
14
|
-
return Promise.resolve(error.response); // 返回响应以便后续处理
|
|
15
|
-
}
|
|
16
|
-
return Promise.reject(error); // 其他错误继续抛出
|
|
17
|
-
},
|
|
18
|
-
);
|
|
19
|
-
|
|
20
|
-
export async function triggerApk(id, name, iconPath) {
|
|
21
|
-
if (!id) {
|
|
22
|
-
logger.error(t('lzc_cli.lib.app.apkshell.trigger_apk_empty_appid', 'Appid 为必填项!'));
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
name = name || t('lzc_cli.lib.app.apkshell.trigger_apk_default_app_name', '懒猫应用');
|
|
26
|
-
try {
|
|
27
|
-
const form = new FormData();
|
|
28
|
-
form.append('app_id', id);
|
|
29
|
-
form.append('app_name', name);
|
|
30
|
-
if (iconPath) {
|
|
31
|
-
form.append('app_icon', new Blob([fs.readFileSync(iconPath)]));
|
|
32
|
-
}
|
|
33
|
-
const resp = await api.post('https://appstore.api.lazycat.cloud/api/trigger_latest_for_app', form, { timeout: 5000 });
|
|
34
|
-
if (resp.status == 304) {
|
|
35
|
-
logger.debug(t('lzc_cli.lib.app.apkshell.trigger_apk_build_tips', `APK构建任务已创建成功,如需使用安卓端,请耐心等待1分钟左右`));
|
|
36
|
-
} else if (resp.status <= 201) {
|
|
37
|
-
logger.info(t('lzc_cli.lib.app.apkshell.trigger_apk_build_ok_tips', `APK构建任务已创建成功,如需使用安卓端,请耐心等待1分钟左右`));
|
|
38
|
-
} else if (resp.status >= 400) {
|
|
39
|
-
logger.debug(t('lzc_cli.lib.app.apkshell.trigger_apk_build_failed', '请求按钮应用出错:'), resp);
|
|
40
|
-
throw t('lzc_cli.lib.app.apkshell.trigger_apk_build_failed_tips', `请求生成应用出错! 使用 --apk=n 停止生成APK`);
|
|
41
|
-
}
|
|
42
|
-
} catch (error) {
|
|
43
|
-
logger.debug(error);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated use appstore/apk.js triggerApk
|
|
5
|
+
* @return {*}
|
|
6
|
+
*/
|
|
7
|
+
const triggerApk = triggerApkFunc;
|
|
8
|
+
export { triggerApk };
|
package/lib/app/index.js
CHANGED
|
@@ -8,6 +8,7 @@ import { projectLogCommand } from './project_log.js';
|
|
|
8
8
|
import { projectInfoCommand } from './project_info.js';
|
|
9
9
|
import { projectStartCommand } from './project_start.js';
|
|
10
10
|
import { projectDeployCommand } from './project_deploy.js';
|
|
11
|
+
import { projectSyncCommand } from './project_sync.js';
|
|
11
12
|
import { LpkInstaller, installConfig } from './lpk_installer.js';
|
|
12
13
|
import logger from 'loglevel';
|
|
13
14
|
import { sleep, checkRsync } from '../utils.js';
|
|
@@ -113,7 +114,7 @@ export function lpkProjectCommand(program) {
|
|
|
113
114
|
return;
|
|
114
115
|
}
|
|
115
116
|
|
|
116
|
-
throw new Error('
|
|
117
|
+
throw new Error('Missing project directory name. Use "lzc-cli project create <name>" to create a new project, or "lzc-cli project create --in-place" to initialize the current directory.');
|
|
117
118
|
},
|
|
118
119
|
},
|
|
119
120
|
{
|
|
@@ -134,6 +135,7 @@ export function lpkProjectCommand(program) {
|
|
|
134
135
|
},
|
|
135
136
|
handler: async ({ context, output, file }) => {
|
|
136
137
|
const lpk = await new LpkBuild(context, file).init();
|
|
138
|
+
logger.info(`Build config: ${lpk.optionsFilePath}`);
|
|
137
139
|
// 正常的打包逻辑不需要 devshell
|
|
138
140
|
lpk.onBeforeBuildPackage(async (options) => {
|
|
139
141
|
delete options['devshell'];
|
|
@@ -164,6 +166,7 @@ export function lpkProjectCommand(program) {
|
|
|
164
166
|
handler: async ({ context, output, file }) => {
|
|
165
167
|
const cwd = context ? path.resolve(context) : process.cwd();
|
|
166
168
|
const configPath = resolveProjectReleaseConfigPath(cwd, file);
|
|
169
|
+
logger.info(`Build config: ${configPath}`);
|
|
167
170
|
const projectCwd = path.dirname(configPath);
|
|
168
171
|
const configName = path.basename(configPath);
|
|
169
172
|
const lpk = await new LpkBuild(projectCwd, configName).init();
|
|
@@ -253,6 +256,7 @@ export function lpkProjectCommand(program) {
|
|
|
253
256
|
projectInfoCommand(),
|
|
254
257
|
projectStartCommand(),
|
|
255
258
|
projectDeployCommand(),
|
|
259
|
+
projectSyncCommand(),
|
|
256
260
|
];
|
|
257
261
|
program.command({
|
|
258
262
|
command: 'project',
|