欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

工程 - 关于 npm(如何发布自己的 npm 软件包)

最编程 2024-05-20 15:06:46
...

准备工作

  1. node版本v14.18.0以上
  2. 将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文件,填写说明文档如:

1645685426.png

一个基本的npm包文件结构如下

1645685456.png

三、登录npm

注意源的问题,只有npm官方源可以登录成功,如果报错403,一般是因为非npm官方源,可通过npm get registry命令查看源信息,切换源可以使用nrm进行管理。

简单的处理方式是在不确定源的情况下直接命令后带上源地址:

npm login --registry https://registry.npmjs.org

根据提示输入之前注册的用户名、密码、邮箱,按回车后会发送验证邮件到注册邮箱,需填入验证码后再次回车确认,登录成功如下图所示

1645685591.png

四、发布npm包

注意源的问题,只有npm官方源可以发布成功,命令后带上源地址即可

npm publish --registry https://registry.npmjs.org

发布成功状态如下图所示

1645685802.png

登录npm官网即可看到已经发布的包

1645685875.png

五、后续更新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

说明:撤销发布的包被认为是一种不好的行为,因为如果有团队使用和依赖你的包时,撤销便会造成很大的影响。

  1. 根据规范,只有在发包的24小时内才允许撤销发布的包

  2. 即使你撤销了发布的包,发包的时候也不能再和被撤销的包的名称和版本重复了(即不能名称相同,版本相同,因为这两者构成的唯一标识已经被"占用"了)

七、常见发布错误

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后再次发布即可。