CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Node.js 进阶/课时/创建与发布包
RawBlame
课时目录12 节

Node.js 进阶

  1. 01Node 进阶概览
  2. 02EventEmitter
  3. 03错误类型与处理
  4. 04语义化版本
  5. 05创建与发布包
  6. 06命令行应用
  7. 07Inquirer 与 prompts
  8. 08chokidar 与热重载
  9. 09模板引擎
  10. 10Node 与数据库
  11. 11glob 与文件模式
  12. 12综合练习

创建与发布包

creating-packages、npm publish。

35 分钟

创建与发布包

把可复用逻辑做成 npm 包:正确 package.json、入口导出、files 白名单与 npm publish。内部工具包与开源包流程相同,差别在 registry 与 nva-semver 纪律。

学习目标

  • 搭建可发布的包目录结构(ESM)
  • 配置 exports、bin 与 files
  • 了解 publish 前检查与版本 bump

最小可发布包

my-utils/
  package.json
  src/index.js
  README.md
{
  "name": "@codermap/my-utils",
  "version": "0.1.0",
  "type": "module",
  "exports": {
    ".": "./src/index.js"
  },
  "files": ["src", "README.md"],
  "engines": { "node": ">=20" }
}

files 控制 tarball 内容——避免把测试、草稿 markdown 发上去。

本地开发与链接

npm pack          # 生成 .tgz,检查体积与内容
npm link          # 全局 link
cd ../consumer && npm link @codermap/my-utils

在 nodejs-essentials 项目里验证 import 路径与类型(若写 .d.ts)。

CLI 包:bin 字段

{
  "bin": {
    "my-import": "./bin/my-import.js"
  }
}
#!/usr/bin/env node
import { main } from "../src/cli.js";
main().catch((err) => {
  console.error(err.message);
  process.exit(1);
});

shebang + 可执行权限;细节在 nva-cli。

发布流程

1. npm login(或 CI token)
2. npm test(见 testing-essentials)
3. npm version patch|minor|major
4. npm publish --access public   # scoped 包默认 private
5. git push --follow-tags

禁止 把 .env、npm token 写进仓库;CI 用 secret 注入。

与 Nest monorepo 的关系

业务 API 在 nestjs-essentials 应用内;跨项目共享 的纯函数、CLI 才抽成包。数据库 migration 脚本可独立包,驱动用法见 nva-db。

练习

  • npm pack 后解压 .tgz,确认无多余文件
  • 为包写 2 个 用例
node-test
  • 起草 README:安装、API、与 postgresql-essentials 无强依赖说明
  • 小结

    exports 定入口,files 控体积,version 随 semver 走。 下一课专讲命令行应用 stdin/stdout。

    加载本节练习…
    ← 上一课语义化版本下一课 →命令行应用