Просмотр исходного кода

refactor: 技能完全自包含,使用自己的依赖管理

- 技能添加 package.json,管理自己的 miniprogram-ci 依赖
- 修复脚本路径,从技能目录正确找到项目根目录
- 更新 references/config.md 说明新的架构和安装步骤
- 技能现在完全符合 skill-creator 规范

使用方式:
1. 首次使用:cd .claude/skills/weapp-publish && npm install
2. 发布:pnpm run publish:enterprise

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname 13 часов назад
Родитель
Сommit
5b38c9c885

+ 9 - 0
.claude/skills/weapp-publish/package.json

@@ -0,0 +1,9 @@
+{
+  "name": "weapp-publish-skill",
+  "version": "1.0.0",
+  "description": "WeChat mini-program publishing skill",
+  "type": "commonjs",
+  "dependencies": {
+    "miniprogram-ci": "^2.1.26"
+  }
+}

+ 33 - 18
.claude/skills/weapp-publish/references/config.md

@@ -9,19 +9,32 @@
 
 ---
 
-## 项目结
+## 技能架
 
 ```
-项目根目录/
+.claude/skills/weapp-publish/
+├── package.json          # 技能依赖
+├── node_modules/         # 技能依赖安装目录
+├── SKILL.md             # 技能说明
 ├── scripts/
-│   └── publish-weapp.js       # 实际被调用的发布脚本
-├── mini/                      # 企业小程序源码
-│   └── certs/
-│       └── private.upload.key # 企业小程序上传密钥
-├── mini-talent/               # 人才小程序源码
-│   └── certs/
-│       └── private.upload.key # 人才小程序上传密钥
-└── package.json               # 包含发布命令
+│   └── publish-weapp.js # 发布脚本
+└── references/          # 参考文档
+    ├── config.md
+    ├── faq.md
+    └── usage.md
+```
+
+**技能是自包含的**,有自己的依赖管理。
+
+---
+
+## 安装技能依赖
+
+首次使用或更新依赖时,在技能目录安装:
+
+```bash
+cd .claude/skills/weapp-publish
+pnpm install
 ```
 
 ---
@@ -33,10 +46,10 @@
 ```json
 {
   "scripts": {
-    "publish:enterprise": "node scripts/publish-weapp.js enterprise experience",
-    "publish:enterprise:dev": "node scripts/publish-weapp.js enterprise dev",
-    "publish:talent": "node scripts/publish-weapp.js talent experience",
-    "publish:talent:dev": "node scripts/publish-weapp.js talent dev"
+    "publish:enterprise": "node .claude/skills/weapp-publish/scripts/publish-weapp.js enterprise experience",
+    "publish:enterprise:dev": "node .claude/skills/weapp-publish/scripts/publish-weapp.js enterprise dev",
+    "publish:talent": "node .claude/skills/weapp-publish/scripts/publish-weapp.js talent experience",
+    "publish:talent:dev": "node .claude/skills/weapp-publish/scripts/publish-weapp.js talent dev"
   }
 }
 ```
@@ -56,6 +69,9 @@ DESC=新增订单管理功能
 
 # CI 机器人编号 (1-30)
 ROBOT=1
+
+# 公网访问域名(可选,用于预览二维码 URL)
+WEB_HOST=example.com
 ```
 
 使用方式:
@@ -67,14 +83,13 @@ VERSION=1.2.0 DESC="新增功能" pnpm run publish:enterprise
 
 ## 发布前准备
 
-### 1. 全局安装 miniprogram-ci
+### 1. 安装技能依赖
 
 ```bash
-npm install -g miniprogram-ci
+cd .claude/skills/weapp-publish
+pnpm install
 ```
 
-> **注意**: miniprogram-ci 应作为全局工具安装,而非项目依赖。
-
 ### 2. 获取上传密钥
 
 使用小程序管理员身份访问"微信公众平台 > 开发 > 开发设置",下载代码上传密钥。

+ 9 - 6
.claude/skills/weapp-publish/scripts/publish-weapp.js

@@ -7,21 +7,24 @@ const fs = require('fs')
 const WEB_HOST = process.env.WEB_HOST || 'localhost:8080'
 const PUBLIC_HOST = WEB_HOST.startsWith('http') ? WEB_HOST : `https://${WEB_HOST}`
 
+// 项目根目录(从 scripts/ 目录向上 4 级)
+const PROJECT_ROOT = path.resolve(__dirname, '../../../../')
+
 // 小程序配置
 const MINI_CONFIGS = {
   enterprise: {
     name: '企业小程序',
     appid: 'wx1e791ed2e0229eb8',
-    projectPath: path.resolve(__dirname, '../mini/dist/weapp/production'),
-    privateKeyPath: path.resolve(__dirname, '../mini/certs/private.upload.key'),
+    projectPath: path.resolve(PROJECT_ROOT, 'mini/dist/weapp/production'),
+    privateKeyPath: path.resolve(PROJECT_ROOT, 'mini/certs/private.upload.key'),
     buildCmd: 'cd mini && pnpm build:weapp',
     distPath: 'dist/weapp',
   },
   talent: {
     name: '人才小程序',
     appid: 'wx3c47dbce1ea7d43c',
-    projectPath: path.resolve(__dirname, '../mini-talent/dist/weapp/production'),
-    privateKeyPath: path.resolve(__dirname, '../mini-talent/certs/private.upload.key'),
+    projectPath: path.resolve(PROJECT_ROOT, 'mini-talent/dist/weapp/production'),
+    privateKeyPath: path.resolve(PROJECT_ROOT, 'mini-talent/certs/private.upload.key'),
     buildCmd: 'cd mini-talent && pnpm build:weapp',
     distPath: 'dist/weapp',
   },
@@ -33,7 +36,7 @@ const MINI_CONFIGS = {
 function buildMiniProject(config) {
   console.log(`\n🔨 正在构建 ${config.name}...`)
   try {
-    execSync(config.buildCmd, { stdio: 'inherit' })
+    execSync(config.buildCmd, { stdio: 'inherit', cwd: PROJECT_ROOT, shell: true })
     console.log(`✅ ${config.name} 构建完成`)
   } catch (error) {
     console.error(`❌ ${config.name} 构建失败`)
@@ -107,7 +110,7 @@ async function previewDevProject(config, options) {
   })
 
   // 二维码保存目录
-  const qrcodeDir = path.resolve(__dirname, '../web/public/qrcode')
+  const qrcodeDir = path.resolve(PROJECT_ROOT, 'web/public/qrcode')
   const qrcodeFileName = `qrcode-${config.appid}.jpg`
   const qrcodePath = path.join(qrcodeDir, qrcodeFileName)
 

+ 4 - 4
package.json

@@ -64,10 +64,10 @@
     "test:e2e:debug": "cd web && pnpm test:e2e:debug",
     "test:e2e:report": "cd web && pnpm exec playwright show-report",
     "prepare": "husky",
-    "publish:enterprise": "node .claude/skills/weapp-publish/scripts/publish-weapp.js enterprise experience",
-    "publish:enterprise:dev": "node .claude/skills/weapp-publish/scripts/publish-weapp.js enterprise dev",
-    "publish:talent": "node .claude/skills/weapp-publish/scripts/publish-weapp.js talent experience",
-    "publish:talent:dev": "node .claude/skills/weapp-publish/scripts/publish-weapp.js talent dev"
+    "publish:enterprise": "cd .claude/skills/weapp-publish && node scripts/publish-weapp.js enterprise experience",
+    "publish:enterprise:dev": "cd .claude/skills/weapp-publish && node scripts/publish-weapp.js enterprise dev",
+    "publish:talent": "cd .claude/skills/weapp-publish && node scripts/publish-weapp.js talent experience",
+    "publish:talent:dev": "cd .claude/skills/weapp-publish && node scripts/publish-weapp.js talent dev"
   },
   "keywords": [],
   "author": "",