前言
我们都用过npm
,也安装过npm
包,也知道npm
官网,但是了解过那些包是怎么来的吗?其实我们也可以发布npm
包。经过几天的尝试,我也成功发了一个测试包,接下来我将介绍自己如何发布一个npm
包。
前期准备
工欲善其事,必先利其器。npm
的全称是Node Package Manager
,是一个Nodejs
包管理和分发工具,所以我们需要配好node
环境。环境有了,然后我们还需要注册npm
账号,可以去npm
官网按照步骤完成注册,注册完成后会有账号和密码,注册地址如下:
注册完之后就可以在主页看到这样的信息。
![](https://i-blog.csdnimg.cn/blog_migrate/11ffb8a158f63167cfdd620609cf796c.png)
初始化代码
由于我们是要将NPM
包发布到官方源上面,所以需要确保源地址为官方地址http://registry.npmjs.org
或https://registry.npmjs.com
。如果不清楚自己是否在哪个源下面,可以通过npm config get registry
命令查看当前registry
源,如下所示:
![](https://i-blog.csdnimg.cn/blog_migrate/85e9bfea9705e78f74a71babbeee1262.png)
由于我的源地址不在官方源下,所以我还需切换至官方源。
准备好示例 demo 代码 index.js
,如下所示:
function npmdemo(argument) {
var name = 'npm';var id = '666';
var n = function num(arg){console.log(arg)}
return {name:name,id:id,n:n
}
}
module.exports=npmdemo();
确保好这些之后,我们开始对需要发布代码进行npm init
初始化。对package.json
进行如下基本配置。
按照提示填写信息,比如说我的package name
为:npmdemo,版本号为:1.0.0。
![](https://i-blog.csdnimg.cn/blog_migrate/9f0598fad8d0cdf14177e89415b2b4fe.png)
发布NPM包
首先登录npm
官网。
npm login
根据提示输入之前注册的账号、密码。
然后可以开始发布npm
包了。发布过程中可能会出现很多问题,比如包名不符合要求,包名已经被占用等等,但是这些问题都比较容易解决。(由于包名重复,我的一个包名改了十几次才成功发布)
npm publish
![](https://i-blog.csdnimg.cn/blog_migrate/bb6418525d3932ccd1dad35027ab8a34.png)
若要检验是否发布成功,我们可以用账号登录npm
,点击头像,选择package
,就会进入到个人的包管理页面了。或者直接搜索发布时的包名,看能否找到对应的包。如下所示:
![](https://i-blog.csdnimg.cn/blog_migrate/9b518a1b15d1c30815aa61ff51e6ef6e.png)
以上就是我的那个示例包发布成功后的界面。
安装并使用发布的包
安装发布的npm
包:
npm install npm_testdemo_pro
使用发布的包,此处我的示例代码为index.js
。如下所示:
var testnpm = require('npm_testdemo_pro');
console.log(testnpm);
最后运行示例代码node index.js
即可。
更新NPM包
更新npm
包只需执行如下命令即可:
npm version patch
npm publish
npm version 后面的参数说明如下:> patch:表示小变动,比如修复bug等,版本号变动 1.0.0->1.0.1> major:表示破坏模块对向后的兼容性,版本号变动 1.0.0->2.0.0> minor:表示增加新功能,不影响现有功能,版本号变动 1.0.0->1.1.0
这些是常见的参数,还有一些不常见的就没有罗列出来了。
总结
通过几天的研究以及学习,了解了如何发布一个npm
包,以及更新npm
包。简单来说就是发布通过publish,更新通过version。整体流程看起来还是挺简单的,但是还是需要自己去尝试才行,只有通过自己的尝试才能发现会出现哪些问题。
最后
最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。
有需要的小伙伴,可以点击下方卡片领取,无偿分享