@manohub/app-kit 0.2.0 → 0.2.1
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/package.json +2 -2
- package/skills/install.mjs +22 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@manohub/app-kit",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "子应用统一骨架层:入口编排(createSubApp)、布局契约(AppShell)、页面组件、原子件、服务、样式底座。farris 被收敛在本包内部,对外只暴露标准 API。",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
61
|
"@farris/ui-vue": "^1.8.4",
|
|
62
|
-
"@manohub/icon": "^0.2.
|
|
62
|
+
"@manohub/icon": "^0.2.1"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
65
|
"@tanstack/vue-query": "catalog:",
|
package/skills/install.mjs
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* 做故障注入测试(一个对坏输入不报警的安装器等于没有安装器),落盘动作只在直接执行时发生。
|
|
18
18
|
* 4. 只复制**技能目录**,跳过本文件与 `README.md`(那是给包维护者看的),也不复制 `__tests__`。
|
|
19
19
|
*/
|
|
20
|
-
import { cpSync, existsSync, mkdirSync, readdirSync, rmSync, statSync } from 'node:fs'
|
|
20
|
+
import { cpSync, existsSync, mkdirSync, readdirSync, realpathSync, rmSync, statSync } from 'node:fs'
|
|
21
21
|
import { basename, dirname, isAbsolute, join, resolve } from 'node:path'
|
|
22
22
|
import { fileURLToPath, pathToFileURL } from 'node:url'
|
|
23
23
|
|
|
@@ -140,6 +140,26 @@ export function applyInstall(plan, { dryRun = false } = {}) {
|
|
|
140
140
|
return results
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
+
/**
|
|
144
|
+
* 是否「被直接执行」(而非被 `import`)。
|
|
145
|
+
*
|
|
146
|
+
* **必须比对 realpath**:pnpm 把包实体放在 `node_modules/.pnpm/<pkg>@<ver>/...`,
|
|
147
|
+
* 消费方引用的是软链路径 `node_modules/@manohub/app-kit/...`;Node 解析 ESM 时会取真实路径,
|
|
148
|
+
* 于是 `import.meta.url` 与 `process.argv[1]` 字面不等 —— 直接比较会让安装器**静默不执行**
|
|
149
|
+
* (真实踩过:在 pnpm 消费方里跑安装器零输出、技能也没落盘,而这正是最主要的使用场景)。
|
|
150
|
+
*
|
|
151
|
+
* `realpath` 可注入,便于单测覆盖「软链」「路径不存在」两种输入。
|
|
152
|
+
*/
|
|
153
|
+
export function isDirectRun(argv1, moduleUrl, realpath = (p) => realpathSync(p)) {
|
|
154
|
+
if (!argv1) return false
|
|
155
|
+
if (moduleUrl === pathToFileURL(argv1).href) return true
|
|
156
|
+
try {
|
|
157
|
+
return moduleUrl === pathToFileURL(realpath(argv1)).href
|
|
158
|
+
} catch {
|
|
159
|
+
return false
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
143
163
|
export function usage() {
|
|
144
164
|
return [
|
|
145
165
|
'把 @manohub/app-kit 随包的 AI 技能安装到本工程的技能目录。',
|
|
@@ -197,7 +217,6 @@ async function main() {
|
|
|
197
217
|
}
|
|
198
218
|
|
|
199
219
|
// 仅在被直接执行时落盘;被测试 import 时只取纯函数
|
|
200
|
-
|
|
201
|
-
if (isDirectRun) {
|
|
220
|
+
if (isDirectRun(process.argv[1], import.meta.url)) {
|
|
202
221
|
await main()
|
|
203
222
|
}
|