{"_id":"@chesszyh/my-awesome-cli","_rev":"3-230e8bc54ad3949a83ec13a331f27a92","name":"@chesszyh/my-awesome-cli","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@chesszyh/my-awesome-cli","version":"1.0.0","keywords":["cli","typescript","npx","learning"],"author":{"name":"chesszyh987@gmail.com"},"license":"MIT","_id":"@chesszyh/my-awesome-cli@1.0.0","maintainers":[{"name":"chesszyh","email":"chesszyh987@gmail.com"}],"bin":{"my-awesome-cli":"dist/cli.js"},"dist":{"shasum":"20ebe5437bdf1e9abd224afee032aaf2935b8f6e","tarball":"https://registry.npmjs.org/@chesszyh/my-awesome-cli/-/my-awesome-cli-1.0.0.tgz","fileCount":11,"integrity":"sha512-O07Dy1tuPje6PvryogTTrI/Bogi58YWfdEpFH96kHXJlpMYFD7b1UdDWroUAswjiVXevJ5d+M9lFIAXWV10ZYg==","signatures":[{"sig":"MEYCIQC4Ll+KCIdKhSid/+/qBULOjlzoXqSLd1NEBkmm5Ihu5wIhAPni5x34XWu+sLIsLmRcr9hb401CUraBbHWBhaXpg6CD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13410},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=14.0.0"},"gitHead":"3a3e89e2290bf1a5884a6aa504ca67b355ba5782","scripts":{"dev":"npm run build && node dist/cli.js","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","release":"standard-version","lint:fix":"eslint src/**/*.ts --fix","build:watch":"tsc --watch","prepublishOnly":"npm run build","release:github":"gh release create v$npm_package_version --title \"Release v$npm_package_version\" --notes \"Release notes for v$npm_package_version\" --attach dist.tar.gz"},"_npmUser":{"name":"chesszyh","email":"chesszyh987@gmail.com"},"_npmVersion":"10.9.2","description":"一个学习 NPX 打包发布流程的示例 CLI 工具","directories":{},"_nodeVersion":"22.17.1","dependencies":{"chalk":"^4.1.2","commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","standard-version":"^9.5.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/my-awesome-cli_1.0.0_1754828761338_0.2222318331093227","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@chesszyh/my-awesome-cli","version":"1.0.1","keywords":["cli","typescript","npx","learning"],"author":{"name":"chesszyh987@gmail.com"},"license":"MIT","_id":"@chesszyh/my-awesome-cli@1.0.1","maintainers":[{"name":"chesszyh","email":"chesszyh987@gmail.com"}],"bin":{"my-awesome-cli":"dist/cli.js"},"dist":{"shasum":"cc046604678887abed8fa2aa8d405f4e72268d8c","tarball":"https://registry.npmjs.org/@chesszyh/my-awesome-cli/-/my-awesome-cli-1.0.1.tgz","fileCount":11,"integrity":"sha512-31bV6s3sL6q9VC24znrWuM7EoX03BtAe6U0TfxoOEasf0Sxm0BH8dT88rI06ozzcpiXL3i0Wv3Ve1ebsNX4MHQ==","signatures":[{"sig":"MEYCIQCe+UBAyaAwlY+/sUB3APsnQxTufUeM4nHvYT15aUkEnQIhAOfp6XdAE5JG/owxpK4nkxPll/y28JWUiSUgOd/Za87/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13572},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=14.0.0"},"gitHead":"109d81356194f43f71fe2ebff3e9a4bb0d9a50ab","scripts":{"dev":"npm run build && node dist/cli.js","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","release":"standard-version","lint:fix":"eslint src/**/*.ts --fix","build:watch":"tsc --watch","prepublishOnly":"npm run build","release:github":"gh release create v$npm_package_version --title \"Release v$npm_package_version\" --notes \"Release notes for v$npm_package_version\" --attach dist.tar.gz"},"_npmUser":{"name":"chesszyh","email":"chesszyh987@gmail.com"},"_npmVersion":"10.8.2","description":"一个学习 NPX 打包发布流程的示例 CLI 工具","directories":{},"_nodeVersion":"18.20.8","dependencies":{"chalk":"^4.1.2","commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","standard-version":"^9.5.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/my-awesome-cli_1.0.1_1754830766022_0.42451683931673134","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@chesszyh/my-awesome-cli","version":"1.0.2","description":"一个学习 NPX 打包发布流程的示例 CLI 工具","main":"dist/index.js","bin":{"my-awesome-cli":"dist/cli.js"},"scripts":{"build":"tsc","build:watch":"tsc --watch","dev":"npm run build && node dist/cli.js","test":"jest","lint":"eslint src/**/*.ts","lint:fix":"eslint src/**/*.ts --fix","prepublishOnly":"npm run build","release":"standard-version","release:github":"gh release create v$npm_package_version --title \"Release v$npm_package_version\" --notes \"Release notes for v$npm_package_version\" --attach dist.tar.gz"},"keywords":["cli","typescript","npx","learning"],"author":{"name":"chesszyh987@gmail.com"},"license":"MIT","engines":{"node":">=14.0.0"},"devDependencies":{"@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.0.0","jest":"^29.0.0","standard-version":"^9.5.0","ts-jest":"^29.0.0","typescript":"^5.0.0"},"dependencies":{"commander":"^11.0.0","chalk":"^4.1.2"},"publishConfig":{"access":"public"},"_id":"@chesszyh/my-awesome-cli@1.0.2","gitHead":"2ff86a42334aebea63c152fc94f8c3bde68a247a","types":"./dist/index.d.ts","_nodeVersion":"18.20.8","_npmVersion":"10.8.2","dist":{"integrity":"sha512-zPBqCmVv4WXfc3EEXw+C4ML1jW2XfUPfpxvzFOJwA2A1eU6WvvvR2/WR5F4SQ/0Rc7IQ0gpP6zxvqV1irgR8sQ==","shasum":"5b5183169e89e462f843abaee7ff2de8071fa341","tarball":"https://registry.npmjs.org/@chesszyh/my-awesome-cli/-/my-awesome-cli-1.0.2.tgz","fileCount":11,"unpackedSize":13572,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDEA7IRgYbLqWoKZmpqnvygqxg0dSLDFNc/I4EyqMNKDgIgRt8TqaWZ0T294Tr2IOuThvr2tVe781gENRNoNENIxko="}]},"_npmUser":{"name":"chesszyh","email":"chesszyh987@gmail.com"},"directories":{},"maintainers":[{"name":"chesszyh","email":"chesszyh987@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/my-awesome-cli_1.0.2_1754831091941_0.23074236615552635"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-10T12:26:01.180Z","modified":"2025-08-10T13:04:52.349Z","1.0.0":"2025-08-10T12:26:01.549Z","1.0.1":"2025-08-10T12:59:26.309Z","1.0.2":"2025-08-10T13:04:52.159Z"},"author":{"name":"chesszyh987@gmail.com"},"license":"MIT","keywords":["cli","typescript","npx","learning"],"description":"一个学习 NPX 打包发布流程的示例 CLI 工具","maintainers":[{"name":"chesszyh","email":"chesszyh987@gmail.com"}],"readme":"# My Awesome CLI - NPX 打包发布学习项目\n\n这是一个完整的 NPX 包开发和发布学习项目，演示了从 TypeScript 开发到最终发布的完整流程。\n\n## 🎯 学习目标\n\n1. **TypeScript 构建** - 使用 tsc 编译 TypeScript 代码\n2. **NPM 包发布** - 将包发布到 NPM registry \n3. **GitHub Release** - 创建带有捆绑资源的 GitHub 发布版本\n4. **CI/CD 流程** - 自动化构建、测试和发布\n\n## 🚀 快速开始\n\n### 安装依赖\n\n```bash\nnpm install\n```\n\n### 开发模式\n\n```bash\n# 构建项目\nnpm run build\n\n# 监听模式构建\nnpm run build:watch\n\n# 运行 CLI（开发模式）\nnpm run dev\n\n# 运行测试\nnpm test\n\n# 代码检查\nnpm run lint\n\n# 修复代码风格问题\nnpm run lint:fix\n```\n\n### 本地测试\n\n```bash\n# 构建项目\nnpm run build\n\n# 全局链接（用于本地测试）\nnpm link\n\n# 测试 CLI 命令\n@chesszyh/my-awesome-cli hello --name \"TypeScript\"\n@chesszyh/my-awesome-cli info\n@chesszyh/my-awesome-cli demo\n\n# 取消全局链接\nnpm unlink -g @chesszyh/my-awesome-cli\n```\n\n## 📦 项目结构\n\n```\nnpx-release/\n├── src/                    # 源代码目录\n│   ├── cli.ts             # CLI 入口文件\n│   ├── index.ts           # 主要导出文件\n│   └── __tests__/         # 测试文件\n├── dist/                  # 编译输出目录（构建后生成）\n├── .github/               # GitHub 配置\n│   ├── workflows/         # GitHub Actions 工作流\n│   │   ├── ci.yml        # 持续集成\n│   │   └── release.yml   # 发布工作流\n│   └── copilot-instructions.md\n├── package.json           # 包配置文件\n├── tsconfig.json          # TypeScript 配置\n├── jest.config.js         # Jest 测试配置\n├── .eslintrc.js          # ESLint 配置\n├── .gitignore            # Git 忽略文件\n└── README.md             # 项目文档\n```\n\n## 🔧 CLI 功能\n\n该 CLI 工具提供以下命令：\n\n### `hello` - 打印问候信息\n```bash\nnpx @chesszyh/my-awesome-cli hello\nnpx @chesszyh/my-awesome-cli hello --name \"Your Name\"\n```\n\n### `info` - 显示系统信息\n```bash\nnpx @chesszyh/my-awesome-cli info\n```\n\n### `demo` - 演示 CLI 功能\n```bash\nnpx @chesszyh/my-awesome-cli demo\n```\n\n## 📋 发布流程\n\n### 1. 本地准备\n\n1. **代码开发**：在 `src/` 目录下编写 TypeScript 代码\n2. **运行测试**：确保所有测试通过\n   ```bash\n   npm test\n   ```\n3. **代码检查**：确保代码风格一致\n   ```bash\n   npm run lint\n   ```\n4. **构建项目**：编译 TypeScript\n   ```bash\n   npm run build\n   ```\n\n### 2. 版本管理\n\n使用 `standard-version` 自动管理版本：\n\n```bash\n# 创建新版本（自动更新 package.json 和 CHANGELOG）\nnpm run release\n\n# 手动指定版本类型\nnpm run release -- --release-as major    # 主版本\nnpm run release -- --release-as minor    # 次版本  \nnpm run release -- --release-as patch    # 补丁版本\n```\n\n### 3. 发布到 NPM\n\n#### 手动发布\n\n```bash\n# 登录 NPM（首次）\nnpm login\n\n# 发布包\nnpm publish\n```\n\n#### 发布到私有 registry\n\n修改 `package.json` 中的 `publishConfig`：\n\n```json\n{\n  \"publishConfig\": {\n    \"registry\": \"https://your-private-registry.com\",\n    \"access\": \"restricted\"\n  }\n}\n```\n\n### 4. 创建 GitHub Release\n\n#### 手动创建\n\n1. 推送标签到 GitHub：\n   ```bash\n   git push origin --tags\n   ```\n\n2. 在 GitHub 网页上创建 Release，或使用 GitHub CLI：\n   ```bash\n   gh release create v1.0.0 --title \"Release v1.0.0\" --notes \"Release notes\"\n   ```\n\n#### 自动化发布\n\n项目配置了 GitHub Actions 自动化工作流：\n\n1. **CI 工作流** (`.github/workflows/ci.yml`)\n   - 在推送到 `main` 分支时触发\n   - 多版本 Node.js 测试\n   - 自动运行测试和构建\n\n2. **发布工作流** (`.github/workflows/release.yml`)\n   - 在推送版本标签时触发\n   - 自动发布到 NPM\n   - 创建 GitHub Release\n   - 附加构建产物\n\n### 5. 完整发布流程示例\n\n```bash\n# 1. 开发完成，运行测试\nnpm test\n\n# 2. 创建新版本\nnpm run release\n\n# 3. 推送代码和标签\ngit push origin main --follow-tags\n\n# 4. GitHub Actions 自动处理剩余步骤：\n#    - 运行 CI 测试\n#    - 发布到 NPM\n#    - 创建 GitHub Release\n```\n\n## 🔑 环境变量配置\n\n在 GitHub 仓库的 Settings > Secrets 中配置：\n\n### 必需的 Secrets\n\n- `NPM_TOKEN`: NPM 发布令牌\n  ```bash\n  # 在本地获取 NPM token\n  npm token create\n  ```\n\n### 可选的 Secrets\n\n- `GITHUB_TOKEN`: GitHub Actions 自动提供，用于创建 Release\n\n## 🛠️ 高级配置\n\n### 自定义构建\n\n修改 `tsconfig.json` 以调整 TypeScript 编译选项：\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"ES2020\",\n    \"module\": \"commonjs\",\n    \"outDir\": \"./dist\",\n    \"strict\": true\n  }\n}\n```\n\n### 添加更多 CLI 命令\n\n在 `src/cli.ts` 中添加新的命令：\n\n```typescript\nprogram\n  .command('new-command')\n  .description('描述新命令')\n  .action(() => {\n    // 命令逻辑\n  });\n```\n\n### 自定义发布流程\n\n修改 `.github/workflows/release.yml` 以调整发布行为。\n\n## 📚 学习资源\n\n- [TypeScript 官方文档](https://www.typescriptlang.org/)\n- [Commander.js CLI 框架](https://github.com/tj/commander.js)\n- [NPM 发布指南](https://docs.npmjs.com/cli/v8/commands/npm-publish)\n- [GitHub Actions 文档](https://docs.github.com/en/actions)\n- [Semantic Versioning](https://semver.org/)\n\n## 🤝 贡献\n\n欢迎提交 Issue 和 Pull Request！\n\n## 📄 许可证\n\nMIT License - 查看 [LICENSE](LICENSE) 文件了解详情。\n","readmeFilename":"README.md"}