第三章: Node学习之node包管理工具(下)

第三章:Node学习之node包管理工具(下)


前言

本系列文章是通过学习Mosh的视频node教程全方位Node开发-Mosh而整理的笔记,该教程是英文的,有中文字幕,感谢marking1212提供中文字幕翻译

查看包的注册信息

之前有说过如果想了解npm的包,我们可以访问npmjs.com并搜索特定的包,比如mongoose
在这里插入图片描述

通过切换tab标签,可以查看mongoose这个包的一些基本信息,比如依赖、版本等等。
但是有一种更快的方法,回到控制台,我们运行npm view,并指定特定的库,比如mongoose。

npm view mongoose

这里我们看到的是mongoose库的package.json的一部分内容,比如dependencies
这些内容太多了,如果我们只想查看依赖的信息,可以运行

npm view mongoose dependencies

复制代码这里你可以添加任何package.json中的对象,比如我想查看关键词就运行npm view mongoose keywords

这里你就只看到依赖对象的值。
另一个有用的属性是version,如果你想查看至今为止所有发布的mongoose的版本号,可以运行

npm view mongoose versions

这就是mongoose库的所有版本号,这有用的地方在于有时你想回滚旧版本或者升级新版本,这里你就可以看到历史数据。
如果只想查看最新的版本号,可以运行

npm view mongoose version

代码注意少了一个s。

安装特定版本的包

有时候我们需要安装特定的版本而不是最新版本,我们可以运行npm i mongoose,添加一个@符号设置版本号,比如4.13.18。

npm i mongoose@4.13.18

运行后,我们看下package.json文件已经更新了,我们安装好了mongoose4.13.18版本,

同样的运行npm list同时设置深度参数为0,可以看到在node_modules文件夹中,mongoose的版本是4.13.18

npm list --depth=0

这里你可以试着安装underscore包的某个指定版本练习一下。

升级本地包

在现实中开发软件的时候,也许经常需要对已安装依赖库的升级,你肯定想快速了解已安装的和已发布的库,查看的命令是

npm outdated

这时候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就不会安装到最新版了,最新版本已经和现有版本差了一个主要版本号了,很可能已经有核心部分的更新了。

可以看到命令更新了一个内容,mongoose只更新到了主要版本为4的最后更新4.13.20,就是我们上面期待列显示的版本号,如果我们想更新到最新发布的版本5.9.1npm update是做不到的,这里需要另一个命令行工具,这个包是npm-check-updates,我们来安装一下,运行

npm i -g npm-check-updates

复制代码安装好了,我们在运行一下

npm-check-updates

就能看到所有已安装包和可安装的包

这里显示的是mongoose的已安装版本是4.13.20,但是最新的版本是5.9.1,这里提示你运行ncu,也就是npm-check-updates的缩写,加入-u参数更新package.json,我们来运行一下

ncu -u

运行后,你可以看到package.json文件已经更新了,mongoose已经到了最新版5.9.1

但是这个更新只是更新了package.json,还没更新依赖,我们还需要运行一下npm i才可以。
运行完,如果我们再来运行一下npm outdated,控制台没有任何输出,因为所有本地库都更新到最新了,类似的,如果运行ncu,同样的提示也是依赖库都是最新的

开发用依赖库

到现在所有安装的依赖都是服务于应用的,比如mongooseunderscore,我们的应用因为功能才需要这些依赖库,但是有时候我们需要一些只在开发中使用的库,例如我们需要进行单元测试的工具,我们需要静态分析代码的工具,我们需要打包JavaScript代码的工具等等,这些依赖是开发用依赖库,这些库在发布的时候不用一起发布,这边我们来演示安装一个开发依赖。
这是一个JavaScript代码静态分析工具依赖,这主要用来分析代码,找出可能的语法错误,我们运行npm i jshint,为了声明这是个开发用依赖,我们需要加一个参数--save-dev

npm i jshint --save-dev

现在回到package.json,可以看到jshint在独立的属性下devDependencies

这就告诉node这是一个开发用依赖,不需要发布到生产环境,所有的依赖除了应用依赖都是开发用依赖,它们都保存在node_modules文件夹,它们只在package.json文件中才有区分。

删除包

到现在,我们已经学会安装包和升级包了,现实开发中也许因为不需要你就会想删除一个包,如果是这种情况,在控制台运行npm uninstall或者简写npm un,并指定特定的包,比如mongoose

npm un mongoose

运行后,现在package.json文件中mongoose已经不在依赖属性中了,同时它在也不在node_modules文件夹中了。

操作全局包

所有至今我们安装的包,比如underscorejshint,它们都特定处于某个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包

为了解决这个问题,回到package.json文件,设置一个独一无二的名字,设置name为lion-lib-613,后面加一些随机的数字,只是为了实现唯一的包名称。然后回到控制台,运行npm publish,控制台提示发布成功了,

现在已经在npm发布了包,我们看看如何在应用中使用它。
我们新建一个项目node-app,进入这个项目,执行npm init --yes初始化一下项目,运行

npm i lion-lib

回到VSC,可以看到node_modules文件夹里面多了一个lion-lib文件夹,里面也有package.json文件,这个文件跟我们未发布时的不一样,多了很多内容,这是因为我们发布包的时候,node会创建自己的package.json。

打开package.json文件,里面的dependencies属性也有了lion-lib依赖

接下来我们在根目录新建一个index.js文件,把我们的包引入进来,代码如下

const lion = require('lion-lib');

var result = lion.add(1, 2);

console.log(result);

回到控制台,运行node index.js,控制台输出3

我们自己发布的包已经可以正常使用了。

发布包更新

回到我们的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,会得到一个报错,你不能发布与现有版本号重复的版本

依照我们之前作出的修改,我们应该修改版本号,这里我们作出一个小修改,不是修复错误,它添加了一个新的特性,但没有破坏原有功能的api,之前的add函数还是好好的,所有其他依赖于这个函数的应用都能正常工作,现在回到package.json文件,我们可以手工更新版本号,或者借助npm,回到控制台,运行npm version,后面可以加上major,如果你更新的是主要版本号,或者minor,或者patch,这里我们要更新的是minor次要版本号,我们运行

npm version minor

然后就可以运行npm publish了,这就向npm发布了新的版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值