{"_id":"@aicblock/nserve","_rev":"5-7e900de0337b61d1e275fd23a5ee55c8","name":"@aicblock/nserve","dist-tags":{"latest":"1.0.4"},"versions":{"1.0.0":{"name":"@aicblock/nserve","version":"1.0.0","keywords":["serve-cli","node-server"],"author":{"name":"jieyang;damon yang"},"license":"MIT","_id":"@aicblock/nserve@1.0.0","maintainers":[{"name":"aicdyangj","email":"yangj@aicblock.cn"}],"bin":{"nserve":"lib/commander.js"},"dist":{"shasum":"89f2aaa2c4a24bd43faa4451c27082cba63b0242","tarball":"https://registry.npmjs.org/@aicblock/nserve/-/nserve-1.0.0.tgz","fileCount":10,"integrity":"sha512-A0EJwMtg3LUSBzJQQNP6R4qwGBO0XvhgOqSUWpfcWunfBMLi+1BfKBlXpEX/RVtFVYLfUZNR4XZXT4wid0q+gA==","signatures":[{"sig":"MEYCIQDP4z7Cru+qA0yvmxaZqkdJwUAsP/bh/yso1wYrKUYY0gIhAIRli+ApU5ZnFfVwD42VRL1leYDdHChyjdSRIsdGaUJr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28495},"main":"lib/index.js","husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS,"}},"types":"./lib/index.d.ts","gitHead":"0fab07837a61ba6f317f11df616755c2890c120d","scripts":{"dev":"ts-node ./script/dev.ts","test":"jest --coverage","package":"ts-node ./script/build.ts","prepare":"husky install"},"_npmUser":{"name":"aicdyangj","email":"yangj@aicblock.cn"},"repository":{"url":"https://gitee.com/aiclouddigit/nserve.git","type":"git"},"_npmVersion":"10.9.2","description":"🛠️ Description NodeJS Server-side development CLI","directories":{},"_nodeVersion":"22.16.0","dependencies":{"yaml":"2.8.2","esbuild":"0.27.2","express":"5.2.1","js-yaml":"4.1.1","commander":"14.0.2","@dpapejs/emysql":"1.2.7"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.0.11","ts-jest":"29.1.5","ts-node":"^10.9.2","typescript":"5.5.3","@types/jest":"^29.5.12","@types/node":"^16.4.10","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@commitlint/cli":"19.3.0","@dpapejs/node-utils":"^0.1.0","@commitlint/config-conventional":"19.2.2"},"_npmOperationalInternal":{"tmp":"tmp/nserve_1.0.0_1767082893268_0.6152928146280918","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aicblock/nserve","version":"1.0.1","keywords":["serve-cli","node-server"],"author":{"name":"jieyang;damon yang"},"license":"MIT","_id":"@aicblock/nserve@1.0.1","maintainers":[{"name":"aicdyangj","email":"yangj@aicblock.cn"}],"homepage":"http://nserve.aicblock.cn/","bin":{"nserve":"lib/commander.js"},"dist":{"shasum":"54a99e10889422063f997abf8afac56053e5d35e","tarball":"https://registry.npmjs.org/@aicblock/nserve/-/nserve-1.0.1.tgz","fileCount":10,"integrity":"sha512-+XB/Wn1RWgUQZnOeSMz1VG1ZcfedgynxgTUwe7svFNKdmh03bt0QSQvTN2ikO1gVNL9eH7MSfT08vAfI23E3fA==","signatures":[{"sig":"MEQCIA0byBP304qGTeHrUu8gXjpcAjCk/fhpKSjOodMDuxeAAiAYzkH8sQzaNYLTnYMF+jS+nSI3/O8xPYckWNWCevbsdQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41042},"main":"lib/index.js","husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS,"}},"types":"./lib/index.d.ts","gitHead":"c1dad4f25ace4bbbf0aebd3aee054b1d46e9a68b","scripts":{"dev":"ts-node ./script/dev.ts","test":"jest --coverage","package":"ts-node ./script/build.ts","prepare":"husky install"},"_npmUser":{"name":"aicdyangj","email":"yangj@aicblock.cn"},"repository":{"url":"https://gitee.com/aiclouddigit/nserve.git","type":"git"},"_npmVersion":"10.9.2","description":"🛠️ Description NodeJS Server-side development CLI","directories":{},"_nodeVersion":"22.16.0","dependencies":{"yaml":"2.8.2","esbuild":"0.27.2","express":"5.2.1","js-yaml":"4.1.1","prettier":"3.7.4","commander":"14.0.2","@dpapejs/emysql":"1.2.7"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.0.11","ts-jest":"29.1.5","ts-node":"^10.9.2","typescript":"5.5.3","@types/jest":"^29.5.12","@types/node":"^16.4.10","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@commitlint/cli":"19.3.0","@dpapejs/node-utils":"^0.1.0","@commitlint/config-conventional":"19.2.2"},"_npmOperationalInternal":{"tmp":"tmp/nserve_1.0.1_1768193802081_0.12494062643985515","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aicblock/nserve","version":"1.0.2","keywords":["serve-cli","node-server"],"author":{"name":"jieyang;damon yang"},"license":"MIT","_id":"@aicblock/nserve@1.0.2","maintainers":[{"name":"aicdyangj","email":"yangj@aicblock.cn"}],"homepage":"http://nserve.aicblock.cn/","bin":{"nserve":"lib/commander.js"},"dist":{"shasum":"480cddc71dbe56959bce28cece8628a4985a2a1c","tarball":"https://registry.npmjs.org/@aicblock/nserve/-/nserve-1.0.2.tgz","fileCount":10,"integrity":"sha512-z866ab2gXOiuEX7X3tE/5yphuGv5E0EvTtqRTeXRAqd6lGXdDuVTX21IuN3LBjVu7M84b+ue4i8eeBLj3pwJXg==","signatures":[{"sig":"MEUCIQCVkRIm2zZrYvNhsD9VJ2tNM1XXmZf0jD76+N0j/Sn4mwIgHzjn4IduwPaF/Xu/A0OVVoLzitviQDp1ggfvP1q1Oc8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43829},"main":"lib/index.js","husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS,"}},"types":"./lib/index.d.ts","gitHead":"94548e8a765bd3fa75509b57401cb09d6c868b71","scripts":{"dev":"ts-node ./script/dev.ts","test":"jest --coverage","package":"ts-node ./script/build.ts","prepare":"husky install"},"_npmUser":{"name":"aicdyangj","email":"yangj@aicblock.cn"},"repository":{"url":"https://gitee.com/aiclouddigit/nserve.git","type":"git"},"_npmVersion":"10.9.2","description":"🛠️ Description NodeJS Server-side development CLI","directories":{},"_nodeVersion":"22.16.0","dependencies":{"yaml":"2.8.2","esbuild":"0.27.2","express":"5.2.1","js-yaml":"4.1.1","prettier":"3.7.4","commander":"14.0.2","@dpapejs/emysql":"1.2.7"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.0.11","ts-jest":"29.1.5","ts-node":"^10.9.2","typescript":"5.5.3","@types/jest":"^29.5.12","@types/node":"^16.4.10","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@commitlint/cli":"19.3.0","@dpapejs/node-utils":"^0.1.0","@commitlint/config-conventional":"19.2.2"},"_npmOperationalInternal":{"tmp":"tmp/nserve_1.0.2_1768439369289_0.8105246496433549","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@aicblock/nserve","version":"1.0.3","keywords":["serve-cli","node-server"],"author":{"name":"jieyang;damon yang"},"license":"MIT","_id":"@aicblock/nserve@1.0.3","maintainers":[{"name":"aicdyangj","email":"yangj@aicblock.cn"}],"homepage":"http://nserve.aicblock.cn/","bin":{"nserve":"lib/commander.js"},"dist":{"shasum":"63a5858455b776242024a5de86908fc6dcabf37f","tarball":"https://registry.npmjs.org/@aicblock/nserve/-/nserve-1.0.3.tgz","fileCount":10,"integrity":"sha512-3sXvbtLjCFbxwvL7kpxQ92q2yw5nqMQLQRovO0fgn0efZu90hxYUGpEQl/Hucq7fVG20J1LR/EN0y2TiQuAhBg==","signatures":[{"sig":"MEQCIGAlc0YOAZ2bBOPCEKIbUf9Q1yZ0+5pi7Di1j/Fdmv7kAiBI2pafPce64ZiCLlJp8H4bhDBIySy3aaINhGoe+pBnXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44003},"main":"lib/index.js","husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS,"}},"types":"./lib/index.d.ts","gitHead":"dec306f8b7c4ab5b3232f3040f0b04641b6ac634","scripts":{"dev":"ts-node ./script/dev.ts","test":"jest --coverage","package":"ts-node ./script/build.ts","prepare":"husky install"},"_npmUser":{"name":"aicdyangj","email":"yangj@aicblock.cn"},"repository":{"url":"https://gitee.com/aiclouddigit/nserve.git","type":"git"},"_npmVersion":"10.9.2","description":"🛠️ Description NodeJS Server-side development CLI","directories":{},"_nodeVersion":"22.16.0","dependencies":{"yaml":"2.8.2","esbuild":"0.27.2","express":"5.2.1","js-yaml":"4.1.1","prettier":"3.7.4","commander":"14.0.2","@aicblock/emysql":"^1.3.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","husky":"9.0.11","ts-jest":"29.1.5","ts-node":"^10.9.2","typescript":"5.5.3","@types/jest":"^29.5.12","@types/node":"^16.4.10","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@commitlint/cli":"19.3.0","@dpapejs/node-utils":"^0.1.0","@commitlint/config-conventional":"19.2.2"},"_npmOperationalInternal":{"tmp":"tmp/nserve_1.0.3_1768789519425_0.698697671219197","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@aicblock/nserve","version":"1.0.4","description":"🛠️ Description NodeJS Server-side development CLI","main":"lib/index.js","scripts":{"dev":"ts-node ./script/dev.ts","package":"ts-node ./script/build.ts","prepare":"husky install","test":"jest --coverage"},"keywords":["serve-cli","node-server"],"homepage":"http://nserve.aicblock.cn/","bin":{"nserve":"lib/commander.js"},"repository":{"type":"git","url":"https://gitee.com/aiclouddigit/nserve.git"},"author":{"name":"jieyang;damon yang"},"license":"MIT","devDependencies":{"@commitlint/cli":"19.3.0","@commitlint/config-conventional":"19.2.2","@dpapejs/node-utils":"^0.1.0","@types/express":"^5.0.6","@types/jest":"^29.5.12","@types/js-yaml":"^4.0.9","@types/node":"^16.4.10","husky":"9.0.11","jest":"29.7.0","ts-jest":"29.1.5","ts-node":"^10.9.2","typescript":"5.5.3"},"husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS,"}},"dependencies":{"@aicblock/esql":"^2.0.0","commander":"14.0.2","esbuild":"0.27.2","express":"5.2.1","js-yaml":"4.1.1","prettier":"3.7.4","yaml":"2.8.2"},"_id":"@aicblock/nserve@1.0.4","gitHead":"711ab2404f0d5a1e928a733195c44f2d40e005aa","types":"./lib/index.d.ts","_nodeVersion":"22.16.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-FXRsWSmmmGQRZvPHLlP0atMC3qDJOVIanjz08QQhHWS1txqhIgvr8pz3e40gfnn/Tn0qEA8PAsLykCQTmPo0Rw==","shasum":"eda99aa05facbd57f46efc96fd536d309bd84c3c","tarball":"https://registry.npmjs.org/@aicblock/nserve/-/nserve-1.0.4.tgz","fileCount":10,"unpackedSize":48945,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHADX82gXKz8gAO7eWq24e4VdBCM7RFDj86S1U6TpLFoAiEAjV6V2aXTQybFz6yl6+pJdtTxvfXGCq9TLZ07p96sEwY="}]},"_npmUser":{"name":"aicdyangj","email":"yangj@aicblock.cn"},"directories":{},"maintainers":[{"name":"aicdyangj","email":"yangj@aicblock.cn"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nserve_1.0.4_1776357593804_0.7479060744414516"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-30T08:21:33.137Z","modified":"2026-04-16T16:39:54.074Z","1.0.0":"2025-12-30T08:21:33.406Z","1.0.1":"2026-01-12T04:56:42.226Z","1.0.2":"2026-01-15T01:09:29.440Z","1.0.3":"2026-01-19T02:25:19.583Z","1.0.4":"2026-04-16T16:39:53.952Z"},"author":{"name":"jieyang;damon yang"},"license":"MIT","homepage":"http://nserve.aicblock.cn/","keywords":["serve-cli","node-server"],"repository":{"type":"git","url":"https://gitee.com/aiclouddigit/nserve.git"},"description":"🛠️ Description NodeJS Server-side development CLI","maintainers":[{"name":"aicdyangj","email":"yangj@aicblock.cn"}],"readme":"# @aicblock/nserve\n\n![npm](https://img.shields.io/npm/v/@aicblock/nserve)\n![npm](https://img.shields.io/npm/dm/@aicblock/nserve)\n![NPM](https://img.shields.io/npm/l/@aicblock/nserve)\n\n# NServe 用户使用文档\n\n## 1. 项目简介\n\nNServe 是一个 Node.js 服务器端开发 CLI 工具，旨在简化 Node.js 服务器应用的开发、构建和部署流程。它提供了代码生成、热重载开发服务器和项目构建等功能，帮助开发者快速搭建和维护 Node.js 服务器应用。\n\n## 2. 快速开始\n\n您可以使用以下命令创建一个新的 NServe 项目：\n\n#### 使用 NPM:\n\n```sh\n$ npm create nserve@latest\n```\n\n#### 使用 Yarn:\n\n```sh\n$ yarn create nserve@latest\n```\n\n#### 使用 PNPM:\n\n```sh\n$ pnpm create nserve@latest\n```\n\n## 3. 核心功能\n\n### 3.1 命令行接口\n\nNServe 提供了三个主要命令：\n\n- `nserve serve` - 启动开发服务器\n- `nserve build` - 构建项目\n- `nserve gen` - 根据配置文件生成代码\n\n### 3.2 代码生成\n\n- **路由生成**：根据配置文件自动生成 Express 路由\n- **模型生成**：从 SQL CREATE TABLE 语句生成数据模型\n\n### 3.3 开发服务器\n\n- 支持 TypeScript 实时编译\n- 热重载功能\n- 支持环境变量配置\n\n### 3.4 项目构建\n\n- 使用 esbuild 进行快速构建\n- 支持生产环境优化\n- 生成可执行的 JavaScript 代码\n\n## 4. 配置文件\n\n### 4.1 基本配置\n\n在项目根目录创建 `nserve.config.ts` 文件：\n\n```typescript\nimport { DefineNserveConfig } from '@aicblock/nserve'\n\nexport default DefineNserveConfig({\n  entry: 'app.ts', // 应用入口文件\n  outputDir: 'dist', // 构建输出目录\n  sourceDir: 'src', // 源代码目录\n  testing: false, // 是否为测试模式\n  yamlConfig: {}, // YAML 配置文件内容\n  plugins: [], // 自定义插件\n  external: [], // 外部依赖\n  generateConfig: {\n    genDir: 'nserve-config', // 生成配置目录\n    routerDir: 'router', // 路由配置目录\n    modelDir: 'model', // 模型配置目录\n    codePrettier: {\n      semi: false, // 是否使用分号\n      singleQuote: true, // 是否使用单引号\n      trailingComma: 'none' // 尾随逗号配置\n    },\n    middleware: {} // 中间件配置\n  }\n})\n```\n\n### 4.2 路由配置\n\n在 `nserve-config/router` 目录下创建路由配置文件，例如 `user.ts`：\n\n```typescript\nimport { DefineGenRouter } from '@aicblock/nserve'\n\nexport default DefineGenRouter({\n  servicePath: '/api/user', // 路由前缀\n  serviceHandler: 'user', // 处理逻辑目录\n  routers: [\n    {\n      path: '/list', // 路由路径\n      method: 'GET', // HTTP 方法\n      name: 'list', // 处理函数名\n      middleware: [] // 路由级中间件\n    },\n    {\n      path: '/create',\n      method: 'POST',\n      name: 'create',\n      session: {\n        /* session 配置 */\n      }\n    }\n  ],\n  middleware: ['auth'] // 全局中间件\n})\n```\n\n### 4.3 模型配置\n\n在 `nserve-config/model` 目录下创建 SQL 文件，例如 `user.sql`：\n\n```sql\nCREATE TABLE `user` (\n  `id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',\n  `username` VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',\n  `password` VARCHAR(255) NOT NULL COMMENT '密码',\n  `email` VARCHAR(100) NOT NULL UNIQUE COMMENT '邮箱',\n  `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;\n```\n\n## 5. 命令使用\n\n### 5.1 启动开发服务器\n\n```bash\nnserve serve\n```\n\n选项：\n\n- `--mode <mode>` - 指定运行模式（development/production）\n- `--config <path>` - 指定配置文件路径\n\n### 5.2 构建项目\n\n```bash\nnserve build\n```\n\n选项：\n\n- `--mode <mode>` - 指定构建模式（development/production）\n- `--config <path>` - 指定配置文件路径\n\n### 5.3 生成代码\n\n```bash\nnserve gen\n```\n\n选项：\n\n- `--config <path>` - 指定配置文件路径\n\n## 6. 项目结构\n\n```\nproject/\n├── src/                      # 源代码目录\n│   ├── handler/             # 路由处理器\n│   ├── logic/               # 业务逻辑\n│   ├── model/               # 数据模型\n│   └── app.ts               # 应用入口\n├── nserve-config/           # 生成配置目录\n│   ├── router/              # 路由配置\n│   └── model/               # 模型 SQL 文件\n├── nserve.config.ts         # NServe 配置文件\n└── package.json             # 项目配置\n└── tsconfig.json             # TypeScript 配置文件\n```\n\n## 7. 路由生成流程\n\n1. 创建路由配置文件 `nserve-config/router/*.ts`\n2. 运行 `nserve gen` 命令\n3. NServe 会自动生成：\n   - 路由处理器文件 `src/handler/*.handler.ts`\n   - 业务逻辑模板文件 `src/logic/*/*.logic.ts`\n   - 路由注册文件 `src/handler/router.ts`\n\n## 8. 模型生成流程\n\n1. 创建 SQL 文件 `nserve-config/model/*.sql`\n2. 运行 `nserve gen` 命令\n3. NServe 会自动生成：\n   - 数据模型文件 `src/model/*.ts`\n   - 模型索引文件 `src/model/index.ts`\n\n## 9. 环境变量\n\nNServe 支持 `.env` 文件和环境特定的配置文件（如 `.env.development`、`.env.production`）。\n\n示例 `.env` 文件：\n\n```\n# yamlConfig 配置\nYAML_CONFIG.APP_CONFIG.PORT=3000\nYAML_CONFIG.MYSQL_CONF.host=localhost\nYAML_CONFIG.MYSQL_CONF.port=3306\nYAML_CONFIG.MYSQL_CONF.user=root\nYAML_CONFIG.MYSQL_CONF.password=password\nYAML_CONFIG.MYSQL_CONF.database=test\n\n# NServe 配置\nAICBLOCK_NSERVE_APP_ENTRY=app.ts\n```\n\n## 10. 中间件配置\n\n在 `nserve.config.ts` 中配置全局中间件：\n\n```typescript\nexport default DefineNserveConfig({\n  generateConfig: {\n    middleware: {\n      auth: {\n        libName: '@/middleware/auth',\n        funcName: 'authMiddleware'\n      }\n    }\n  }\n})\n```\n\n在路由配置中使用中间件：\n\n```typescript\nexport default DefineGenRouter({\n  routers: [\n    {\n      path: '/protected',\n      method: 'GET',\n      name: 'protected',\n      middleware: ['auth']\n    }\n  ]\n})\n```\n\n## 11. 高级功能\n\n### 11.1 自定义插件\n\nNServe 支持自定义 esbuild 插件：\n\n```typescript\nexport default DefineNserveConfig({\n  plugins: [\n    {\n      name: 'custom-plugin',\n      setup(build) {\n        // 插件逻辑\n      }\n    }\n  ]\n})\n```\n\n### 11.2 类型定义\n\nNServe 提供了完整的 TypeScript 类型定义，可以在项目中直接使用：\n\n```typescript\nimport type { Config, DefineGenRouterConfig } from '@aicblock/nserve'\n```\n\n## 12. 最佳实践\n\n### 12.1 项目组织\n\n- 将路由和业务逻辑分离\n- 使用模型层抽象数据库操作\n- 为不同功能模块创建独立的路由配置文件\n\n### 12.2 开发流程\n\n1. 创建项目结构\n2. 配置 `nserve.config.ts`\n3. 编写路由配置文件\n4. 编写 SQL 模型文件\n5. 运行 `nserve gen` 生成代码框架\n6. 实现业务逻辑\n7. 使用 `nserve serve` 启动开发服务器进行测试\n8. 使用 `nserve build` 构建生产版本\n\n## 13. 常见问题\n\n### 13.1 端口被占用\n\n如果开发服务器端口被占用，可以在 `.env` 文件中修改 PORT 配置：\n\n```\nPORT=3001\n```\n\n### 13.2 热重载不生效\n\n确保：\n\n- 源代码目录配置正确\n- 入口文件存在且配置正确\n- 没有语法错误\n\n### 13.3 构建失败\n\n检查：\n\n- TypeScript 语法错误\n- 依赖是否安装正确\n- 配置文件是否正确\n\n## 15. 贡献\n\n欢迎提交 Issue 和 Pull Request 来改进 NServe。\n","readmeFilename":"README.md"}