npm 包发布流程
lwcai

创建你的 npm 账号

在发布一个npm包之前,需要准备一个属于你的npm账号。注册地址

创建 npm 包

创建你的包文件夹

一个简单的npm包文件夹,应该包含以下部分:

├── README.md
├── lib
│   └── index.js
└── package.json

关于package.json

package.json是一个npm包中的重要文件,有了package.json文件才能将你的包发布到 npm注册表。你可以将package.json文件添加到你的包中,以方便其他人管理和安装。

通过以下命令创建package.json

npm init

以下为package.json中包含的一些常见属性:

{
"name": "my_package", // 包名称
"description": "", // 关于包的描述信息,如果包目录中包含 README.md,将已 README 为准
"version": "1.0.0", // 版本号
"main": "lib/index.js", // 项目入口文件
"files": ["lib"], // 项目中要发布的文件列表
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
}, // 可执行的脚本命令
"repository": {
"type": "git",
"url": "https://github.com/monatheoctocat/my_package.git"
}, // 仓库信息
"keywords": [], // 关键字
"author": "", // 作者
"license": "ISC", // 许可证
"bugs": {
"url": "https://github.com/monatheoctocat/my_package/issues"
}, // 项目的 bug 报告地址
"homepage": "https://github.com/monatheoctocat/my_package", // 项目的主页地址
}

关于README.md

在项目的根目录下创建README.md作为npm包的自述文件,可以帮助其他人在 npm上找到你的包并在他们的项目中使用你的代码获得良好的体验。该文件可能包含安装、配置和使用包中代码的说明,以及用户可能认为有帮助的任何其他信息。

你可以创建 README.md 文件并将其添加到包中:

  1. 在文本编辑器中,在您的包根目录中,创建一个名为 README.md 的文件
  2. 在该README.md文件中,添加有关您的包的有用信息。
  3. 保存README.md文件。

本地调试

npm包发布到线上进行调试过于繁琐,并且仅为了调试代码而频繁地发布会导致版本号膨胀。所以在正式发布npm包之前,最好在本地进行调试。

你可以使用 npm link将你的包链接到全局node_modules目录下,之后在将包链接到具体的代码目录下。

例如:

cd ~/projects/node-redis    # go into the package directory
npm link # creates global link
cd ~/projects/node-bloggy # go into some other package directory.
npm link redis # link-install the package

要解除项目与包的链接,只需要执行以下命令:

npm unlink redis

发布 npm 包

登录 npm 账号

  1. 在登录你的 npm 账号前,请确保切换到官方镜像源:
npm config set registry https://registry.npmjs.org/
  1. 登录你的 npm 账号:
npm login
  1. 提示你输入用户名,密码和邮箱地址:
npm notice Log in on https://registry.npmjs.org/
Username: yourname
Password: *****
Email: (this IS public) youremail

执行发布命令

npm publish

更新 npm 包版本

当你对已发布的包进行重大更改时,应该更新版本号,以便将更改的范围传达给依赖你代码的其他人。

你可以使用以下命令更改package.json中的版本号:

npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease | from-git]

部分不同选项的作用:

  • patch: 1.0.0 –> 1.0.1
  • minor:1.0.0 –> 1.1.0
  • major: 1.0.0 –> 2.0.0

更多选项或参数可参考npm version

取消发布包

使用官网

  1. 在 npm 的“登录”页面上,输入您的帐户详细信息并单击“登录”

    image
  2. 导航到您要取消发布的包的包页面,替换<your-package-name>为您的包的名称: https://www.npmjs.com/package/<your-package-name>

  3. 单击设置

    image
  4. 在“删除包”下,单击删除包

    image
  5. 如果您确定要继续,请输入您的包名称并单击删除包

    image

使用命令行

要取消发布整个包,请运行以下命令,替换<package-name>为您的包的名称:

npm unpublish <package-name> -f

更多操错可参考https://docs.npmjs.com/unpublishing-packages-from-the-registry

FAQ

登录失败

设置官方镜像源,使用npm login登录的时候记得切换成官方镜像源地址:

npm config set registry https://registry.npmjs.org/

设置淘宝镜像源:

npm config set registry https://registry.npmmirror.com/

查看当前镜像源:

npm config get registry

包名被占用

这是一个常见问题,因为很多人都发包到 npm 上。有时候很难得到你想要的包名。

为了解决这个问题,npm 允许发包到一个命名空间下。这意味着可以把包发布到你自己的用户名或者组织名下,因此解决了命名问题。

要发包到一个命名空间下,你需要选择如下其中一种方式:

  • 手动修改 package.json 中的 name 属性值为 @username/package-name 格式
  • 运行 npm init –scope=username 而非 npm init

如果你的仓库有命名空间,你需要微调一下 publish 命令:

npm publish --access public
 Comments