开发者学堂课程【Node.js 入门与实战:package-lock.json 文件介绍】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/588/detail/8272
package-lock.json文件介绍
一、package-lock.json文件介绍
package-lock.json 并不是每个人都能看到的,如果电脑上 npm 安装的是5.0及以上版本才看得到 package-lock.json 文件,安装3.0以下是看不见的 package-lock.json 文件的。
这个文件是 npm5开始引进的新文件,引进好处是让 npm 安装更快。而这个文件一开始是向别人借鉴的,是像 facebook 人员觉得 npm 用起来太慢了,就自己写了一个 npm 客户端的替代品,叫做 yarn,用了 npm 后就不用再用 yarn,用 yarn 还是 npm 都是通过 npm 仓库安装,只是yarn命令行工具换了而已。
有 yarn.log 文件使 yarn 安装比 npm 客户端安装快很多,后来 npm5也开始出现package-lock.json 提高安装速度。
package-lock.json 文件安装快的原因
新建项目文件夹 test-demo,
再新建文件 app.js文件。
任何一个项目文件都要有 package.json 文件,所以 cd 到 test-demo,通过 npm init -y 创建文件,如,
C: Users \Humble\Desktop
\12期\02-HackerNews
\02-源代码\课堂代码\test -demo
npm init -y
Wrote to C: Users \Humble\Desktop
\12期\02-HackerNews
\02-源代码\课堂代码\test -demo\package . json:
{
"name":" test- demo”,
"version": "1.0.0",
description":””,
"main":" app.js",
"scripts": {
"test" :echo \" Error: no test specified\" && exit 1"
},
“keywords": [ ],
"author":””,
“license": "ISC"
}
创建后发现只有 package.json 文件,没有 package-lock.json文件,npm -v 查看版本发现是3.10.10版,是看不见的,需要 nvm list 切换版本数,此处使用6.11.3版本,因为命令行不是管理员窗口打开的,使用切换时要允许进行允许操作,如,
C: Users \Humble\Desktop
\12期\02-HackerNews
\02-源代码\课堂代码\test -demo (test-demo@1.0.0)
npm -v
3.10.10
C: Users \Humble\Desktop
\12期\02-HackerNews
\02-源代码\课堂代码\test -demo (test-demo@1.0.0)
nvm list
8.5.0
8.4.0
6.11.3
…
C: Users \Humble\Desktop
\12期\02-HackerNews
\02-源代码\课堂代码\test -demo (test-demo@1.0.0)
nvm use 6.11.3
Now using node v6.11.3(64-bit)
此时仍是看不见 package-lock.json 文件的,还要安装再安装第三方包后才能看见。
如果使用的是 npm5,那么第一次安装第三方包时会产生的 package-lock.json文件,如果是 npm5以下版本无论怎么安装第三方包,都不会产生 package-lock.json文件。
接下来 npm install mine 开始安装第三方包,要写上--save,表示把这个依赖项保存到 package.json 里面,如果使用的是 npm5版本可以省略--save,如,
C: Users \Humble\Desktop
\12期\02-HackerNews
\02-源代码\课堂代码\test -demo (test-demo@1.0.0)
npm install mine
npm notice created…
…
+ mine@2.0.3
added 1 package in 3.149s
安装成功后出现 package-lock.json 文件,继续 npm install express 安装另一个包。
如果要把 package.json 文件迁移到其他的文件夹,只要执行 npm star 命令package.json 文件中所有的包就可以安装好,安装时如果只要一个 package.json文件安装速度会很慢,因为依赖项里面只告诉了依赖了那个包,版本号,如package.json 里面依赖了 mine 包,版本号2.0.3,要在 npm.js 中搜索这个包,找到对应的版本号,有的话找到下载地址,然后进行下载安装,
如果这个包里面还依赖了其他包,对于依赖的那些包都要在 npm 中搜索,找到对应的下载地址,依次进行安装,
如果有 package-lock.json 就不一样了,package-lock.json 文件里面会保存所有的项目依赖包,子包,每个包名称,版本号,地址,转码全都保存住,存得非常详细,下次执行 npm star 的时候可以非常快的根据这里的信息下载对应版本的包,省去了搜索过程,并且 npm5 里面还有缓存,有时不联网也能下载。
如,
package.json 中内容:
{
name": " test - demo",
"version": "1.0.0",
"description": ””,
”main" : "app.js" ,
'scripts":{
"test": ”echo '” Error: no test specified\" && exit 1”
},
"keywords":[],
”author" :””,
"license": "ISC" ,
”dependencies": {
“express": "^4.15.5",
“mime":”2.0.3”
}}
package-lock.json 中内容:
{
name": "test- demo",
"version": "1.0.0" ,
"lockfileVersion": 1 ,
"requires": true ,
"dependencies": {
"accepts": {
"version": "1.3.4",
"resolved": "https://registry . npmjs . org/accepts/ - /accepts-1.3.4.tgz",
"integrity": "sha1 - hi RnWMfdbSGmR0/ whKRODsBesh8=",
”requires": {
”mime-types": "2.1.17",
"negotiator": "0.6.1"
}},
"array-flatten": {
"version":" 1.1.1" ,
"resolved": "https ://registry . npmjs . org/ array-flatten/ - /array-flatten-1.1.1.tgz",
"integrity": "sha1 - ml9pkF Gx5wc zKPKgCJaL Z0opVdI="
},
…