关于 coding-node
coding-node 是面向 Node.js 22 及更高版本服务端开发者的技能,涵盖异步编程、模块、流、包管理及常见 Web 框架。
主要功能
- 01异步编程模式
- 02支持 ECMAScript Modules
- 03使用 npm 和 pnpm 管理依赖
- 04事件循环与流处理
- 05构建 Express、Fastify 和 Hono 服务
适用场景
- 01使用 Node.js 创建 HTTP API
- 02排查事件循环阻塞
- 03以流方式处理文件
- 04使用 npm 或 pnpm 管理项目依赖
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill coding-node安装后在 Claude Code 中输入/coding-node确认已加载。
详细介绍
coding-node
用途
此技能提供 Node.js 22 及以上版本的专业知识,涵盖异步编程模式、ECMAScript 模块(ESM)、npm 和 pnpm 等包管理器、事件循环、流,以及 Express、Fastify 和 Hono 等框架。可用于指导用户构建高效、现代的服务端应用程序。
适用场景
当用户需要处理 Node.js 中的异步操作、使用 npm 或 pnpm 管理依赖项、调试事件循环问题、处理流,或使用 Express、Fastify 或 Hono 搭建 Web 服务器时,请使用此技能。它也适用于 JavaScript 环境中的后端开发任务,例如创建 API、处理文件或构建实时应用程序。
核心能力
- 异步模式:使用
async/await编写非阻塞代码;例如,async function fetchData() { const data = await fetch('url'); return data; }。 - ESM 支持:使用
import语法导入模块;例如,在扩展名为.mjs的 Node.js 22+ 文件中,或在 package.json 中设置"type": "module"后,使用import express from 'express';。 - 包管理器:使用 npm(例如,
npm install express --save)或 pnpm(例如,pnpm add fastify)管理依赖项;pnpm 支持工作区,安装速度更快。 - 事件循环:说明并优化阻塞操作;使用
process.nextTick()在下一个事件循环阶段之前安排回调。 - 流:使用 Readable、Writable 或 Transform 流分块处理数据;例如,
const fs = require('fs'); const readStream = fs.createReadStream('file.txt'); readStream.on('data', chunk => console.log(chunk));。 - 框架:使用 Express(例如,
app.use(express.json()))、Fastify(例如,fastify.get('/path', handler))或 Hono(例如,app.get('/route', c => c.text('Hello')))搭建服务器。
使用模式
要完成任务,请始终在项目设置中指定 Node.js 22+。使用 ESM 时,在 package.json 中添加 "type": "module" 并使用 import 语句。处理异步任务时,将代码放入 async 函数并使用 try-catch 块。使用 npm 时,运行 npm init -y 创建 package.json,然后安装软件包。使用 pnpm 时,通过 pnpm init 初始化,并将其作为 npm 命令的直接替代品。处理流时,直接对其进行管道传输;例如:readStream.pipe(writeStream)。使用框架时,创建 HTTP 服务器实例并定义路由;例如,使用 app.listen(3000) 启动 Express。
常用命令/API
- Npm 命令:初始化项目:
npm init -y。安装软件包:npm install express --save-prod。更新依赖项:npm update。运行脚本:在 package.json 中使用npm run start。 - Pnpm 命令:添加软件包:
pnpm add fastify。移除软件包:pnpm remove package。安装全部依赖项:pnpm install。 - API 端点:在 Express 中,定义路由,例如
app.get('/users', (req, res) => res.json(users))。在 Fastify 中,使用fastify.post('/login', async (req, reply) => { /* auth logic */ reply.send({ token: 'abc' }); })。在 Hono 中,设置:const app = new Hono(); app.get('/api/data', c => c.json({ data: 'value' }));。 - 事件循环交互:对 I/O 回调使用
setImmediate();例如,setImmediate(() => console.log('After current event loop'));。 - Streams API:创建可读流:
const { Readable } = require('stream'); const readable = Readable.from(['line1', 'line2']); readable.pipe(process.stdout);。 如果需要 API 密钥(例如,用于外部服务),请将其设为环境变量:process.env.API_KEY = 'your_key',并在命令中通过$YOUR_API_KEY访问。
集成说明
将此技能与其他工具集成时,可使用 Node.js 作为运行环境。例如,可通过 mongoose 与 MongoDB 数据库集成:使用 pnpm add mongoose 安装,然后在代码中连接:const mongoose = require('mongoose'); mongoose.connect(process.env.MONGO_URI);。使用 dotenv 管理环境变量:运行 npm install dotenv 安装,然后引入并配置:require('dotenv').config(); const key = process.env.API_KEY;。部署时,可将服务导出到 Vercel 或 Heroku 等工具;例如,在 package.json 中将 start 脚本设置为 "start": "node server.js"。在 package.json 中指定运行环境要求,以确保兼容性:"engines": { "node": ">=22" }。集成流时,可与 zlib 等模块串联以进行压缩:readStream.pipe(zlib.createGzip()).pipe(writeStream)。
错误处理
异步函数始终使用 try-catch:例如,try { const result = await someAsyncFunction(); } catch (error) { console.error(error.message); }。对于流,监听 'error' 事件:例如,readStream.on('error', err => { console.error('Stream error:', err); process.exit(1); })。在 Express 中,使用中间件处理错误:app.use((err, req, res, next) => { res.status(500).send('Server Error'); })。对于 npm/pnpm,检查退出代码:例如,在脚本中使用 if [ $? -ne 0 ]; then echo "Command failed"; fi。验证输入以防止阻塞事件循环,并使用 process.on('uncaughtException', (err) => { console.error(err); process.exit(); }) 处理未捕获的错误。
具体用法示例
- 搭建基本的 Express 服务:创建文件
server.js,内容如下:import express from 'express'; const app = express(); app.get('/', (req, res) => res.send('Hello World')); app.listen(3000, () => console.log('Server running'));。如果使用 ESM,请通过node --experimental-vm-modules server.js运行,然后访问 http://localhost:3000。 - 使用 Pnpm 处理文件流:首先安装依赖:
pnpm add fs。然后在代码中执行:const fs = require('fs'); const readStream = fs.createReadStream('input.txt'); readStream.on('data', chunk => console.log(chunk.toString())); readStream.on('end', () => console.log('Done'));。运行node script.js,即可分块读取并记录文件内容。
图关系
- 相关于:coding(同一集群),因为它们共享 JavaScript 基础知识。
- 关联到:通过
"nodejs"和"javascript"等标签与其他编码技能相连,并可能关联到前端技能以进行全栈开发。 - 集成于:与“coding”集群中的工具集成,例如数据库或部署技能,以构建端到端应用。