当前位置: 首页 > news >正文

发布 npm 包完整指南(含账号注册、发布撤销与注意事项)

发布一个 npm 包,可以让你分享自己的工具库、组件库、脚手架等给全世界或团队内部使用。本文将带你从 0 到 1 完成一个 npm 包的发布流程,包括账号注册、版本控制、发布命令,以及撤回方法和实用建议。


🧰 发布前准备

在发布前,请确保你具备以下环境和账号:

  • ✅ 安装了 Node.js(推荐 LTS 版本)
  • ✅ 已切换至 npm 官方源(默认即是)
  • ✅ 拥有一个 npm 账号
# 确保使用官方源(默认一般已经是)
npm config set registry https://registry.npmjs.org/

🧾 一、注册 npm 账号(推荐使用网页注册

npm 官方推荐使用网页方式进行注册,并完成邮箱验证。

✅ 网页注册步骤:

  1. 打开 https://www.npmjs.com/signup
  2. 输入用户名、邮箱、密码
  3. 通过邮箱验证,注册完成

npm adduser 虽然也可以尝试注册新账号,但经常因未验证邮箱而导致发布失败,不推荐!


🔐 二、登录 npm 账号

注册成功后,在命令行中登录你的 npm 账号:

npm login

依次输入:

  • Username
  • Password
  • Email(用于接收验证和通知)

如果你使用了组织作用域(如 @your-org/xxx),确保你登录的是该组织有权限的账号。


🏗️ 三、准备并配置你的包

1. 初始化项目

mkdir my-utils && cd my-utils
npm init -y

2. 修改 package.json

{"name": "@your-scope/utils",       // 建议使用 scoped 包名(避免全局冲突)"version": "1.0.0","description": "A useful utility library","main": "dist/index.js",           // 构建输出主入口"types": "dist/index.d.ts",        // TypeScript 类型声明"files": ["dist"],                 // 指定发布哪些文件夹"author": "aiyvyang","license": "MIT","repository": {"type": "git","url": "https://github.com/yourname/utils.git"}
}

3. 构建输出文件

使用 tsupviterollup 等构建工具:

pnpm add -D tsup typescript
npx tsup src/index.ts --format esm,cjs --dts

✅ 确保 dist/ 中包含构建后的 JS 和 d.ts 文件


🚀 四、发布包到 npm

1. 每次发布都必须更新版本号

遵循 Semver 语义化版本号 规范:

类型示例说明
Patch 修复1.0.0 → 1.0.1修复 bug,不影响 API
Minor 新增1.0.0 → 1.1.0新功能,无破坏性
Major 破坏1.0.0 → 2.0.0有破坏性改动

2. 发布命令(scoped 包需声明公开访问)

npm publish --access public

📌 若不加 --access public,scoped 包默认是私有的,非企业账户将报错 402


🛑 五、撤销已发布的包(24 小时内有效)

1. 撤销整个包(慎用)

npm unpublish your-package-name --force

🚨 警告:慎用 --force,一旦撤销整个包名,未来不能再使用!

2. 撤销指定版本(推荐)

npm unpublish your-package-name@1.0.0

📌 常见问题与发布建议

问题原因/解决方式
403 Forbidden包名已存在 / 没有权限 → 换包名或确认是否你是原作者
402 Payment Requiredscoped 包默认私有 → 添加 --access public
Cannot publish over version当前版本已存在 → 更新 version 字段(不可覆盖旧版本)
发布后未生效忘记构建或未包含构建文件 → 确保 dist 文件夹存在 & files 字段设置正确

⚙️ Bonus:配置自动发布(GitHub Actions)

可以使用 GitHub Actions 实现打 tag 自动发布 npm 包:

# .github/workflows/release.yml
name: Releaseon:push:tags:- 'v*'jobs:release:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- uses: actions/setup-node@v3with:node-version: 20registry-url: 'https://registry.npmjs.org/'- run: npm install- run: npm run build- run: npm publish --access publicenv:NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

在仓库设置里添加 NPM_TOKEN,生成方法见:npm access tokens


✅ 总结

发布 npm 包的流程并不复杂,但关键是「规范 + 自动化」:

  • ✅ 官网注册账号 + 命令行登录
  • ✅ 使用 scoped 包名防止冲突
  • ✅ 遵循语义化版本发布
  • ✅ 配合构建工具输出生产可用代码
  • ✅ 可接入 GitHub Actions 自动发布
http://www.lryc.cn/news/574553.html

相关文章:

  • 【云计算】云测试
  • 成交量流动策略
  • Unity3D仿星露谷物语开发70之背景音乐
  • 软件测试报告机构如何保障软件质量与安全性?作用有哪些?
  • 使用 PyFluent 自动化 CFD
  • 用 Python 打造立体数据世界:3D 堆叠条形图绘制全解析
  • 【Pandas】pandas DataFrame update
  • 华为云Flexus+DeepSeek征文 | 华为云MaaS平台上的智能客服Agent开发:多渠道融合应用案例
  • 《C++初阶之类和对象》【初始化列表 + 自定义类型转换 + static成员】
  • 在 centos7部署kubephere
  • TortoiseSVN 安装教程
  • prometheus+grafana+MySQL监控
  • 云原生周刊:Argo CD v3.1 正式发布
  • 工程优化——WebSocket、WSS(WebSocket Secure)和SSE(Server-Sent Events)通信对比
  • Jenkins+Jmeter+Ant接口持续集成
  • 【人工智能agent】--dify实现文档内容的自动抽取
  • 论文阅读:2025 arxiv Qwen3 Technical Report
  • 【论文阅读 | CVPRW 2023 |CSSA :基于通道切换和空间注意力的多模态目标检测】
  • 【AI时代速通QT】第三节:Linux环境中安装QT并做测试调试
  • Starrocks 低基数全局字典优化
  • 【Vue】 keep-alive缓存组件实战指南
  • Dify携手代理商奇墨科技:加快企业AI应用构建
  • FTP原理、安装部署与案例应用全面指南
  • Unity3D下的RTSP/RTMP超低延迟直播播放器实践:跨平台、高性能与VR全景支持的完整解析
  • 创建首个 Spring Boot 登录项目
  • DD3118S:USB3.0+Type-c双头TF/SD二合一高速0TG多功能手机读卡器ic
  • 76、单元测试-参数化测试
  • 做上门私厨/上门做饭App小程序,到底是定制开发,还是选成品系统?
  • 随机森林详解:原理、优势与应用实践
  • 【空间数据分析】全局莫兰指数(Global Moran’s I)