我们首先来看一下package.json文件里的内容

{"name": "xxxx","version": "0.1.0","private": true,"scripts": {"serve": "vue-cli-service serve --port 8081","build": "vue-cli-service build","lint": "vue-cli-service lint"},"dependencies": {"ant-design-vue": "^1.3.10","axios": "^0.19.0","core-js": "^3.4.3","crypto-js": "^3.1.9-1","moment": "^2.24.0","nprogress": "^0.2.0","vue": "^2.6.10","vue-router": "^3.0.3","vuex": "^3.0.1"},"devDependencies": {"@vue/cli-plugin-babel": "^4.1.1","@vue/cli-plugin-eslint": "^4.1.1","@vue/cli-service": "^4.1.1","@vue/eslint-config-standard": "^4.0.0","babel-eslint": "^10.0.1","babel-plugin-import": "^1.12.0","eslint": "^5.16.0","eslint-plugin-babel": "^5.3.0","eslint-plugin-vue": "^5.0.0","less": "^3.0.4","less-loader": "^4.1.0","lint-staged": "^9.4.3","vue-template-compiler": "^2.6.10","webpack-bundle-analyzer": "^3.4.1"},"gitHooks": {"pre-commit": "lint-staged"},"lint-staged": {"*.{js,vue}": ["vue-cli-service lint","git add"]},"repository": {"type": "git","url": "xxxxxxx"}
}

再看下package-lock文件里的内容

{"name": "oss-frontend","version": "0.1.0","lockfileVersion": 1,"requires": true,"dependencies": {"@ant-design/icons": {"version": "1.1.16","resolved": "http://registry.npm.baidu-int.com/@ant-design%2ficons/-/icons-1.1.16.tgz","integrity": "sha1-rGQmIWk04/S8EI8vSPku1meJI14="},"@ant-design/icons-vue": {"version": "1.0.1","resolved": "http://registry.npm.baidu-int.com/@ant-design%2ficons-vue/-/icons-vue-1.0.1.tgz","integrity": "sha1-NDV5IZwEGQgxyco4Jq7HNhu4tNQ=","requires": {"ant-design-palettes": "^1.1.3","babel-runtime": "^6.26.0"}},"@babel/code-frame": {"version": "7.0.0","resolved": "http://registry.npm.baidu-int.com/@babel%2fcode-frame/-/code-frame-7.0.0.tgz","integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==","dev": true,"requires": {"@babel/highlight": "^7.0.0"}},"@babel/core": {"version": "7.7.5","resolved": "http://registry.npm.baidu-int.com/@babel%2fcore/-/core-7.7.5.tgz","integrity": "sha1-rhMjzQNbUWApMwf1BkfoP4umL34=","dev": true,"requires": {"@babel/code-frame": "^7.5.5","@babel/generator": "^7.7.4","@babel/helpers": "^7.7.4","@babel/parser": "^7.7.5","@babel/template": "^7.7.4","@babel/traverse": "^7.7.4","@babel/types": "^7.7.4","convert-source-map": "^1.7.0","debug": "^4.1.0","json5": "^2.1.0","lodash": "^4.17.13","resolve": "^1.3.2","semver": "^5.4.1","source-map": "^0.5.0"},"dependencies": {"@babel/code-frame": {"version": "7.5.5","resolved": "http://registry.npm.baidu-int.com/@babel%2fcode-frame/-/code-frame-7.5.5.tgz","integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==","dev": true,"requires": {"@babel/highlight": "^7.0.0"}}}}
}

package.json文件记录你项目中所需要的所有模块。当你执行npm install的时候,node会先从package.json文件中读取所有dependencies信息,然后根据dependencies中的信息与node_modules中的模块进行对比,没有的直接下载,已有的检查更新(最新版本的nodejs不会更新,因为有package-lock.json文件,下面再说)。另外,package.json文件只记录你通过npm install方式安装的模块信息,而这些模块所依赖的其他子模块的信息不会记录。

package-lock.json文件锁定所有模块的版本号,包括主模块和所有依赖子模块。当你执行npm install的时候,node从package.json文件读取模块名称,从package-lock.json文件中获取版本号,然后进行下载或者更新。因此,正因为有了package-lock.json文件锁定版本号,所以当你执行npm install的时候,node不会自动更新package.json文件中的模块,必须用npm install packagename(自动更新小版本号)或者npm install packagename@x.x.x(指定版本号)来进行安装才会更新,package-lock.json文件中的版本号也会随着更新。

附:当package.json与package-lock.json都不存在,执行"npm install"时,node会重新生成package-lock.json文件,然后把node_modules中的模块信息全部记入package-lock.json文件,但不会生成package.json文件,此时,你可以通过"npm init --yes"来初始化生成package.json文件。

总结:

项目中引入的包版本号之前经常会加^号,每次在执行npm install之后,下载的包都会发生变化,为了系统的稳定性考虑,每次执行完npm install之后会创建或者更新package-lock文件。该文件记录了上一次安装的具体的版本号,相当于是提供了一个参考,在出现版本兼容性问题的时候,就可以参考这个文件来修改版本号即可。

package 与 package-lock文件的区别相关推荐

  1. [译] 理解 NPM 5 中的 lock 文件

    本文讲的是[译] 理解 NPM 5 中的 lock 文件, 原文地址:Understanding lock files in NPM 5 原文作者:Jiří Pospíšil 译文出自:掘金翻译计划 ...

  2. pycharm新建文件夹时新建python package和新建directory有什么区别?

    pycharm创建普通的directory和package时都是在硬盘上建立一个文件夹. 但是建package时会在这个文件夹中自动地生成一个空的__init__.py文件. python的一个包是一 ...

  3. yarn.lock 文件和 yarn install

    Yarn 是代码的包管理器. 它允许您与来自世界各地的其他开发人员一起使用和共享(例如 JavaScript)代码. Yarn 可以快速.安全.可靠地执行此操作,因此您无需担心. Yarn 允许您使用 ...

  4. rust: 引用第三方库(Cargo.toml、Cargo.lock文件)

    接下来我要使用随机数生成函数,这个函数在 rand 库中.我们在 Cargo.toml 文件中的依赖项中,加入对 rand 的依赖说明. [package] name = "game&quo ...

  5. yarn.lock 文件介绍

    这里填写标题 1. yarn.lock 文件介绍 1.1. package-lock.json 和 yarn.lock 1.2. yarn.lock 1.3. 问题引出 1.4. yarn.lock ...

  6. 【Ubuntu 学习】Package manager / Package management system 详解

    文章目录 1. 什么是 Package 2. 什么是 Package manager 2.1 有哪些常见的 Package manager 2.2 安装 package 的不同方式:编译后的二进制形式 ...

  7. 浅谈无缓存I/O操作和标准I/O文件操作区别 (转载)

    首先,先稍微了解系统调用的概念: 系统调用,英文名system call,每个操作系统都在内核里有一些内建的函数库,这些函数可以用来完成一些系统系统调用把应用程序的请求传给内核,调用相应的的内核函数完 ...

  8. linux中普通文件和块设备文件的区别

    1,概述 一直都搞不明白普通文件跟块文件的区别,总觉得一个普通的文件是存放在磁盘块上,那它既属于普通文件又属于块设备文件.刚好下午睡了一个大头觉,比较清醒,集中学习了下普通文件和块设备文件的区别和联系 ...

  9. lib和dll文件的区别和联系

    什么是lib文件,lib和dll的关系如何 (2008-04-18 19:44:37)      (1)lib是编译时需要的,dll是运行时需要的.  如果要完成源代码的编译,有lib就够了.  如果 ...

  10. 如何写sybase sql脚本文件_写一个删除lock文件的skill脚本

    Cadence软件使用过程中偶尔会遇到文件被lock的情况,这是Cadence软件对文件的一种保护措施,大部分情况都是对用户友好的,但是偶尔也会给用户带来困扰,给工作带来的一定的不便. 文件是如何被锁 ...

最新文章

  1. 是什么限制了我对Graphical abstract的想象力
  2. vault-使用kubernetes作为认证后端
  3. python绘制直方图根据不同分类_如何在python中绘制具有多个类别的直方图
  4. Spring MVC 中自定义视图 @Component 及 配置 多个视图解析器 Excel视图
  5. 说说计算机发展史在你的印象里都有哪些内容,鱼池宣讲 | 专题采访 第二期 | 过去的一年里,你印象深刻的事情有哪些?...
  6. python 支付宝个人账单_解析2018年度三大用户数据报告——网易云音乐、支付宝、微信...
  7. 2012年4月18日 新的开始
  8. WEKA “Detailed Accuracy By Class”和“Confusion Matrix”含义
  9. WebService学习笔记系列(四)
  10. 计算机函数left的用法,excel中的left函数怎么使用呢?
  11. Percona XtraBackup 安装介绍篇
  12. 欧姆龙cp1h指令讲解_欧姆龙cp1h常用指令学习(八)字符串处理指令
  13. maven环境变量的配置与idea中的配置
  14. SPSS Modeler 18.0 基本介绍
  15. linux每天凌晨备份文件
  16. 随机密码生成Python
  17. 盘点 11 月份 火火火 的 GitHub 项目
  18. Python 获取优惠券淘宝口令
  19. MAC下downie下载网页视频报错“转换错误”解决方案
  20. 2022.4.11-4.17 AI行业周刊(第93期):AI行业的困局

热门文章

  1. 大模型时代,RPA的冰与火之歌|产业特稿
  2. 白色的风信子——刘继荣
  3. 模拟电路设计(37)---集成化开关电源变换器
  4. 马哥Linux运维2013
  5. fm算法详解_FM算法原理分析与实践
  6. 管理型WordPress主机的6个显著特征
  7. wordpress 主机_您的虚拟主机PHP更新如何影响您的WordPress网站
  8. 数据仓库模型ETL架构(DWI/DWR/DM)
  9. python模拟报数游戏有n个人围成一圈,从0到n-1按顺序编号,从第一个人开始从1到k报数,报到k的人推出圈子,然后圈子缩小,从下个人继续游戏,问最后留下来的是几号?
  10. 手把手教你如何玩转Solr(包含项目实战)