什么是npm?什么是package.json?什么是package-lock.json?

5 篇文章 0 订阅

什么是npm

npm 全称是 node package mannager ,翻译过来就是Node.s包管理工具,它能够帮助用户安装和下载包。
例如:
在cmd 输入命令:

npm install art-template jquery bootstrap

该命令表示在当前目录下,一次性装art-template、jquery、 bootstrap三个包。
在这里插入图片描述

什么是 package.json

每个项目的根目录下面,一般都有一个 package.json 文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。package.json主要用来定义项目中需要依赖的包npm install 命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。package.json 文件可以手工编写,也可以使用 npm init 命令自动生成。

通过 npm init 的方式来自动初始化出来。如下图所示:

r)

package.json文件内容:
在这里插入图片描述

使用 npm install xxx 命令的时候,会在package.json中添加dependencies字段,用来表示项目中需要依赖的包:

例如:

在cmd中输入:npm install jquery art-template后。package.json文件内容如下:

在这里插入图片描述

如果你的node_modules删除了也不必担心,我们只需要npm install 就会自动把 package.json 中的dependencies 中所有的依赖项都下载回来。

在这里插入图片描述

你可以选择以如下方式来标明自己所需要库包的版本。

{
  "dependencies": {
    "art-template": "^4.13.2"
  }
}

这里面的向上标号^是定义了向后(新)兼容依赖,指如果 art-template的版本是超过4.13.2,并在大版本号(4)上相同,就允许下载最新版本的art-template库包,例如实际上可能运行npm install时候下载的具体版本是4.13.5。

大多数情况这种向新兼容依赖下载最新库包的时候都没有问题,可是因为npm是开源世界,各库包的版本语义可能并不相同,有的库包开发者并不遵守严格这一原则:相同大版本号的同一个库包,其接口符合兼容要求。这时候用户就很头疼了:在完全相同的一个nodejs的代码库,在不同时间或者不同npm下载源之下,下到的各依赖库包版本可能有所不同,因此其依赖库包行为特征也不同有时候甚至完全不兼容。

解决方法

因此npm最新的版本就开始提供自动生成package-lock.json功能,为的是让开发者知道只要你保存了源文件,到一个新的机器上、或者新的下载源,只要按照这个package-lock.json所标示的具体版本下载依赖库包,就能确保所有库包与你上次安装的完全一样。

什么是package-lock.json

从 npm 5 版本之后只要使用 npm install 命令下载,就会自动生成 package-lock.json 文件,package-lock.json 用来记录当前状态下实际安装的各个npm package的具体来源和版本号

主要作用:
1)描述 node_modules 文件中所有模块的版本信息,模块来源及依赖的小版本信息。
2)当版本升级,使用 npm install 命令时,会安装 package.json 中指定的大版本的最新版本。如 package.json 中指定版本"dependencies": { “webpack”: “^2.0.0” },则 package-lock.json 会按照 {“webpack”: “2.7.0”} 版本升级。在保证大版本号前提下的最新版本。webpack “2.7.0” 是 “2.x.x” 的最高版本。

例如:

在cmd中输入命令 npm install --save jquery

注:

npm 5 之后的版本安装包的时候不需要加 --save 参数,它会自动保存依赖的信息。

当安装包的时候,会自动创建或者更新 package-lock.json 文件;
在这里插入图片描述
查看 package-lock.json 文件

在这里插入图片描述

安装依赖出问题的解决方式不同:

那如果我们安装时的包有bug,后面需要更新怎么办?
以前:在以前可能就是直接改package.json里面的版本,然后再npm install了。
现在:但是5版本后就不支持这样做了,因为版本已经锁定在package-lock.json里了,所以我们只能npm install xxx@x.x.x 这样去更新我们的依赖,然后package-lock.json也能随之更新。
例如:
假如我已经安装了jquery 2.1.4这个版本,从git更新了package.json和package-lock.json,我npm install能覆盖掉node_modules里面的依赖吗?

其实我也有这个疑问,所以做了测试,在直接更新package.json和package-loc.json这两个文件后,npm install是可以直接覆盖掉原先的版本的,所以在协作开发时,这两个文件如果有更新,你的开发环境应该npm install一下才对。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值