作者:大志前端
链接:https://juejin.cn/post/6844904066158624781
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
前言
本系列文章是根据Mosh
大佬的视频教程全方位Node开发 - Mosh整理而成,个人觉得视频非常不错,所以计划边学习边整理成文章方便后期回顾。该视频教程是英文的,但是有中文字幕,感谢marking1212提供的中文字幕翻译。
本篇文章大纲
- 查看包的注册信息
- 安装特定版本的包
- 升级本地包
- 开发用依赖库
- 删除包
- 操作全局包
- 发布一个包
- 发布包更新
查看包的注册信息
之前有说过如果想了解npm
的包,我们可以访问npmjs.com并搜索特定的包,比如mongoose
。
<figcaption></figcaption>
通过切换tab标签,可以查看mongoose
这个包的一些基本信息,比如依赖、版本等等。
但是有一种更快的方法,回到控制台,我们运行npm view
,并指定特定的库,比如mongoose
。
npm view mongoose
复制代码
控制台输出如下图
<figcaption></figcaption>
这里我们看到的是mongoose
库的package.json
的一部分内容,比如dependencies
。
这些内容太多了,如果我们只想查看依赖的信息,可以运行
npm view mongoose dependencies
复制代码
这里你可以添加任何package.json
中的对象,比如我想查看关键词就运行npm view mongoose keywords
。
运行后,控制台输出如下图
<figcaption></figcaption>
这里你就只看到依赖对象的值。
另一个有用的属性是version
,如果你想查看至今为止所有发布的mongoose
的版本号,可以运行
npm view mongoose versions
复制代码
控制台输出如下图
<figcaption></figcaption>
这就是mongoose
库的所有版本号,这有用的地方在于有时你想回滚旧版本或者升级新版本,这里你就可以看到历史数据。
如果只想查看最新的版本号,可以运行
npm view mongoose version
复制代码
注意少了一个s
。
安装特定版本的包
有时候我们需要安装特定的版本而不是最新版本,我们可以运行npm i mongoose
,添加一个@
符号设置版本号,比如4.13.18
。
npm i mongoose@4.13.18
复制代码
运行后,我们看下package.json
文件已经更新了,我们安装好了mongoose
4.13.18版本,如下图
<figcaption></figcaption>
同样的运行npm list
同时设置深度参数为0,可以看到在node_modules
文件夹中,mongoose
的版本是4.13.18
。
npm list --depth=0
复制代码
<figcaption></figcaption>
这里你可以试着安装underscore
包的某个指定版本练习一下。
升级本地包
在现实中开发软件的时候,也许经常需要对已安装依赖库的升级,你肯定想快速了解已安装的和已发布的库,查看的命令是
npm outdated
复制代码
控制台输出如下图
<figcaption></figcaption>
这时候npm
会查看已安装版本和对比在npm
注册库中发布的版本,我们以mongoose
为例看看发生了什么
- Current 4.13.18 当前版本
- Wanted 4.13.20 期待的版本
- Latest 5.9.1 最新的版本
这里的期待是什么意思呢?回到package.json
文件看看,我们安装的mongoose
是^4.13.18
,这里有个插入符号,只要主要版本是4
,这个版本就可以用于更新本地的应用,这里具体就是主要版本为4
的最新版本是4.13.20
,这就是这里期待
的含义。
如果我们想升级,就运行npm update
,但是这样只会更新次要版本和补丁版本,因为没有主要升级,mongoose
就不会安装到最新版了,最新版本已经和现有版本差了一个主要版本号了,很可能已经有核心部分的更新了。
我们来运行一下看看,控制台输出如下图
<figcaption></figcaption>
可以看到命令更新了一个内容,mongoose
只更新到了主要版本为4
的最后更新4.13.20
,就是我们上面期待
列显示的版本号,如果我们想更新到最新发布的版本5.9.1
,npm update
是做不到的,这里需要另一个命令行工具,这个包是npm-check-updates
,我们来安装一下,运行
npm i -g npm-check-updates
复制代码
安装好了,我们在运行一下
npm-check-updates
复制代码
就能看到所有已安装包和可安装的包,如下图
<figcaption></figcaption>
这里显示的是mongoose
的已安装版本是4.13.20
,但是最新的版本是5.9.1
,这里提示你运行ncu
,也就是npm-check-updates
的缩写,加入-u
参数更新package.json
,我们来运行一下
ncu -u
复制代码
运行后,你可以看到package.json
文件已经更新了,mongoose
已经到了最新版5.9.1
。
<figcaption></figcaption>
但是这个更新只是更新了package.json
,还没更新依赖,我们还需要运行一下npm i
才可以。
运行完,如果我们再来运行一下npm outdated
,控制台没有任何输出,因为所有本地库都更新到最新了,类似的,如果运行ncu
,同样的提示也是依赖库都是最新的,如下图所示
<figcaption></figcaption>
开发用依赖库
到现在所有安装的依赖都是服务于应用的,比如mongoose
和underscore
,我们的应用因为功能才需要这些依赖库,但是有时候我们需要一些只在开发中使用的库,例如我们需要进行单元测试的工具,我们需要静态分析代码的工具,我们需要打包JavaScript代码的工具等等,这些依赖是开发用依赖库,这些库在发布的时候不用一起发布,这边我们来演示安装一个开发依赖。
这是一个JavaScript代码静态分析工具依赖,这主要用来分析代码,找出可能的语法错误,我们运行npm i jshint
,为了声明这是个开发用依赖,我们需要加一个参数--save-dev
npm i jshint --save-dev
复制代码
现在回到package.json
,可以看到jshint
在独立的属性下devDependencies
,如下图所示
<figcaption></figcaption>
这就告诉node这是一个开发用依赖,不需要发布到生产环境,所有的依赖除了应用依赖都是开发用依赖,它们都保存在node_modules
文件夹,它们只在package.json
文件中才有区分。
删除包
到现在,我们已经学会安装包和升级包了,现实开发中也许因为不需要你就会想删除一个包,如果是这种情况,在控制台运行npm uninstall
或者简写npm un
,并指定特定的包,比如mongoose
npm un mongoose
复制代码
运行后,现在package.json
文件中mongoose
已经不在依赖属性中了,同时它在也不在node_modules
文件夹中了。
操作全局包
所有至今我们安装的包,比如underscore
和jshint
,它们都特定处于某个node工程文件夹中,但是有些是node注册库,不是针对某个应用的,这些通常是命令行工具,你可能想从任何地方访问,它们不是为某个特别的文件夹或者工程设计的,npm
就是这类全局工具的代表,它是一个命令行工具,可以在任何地方运行,不限于某个文件夹,另一个很常见的工具就是Angular cli
,我们使用它创建一个新的Angular
工程。
如果你想全局性安装一个包,可以使用-g
参数,就像之前说的,例如npm i -g
然后加特定的包名,这就是如何安装全局包,所有其他你在本课程学到的命令行工具都是全局的。例如你想查看所有可更新的全局工具包,可以运行
npm -g outdated
复制代码
你可以看到所有已安装的全局包。
类似的如果你想删除一个全局的包,可以运行npm un -g
并指定一个特定包的名称。
发布一个包
我们可以创建自己的包并发布到npm
注册库,我们来看看如何实现?
- 首先要创建一个新文件夹,我创建一个新的node工程,比如叫做
lion-lib
,我们创建一个库叫lion
,就像underscore
一样 - 进入
lion-lib
文件夹,先创建一个package.json
,输入npm init --yes
,创建完package.json
,回到VSC
打开 - 新建一个新的文件
index.js
,这是我们包的入口
我们随便写点东西,比如导出一个简单的函数,接收两个参数,返回它们的和
module.exports.add = function (a, b) {
return a + b;
}
复制代码
回到控制台,如果你没有npmjs
的账户,你首先需要创建一个账号,我们可以使用npm adduser
命令来创建。
如果你已经有账号了,就使用另一个命令npm login
来登录,你需要回到3个问题
- 第一个是用户名
- 然后是你的密码
- 最后是你的email地址
登录后,为了发布包,我们运行npm publish
,当发布的时候会碰到一个错误,因为你无权修改lion
包,如下图
<figcaption></figcaption>
为了解决这个问题,回到package.json
文件,设置一个独一无二的名字,设置name
为lion-lib-5238
,后面加一些随机的数字,只是为了实现唯一的包名称。然后回到控制台,运行npm publish
,控制台提示发布成功了,如下图
<figcaption></figcaption>
现在已经在npm
发布了包,我们看看如何在应用中使用它。
我们新建一个项目node-app
,进入这个项目,执行npm init --yes
初始化一下项目,运行
npm i lion-lib
复制代码
回到VSC
,可以看到node_modules
文件夹里面多了一个lion-lib
文件夹,里面也有package.json
文件,这个文件跟我们未发布时的不一样,多了很多内容,这是因为我们发布包的时候,node会创建自己的package.json
。
<figcaption></figcaption>
打开package.json
文件,里面的dependencies
属性也有了lion-lib
依赖
<figcaption></figcaption>
接下来我们在根目录新建一个index.js
文件,把我们的包引入进来,代码如下
const lion = require('lion-lib');
var result = lion.add(1, 2);
console.log(result);
复制代码
回到控制台,运行node index.js
,控制台输出3
,如下图
<figcaption></figcaption>
我们自己发布的包已经可以正常使用了。
发布包更新
回到我们的lion-lib
包,我们想添加一个新功能,导出一个multiply
函数,同样需要两个参数,返回它们的乘积。
module.exports.add = function (a, b) {
return a + b;
}
module.exports.multiply = function (a, b) {
return a * b;
}
复制代码
现在我们想发布这个新版本,在lion-lib
文件夹中,如果你运行npm publish
,会得到一个报错,你不能发布与现有版本号重复的版本,如下图
<figcaption></figcaption>
依照我们之前作出的修改,我们应该修改版本号,这里我们作出一个小修改,不是修复错误,它添加了一个新的特性,但没有破坏原有功能的api,之前的add
函数还是好好的,所有其他依赖于这个函数的应用都能正常工作,现在回到package.json
文件,我们可以手工更新版本号,或者借助npm
,回到控制台,运行npm version
,后面可以加上major
,如果你更新的是主要版本号,或者minor
,或者patch
,这里我们要更新的是minor
次要版本号,我们运行
npm version minor
复制代码
如你所见,版本号变为了1.1.0
,如下图
<figcaption></figcaption>
然后就可以运行npm publish
了,这就向npm
发布了新的版本,如下图
<figcaption></figcaption>
好了,本篇文章先到这里。
最后
感谢您的阅读,希望对你有所帮助。由于本人水平有限,如果文中有描述不当的地方,烦请指正,非常感谢。