使用 npm 发布一个包

199 阅读2分钟

1. 准备工作

1.1 创建 npm 账号

  • 访问 npm 官网 注册账号。
  • 验证邮箱(必须完成验证才能发布包)。

1.2 本地登录 npm

在终端执行:

npm login

按提示输入:

  • Username: 你的 npm 用户名
  • Password: 密码(输入时不可见)
  • Email: 注册时绑定的邮箱

登录成功后会提示:Logged in as <username> on https://registry.npmjs.org/.

1.3 初始化项目

创建一个空目录,并初始化 package.json

mkdir my-package
cd my-package
npm init -y

根据需要修改 package.json 中的字段(如 nameversiondescriptionmain 等)。


2. 编写包代码

2.1 核心代码

  • 在项目中编写功能代码(如 index.js)。
  • 入口文件需与 package.json 中的 main 字段一致(默认 index.js)。

2.2 添加必要文件

  • README.md: 包的说明文档(必备)。
  • LICENSE: 开源协议(可选但推荐)。
  • tests/: 单元测试(可选但推荐)。

3. 配置 package.json

确保以下字段正确:

{
  "name": "my-package",   // 包名(全局唯一,需检查是否已被占用)
  "version": "1.0.0",     // 版本号(遵循语义化版本规范)
  "description": "A demo package",
  "main": "index.js",     // 入口文件
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "keywords": ["demo", "example"],
  "author": "Your Name",
  "license": "MIT"
}

关键注意事项

  • 包名规则:小写字母、数字、连字符(-),不能有空格或特殊符号。

  • 版本号规则主版本号.次版本号.修订号(如 1.2.3)。

  • 唯一性检查

    npm view <package-name>
    

    若返回 404 表示包名可用,否则需修改包名。


4. 发布包

4.1 执行发布命令

在项目根目录运行:

npm publish

成功后会提示:+ my-package@1.0.0

4.2 发布范围包(Scoped Package)

若使用组织或私有包,需在 package.json 中添加 scope

{
  "name": "@my-org/my-package",
  "version": "1.0.0"
}

发布时需指定访问权限:

npm publish --access public   # 公开 Scoped 包

5. 更新包版本

5.1 手动修改版本号

直接修改 package.json 中的 version 字段(如 1.0.1)。

5.2 使用 npm version 命令

自动更新版本并生成 Git Tag:

npm version patch   # 1.0.0 → 1.0.1
npm version minor   # 1.0.1 → 1.1.0
npm version major   # 1.1.0 → 2.0.0

更新后重新发布:

npm publish

6. 撤销已发布的版本

6.1 快速撤销(24小时内)

npm unpublish <package-name>@<version> --force

6.2 弃用某个版本

npm deprecate <package-name>@<version> "Deprecated due to critical bug"

7. 常见问题与解决方案

7.1 包名已存在

  • 修改 package.json 中的 name 字段,尝试其他名称。

7.2 未登录或权限不足

  • 重新登录:npm login
  • 检查账号是否为包所有者。

7.3 发布内容包含敏感文件

  • 添加 .npmignore 文件(类似 .gitignore),或使用 files 字段指定要包含的文件:

    {
      "files": ["dist", "index.js"]
    }
    

7.4 检查发布内容(模拟发布)

npm publish --dry-run

完整流程示例

# 1. 初始化项目
mkdir my-package
cd my-package
npm init -y

# 2. 编写代码
echo "console.log('Hello World!');" > index.js

# 3. 登录 npm
npm login

# 4. 发布
npm publish

# 5. 更新版本并重新发布
npm version patch
npm publish