工程 - 关于 npm(如何发布自己的 npm 软件包)
准备工作
- node版本v14.18.0以上
- 将npm更新至新版本(
npm install -g npm@latest
)
一、注册npm账号
注册地址:www.npmjs.com/
二、初始化项目
新建项目目录,使用npm init
命令创建package.json文件,按照提示填入初始信息。
如模块名称:mikey-npm-test(只能是小写)
初始版本号选择:v1.0.0
模块名称需遵循相关政策要求:www.npmjs.com/policies,不能够与已有NPM模块名冲突等等。
创建入口文件如index.js
function npmPublishTest(){
var name = 'Mr.Mikey';
var test = function() {
console.log('Hello, my first NPM package')
}
return {
name,
test,
}
}
module.exports = npmPublishTest()
创建README.md文件,填写说明文档如:
一个基本的npm包文件结构如下
三、登录npm
注意源的问题,只有npm官方源可以登录成功,如果报错403,一般是因为非npm官方源,可通过npm get registry命令查看源信息,切换源可以使用nrm进行管理。
简单的处理方式是在不确定源的情况下直接命令后带上源地址:
npm login --registry https://registry.npmjs.org
根据提示输入之前注册的用户名、密码、邮箱,按回车后会发送验证邮件到注册邮箱,需填入验证码后再次回车确认,登录成功如下图所示
四、发布npm包
注意源的问题,只有npm官方源可以发布成功,命令后带上源地址即可
npm publish --registry https://registry.npmjs.org
发布成功状态如下图所示
登录npm官网即可看到已经发布的包
五、后续更新npm包
修改代码后,执行命令自动叠加版本号:
npm version patch
每次产生修改发布必须要修改版本号,npm不允许修改内容后发布相同的版本号
npm version后面参数说明:
patch:小变动,比如修复bug等,版本号变动 v1.0.0->v1.0.1
minor:增加新功能,不影响现有功能,版本号变动 v1.0.0->v1.1.0
major:破坏模块对向后的兼容性,版本号变动 v1.0.0->v2.0.0
迭代版本号之后重复第四步:
npm publish --registry https://registry.npmjs.org
六、撤销发布(慎用)
npm unpublish 包名@版本号 --force (根据需要接上npm源地址)
示例:npm unpublish mikey-npm-test@1.0.0 --force --registry https://registry.npmjs.org
说明:撤销发布的包被认为是一种不好的行为,因为如果有团队使用和依赖你的包时,撤销便会造成很大的影响。
-
根据规范,只有在发包的24小时内才允许撤销发布的包
-
即使你撤销了发布的包,发包的时候也不能再和被撤销的包的名称和版本重复了(即不能名称相同,版本相同,因为这两者构成的唯一标识已经被"占用"了)
七、常见发布错误
npm取用户名时不要带符号,以下就是错误示例
www.npmjs.com/package/@mr…
当包名需要带上作者名称时就会发现,使用npm install @mr.mikey/create-husky时终端报错无法解析作者名中间的点符号,解决办法是在包名上加引号,这样会麻烦一些
npm publish发布状态404,提示xxx is not in this registry时,详情如下
npm notice
npm notice � @frontend-standard-engine/create-husky@1.0.0
npm notice === Tarball Contents ===
npm notice 345B README.md
npm notice 8.5kB index.js
npm notice 825B package.json
npm notice 829B src/index.js
npm notice 3.8kB src/template/.commitlintrc.js
npm notice 3.9kB src/template/.cz-config.js
npm notice 372B src/template/lint-staged.config.js
npm notice === Tarball Details ===
npm notice name: @frontend-standard-engine/create-husky
npm notice version: 1.0.0
npm notice filename: frontend-standard-engine-create-husky-1.0.0.tgz
npm notice package size: 7.1 kB
npm notice unpacked size: 18.5 kB
npm notice shasum: 49df32667395f97ae758ce6bcad71b1cda4ee175
npm notice integrity: sha512-WJ5RvrYeli6FM[...]+NNl4+9r6NjFg==
npm notice total files: 7
npm notice
npm notice Publishing to https://registry.npmjs.org/ with tag latest and public access
npm ERR! code E404
npm ERR! 404 Not Found - PUT https://registry.npmjs.org/@frontend-standard-engine%2fcreate-husky - Scope not found
npm ERR! 404
npm ERR! 404 '@frontend-standard-engine/create-husky@1.0.0' is not in this registry.
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.
一般是由于包名@符号后面的作者用户名不正确,登录npm官网复制自己的用户名,然后修改包名为@username/package-name
再次npm publish即可
npm publish报错402 You must sign up for private packages
npm ERR! 402 Payment Required - PUT https://registry.npmjs.org/@frontend-standard-engine%2fcreate-husky - You must sign up for private packages
查看文档,发现@username/package-name
这种形式的包名,是有作用域的包名形式,执行npm publish
的时候默认是发布私有的包。因此,第一种方式是花钱买私有包的服务,另外一种方式就是指定参数,表示公开,如:
npm publish --access public
或者在包的package.json中添加以下配置
"publishConfig": {
"access": "public"
}
npm publish报错401 You must be logged in to publish packages
verbose stack Error: 401 Unauthorized - PUT xxx You must be logged in to publish packages
重新npm login后再次发布即可。
下一篇: nodejs 压缩文件模块存档器使用示例
推荐阅读