
创建你的 npm 账号
在发布一个npm
包之前,需要准备一个属于你的npm
账号。注册地址
创建 npm 包
创建你的包文件夹
一个简单的npm
包文件夹,应该包含以下部分:
├── README.md |
关于package.json
package.json
是一个npm
包中的重要文件,有了package.json
文件才能将你的包发布到 npm
注册表。你可以将package.json
文件添加到你的包中,以方便其他人管理和安装。
通过以下命令创建package.json
:
npm init |
以下为package.json
中包含的一些常见属性:
{ |
关于README.md
在项目的根目录下创建README.md
作为npm
包的自述文件,可以帮助其他人在 npm
上找到你的包并在他们的项目中使用你的代码获得良好的体验。该文件可能包含安装、配置和使用包中代码的说明,以及用户可能认为有帮助的任何其他信息。
你可以创建 README.md 文件并将其添加到包中:
- 在文本编辑器中,在您的包根目录中,创建一个名为
README.md
的文件 - 在该
README.md
文件中,添加有关您的包的有用信息。 - 保存
README.md
文件。
本地调试
将npm
包发布到线上进行调试过于繁琐,并且仅为了调试代码而频繁地发布会导致版本号膨胀。所以在正式发布npm
包之前,最好在本地进行调试。
你可以使用 npm link
将你的包链接到全局node_modules
目录下,之后在将包链接到具体的代码目录下。
例如:
cd ~/projects/node-redis # go into the package directory |
要解除项目与包的链接,只需要执行以下命令:
npm unlink redis |
发布 npm 包
登录 npm 账号
- 在登录你的
npm
账号前,请确保切换到官方镜像源:
npm config set registry https://registry.npmjs.org/ |
- 登录你的 npm 账号:
npm login |
- 提示你输入用户名,密码和邮箱地址:
npm notice Log in on https://registry.npmjs.org/ |
执行发布命令
npm publish |
更新 npm 包版本
当你对已发布的包进行重大更改时,应该更新版本号,以便将更改的范围传达给依赖你代码的其他人。
你可以使用以下命令更改package.json
中的版本号:
npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease | from-git] |
部分不同选项的作用:
patch
: 1.0.0 –> 1.0.1minor
:1.0.0 –> 1.1.0major
: 1.0.0 –> 2.0.0
更多选项或参数可参考npm version
取消发布包
使用官网
在 npm 的“登录”页面上,输入您的帐户详细信息并单击“登录”。
导航到您要取消发布的包的包页面,替换
<your-package-name>
为您的包的名称:https://www.npmjs.com/package/<your-package-name>
单击设置。
在“删除包”下,单击删除包。
如果您确定要继续,请输入您的包名称并单击删除包。
使用命令行
要取消发布整个包,请运行以下命令,替换<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 |