前言:
很早之前,笔者看到那么一段话,奉为经典。
一个功能用到了好多次,为什么不封装成组件?一个组件用到了好几个项目,为什么不单独写个npm包?差不多的项目创建了好几个,为什么不封装成脚手架?
是的,今天就让我们来看看npm发包这一套流程是咋操作的~
npm发包:
第一步(注册账号):
首先我们需要注册一个npm账号,等我们包开发好后就会把包发布到这个账号上去。
官网地址: www.npmjs.com/
注册地址:https://www.npmjs.com/signup
第二步(切换npm源):
我们在正常开发的时候,很多时候为了能快速安装依赖会把npm源切换到淘宝源,但是我们在发包的时候,需要把淘宝源切换回npm源
npm config set registry https://registry.npmjs.org/
但是我们再切换回淘宝源,又要执行一长串命令,这样反复,着实有点麻烦
所以我们推荐安装nrm来切换npm的源
//全局安装nrm
npm i nrm -g
//npm源列表
nrm ls
//切换npm源
nrm use npm
//切换淘宝源
nrm use taobao
我们切换回npm源之后,需要查看一下,切换成功没有
npm config get registry
如果显示https://registry.npmjs.org/说明切换npm源成功
第三步(发包流程):
下面我们以下面写的一个加减乘除的函数为例进行发包演示
1.npm包初始化
npm init
根据提示输入你要发的包的名字,在这里笔者用npm-test-linglinglin当做发布的包的名字,然后一直回车,出现Is this OK?的时候, 输入yes回车。最后会生成一个package.json,如下:
在这里,笔者对package.json里的配置进行一个简单的介绍,避免刚开始懵懵的:
{
"name": "npm-test-linglinglin", // 包名,包名不允许重复,npm i XXX 下载就是按这个包名下载的
"version": "1.0.0", // 版本号 --默认是1.0.0,当然版本号可以随意更改
"author": "零凌林", // 作者名称
"description": "", // 描述信息--可以不写
"keywords": ["utils", "format", "money", "phone"], // 关键词,提升SEO --可以不写
// 代码托管的位置 --可选,建议必选,除非不打算维护
"repository": {
"type": "git",
"url": "https://github.com/xxxx/xxxx.git" //代码托管地址
},
"license": "ISC", // 许可证
"homepage": "", // 这个包的介绍网站首页 --可以没有
"bugs": "", // 使用者bug反馈地址 ---可以没有
"main": "index.js", // 入口文件 默认是index.js 可修改 必填
"scripts": {
// 存放可执行脚本
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
// 运行依赖
},
"devDependencies": {
// 开发依赖
}
}
下面呢,我们先对npm-test-linglinglin的package.json进行一点简单的调整
2.登录npm
npm login
根据提示输入用户名,密码,邮箱地址和邮箱验证码(注意密码是不显示的,盲打然后回车),如下:
查看登录情况,如果出现用户名就说明登录成功了
npm whoami
3.查询包是否可发
查看是否可以发包(因为发布的包名必须是唯一的,所以得查看有没有同样的包名),如果包名重复,会发布失败,需要更换成唯一的包名
如果查不到该包名,报错,就说明没有这个包名,代表可以发布
npm view 包名
4.更改版本号
我们可以手动更改版本号,也可以通过命令更改版本号,下面是一些更改版本号的命令
npm version xxx // 自动更改版本号,并且commit
npm version patch // 控制台会返回下一个小版本号 如v1.0.1
npm version minor // minor:次版本号,增加新功能,如 v1.0.0->v1.1.0
npm version major // major:主版本号,不兼容的修改,如 v1.0.0->v2.0.0
5.发布
npm publish
显示如下信息,代表发布成功
6.登录npm包查看
npm官网地址
登录npm后,我们可以在packages里看到刚才已经发布成功的包
点进去就能看到包的详细情况,以及源码
至此,我们发包的流程就结束了~
第四步:项目应用测试
1.安装包
npm i npm-test-linglinglin -S
2.使用包
vue页面:
import { ref } from 'vue'
import { add,subtract,multiply,divide } from 'npm-test-linglinglin'
const num1 = ref(1)
const num2 = ref(1)
页面效果:
至此,我们就可以确认我们的包彻底发布成功啦~
发包前测试
1.必要性
我们发包测试是很有必要的,如果我们发布的包使用的人很多,你发上去要是报错了,那造成的损失将是巨大的。所以我们一定要确定发布上去的包没有问题。因此我们要做的是,在发布前进行测试,而不是发布上去后再进行测试。
2.npm link
那么我们怎么样在发布包之前进行测试呢?
让我们接着看下去吧~
我们测试包需要借助一个命令
npm link
是的,就是npm link,事实上,我们借助npm link就能把所要发布的包生成一个类似于全局的软链接,方便我们进行调试。
还是以npm-test-linglinglin这个包为例,我们现在在这个包里添加一个数组反转函数,但是不发布上去
我们一般使用npm 下载全局依赖的时候,依赖会被默认安装到_C:\Users\你的用户名\AppData\Roaming\npm_ 这个位置的node_modules中
从上面动图可以看出,我们在 npm-test-linglinglin的包路径下执行npm link会在全局生成一个类似于快捷方式的软链接
ps:如果我们需要取消全局的软链接,只需要执行npm unlink 包名 -g就可以了,例如:
npm unlink npm-test-linglinglin -g
生成全局的软链接后,我们就可以使用全局的这个软链包进行测试了
3.项目使用
在项目里,我们可以先把对应的包移除掉(避免缓存,npm link新代码不生效),例如:
npm uninstall npm-test-linglinglin
然后在项目里执行链接全局包的命令npm link 包名,例如:
npm link npm-test-linglinglin
vue页面:
import { ref } from 'vue'
import { add, subtract, multiply, divide, reverseArr } from 'npm-test-linglinglin'
const num1 = ref(1)
const num2 = ref(1)
const originArr = [2, 4, 6, 8, 10]
页面效果:
从上面的结果来看,我们并没有安装 npm-test-linglinglin这个新包,只是用了全局的软链接,经过测试,我们新加的代码无误,这个时候我们就可以按照上述的发包流程进行发包啦。发包成功后,删除这个包的全局软链,重新安装这个包的依赖。
还记得怎么删除全局软链吗?
npm unlink npm-test-linglinglin -g
4.npm link原理
依赖文件系统会在当前项目下的node_modules文件夹下寻找。比如咱们项目依赖了一个antd。那么这个antd的依赖。会优先从当前目录下的node_modules下寻找,如果没有找到,则往父级目录寻找node_modules。一直到根目录为止。
npm发包常用命令
npm login //登录
npm publish //发布
npm unpublish 包名 //撤销已发布的包
npm unpublish 包名 --force //强制撤销
npm unpublish 包名@1.0.2 //可以撤销发布自己发布过的某个版本代码
npm view 包名 //查看包名是否存在
nrm use npm //切换npm镜像
npm adduser //根据提示输入用户名密码邮箱
npm whoami //查看是否登陆成功,如果出现用户名就证明登陆成功了
npm version xxx // 自动更改版本号,并且commit
npm version patch // 控制台会返回下一个小版本号 如v1.0.1
npm version minor // minor:次版本号,增加新功能,如 v1.0.0->v1.1.0
npm version major // major:主版本号,不兼容的修改,如 v1.0.0->v2.0.0