NPM5,package-lock.json 与 package.json 有什么区别?

2024-04-22

将NPM更新到版本5后,我发现package-lock.json包含 package.json 的文件。

这两个文件有什么区别?

有什么优点package-lock.json?


package.json 文件:列出您的项目所依赖的包。允许您使用语义版本控制规则指定项目可以使用的包的版本。

根据 npm 文档,

对于 npm 修改 node_modules 树或 package.json 的任何操作,都会自动生成 package-lock.json 。它描述了生成的确切树,以便后续安装能够生成相同的树,而不管中间依赖项更新如何。

该文件旨在提交到源存储库中,并用于多种目的:

  • 描述依赖关系树的单一表示,以便保证团队成员、部署和持续集成安装完全相同的依赖关系。

  • 为用户提供一种工具,可以“时间旅行”到 node_modules 的先前状态,而无需提交目录本身。

  • 通过可读的源代码控制差异来提高树更改的可见性。

基本上,package-lock.json 用于通过允许 npm 跳过先前安装的软件包的重复元数据解析来优化安装过程。

在 npm 5.x.x 之前,package.json 是项目的真实来源。 package.json 中存在的是法律。 npm 用户喜欢这种模型,并且非常习惯于维护他们的包文件。然而,当包锁第一次被引入时,它的表现却与许多人的预期相反。考虑到预先存在的包和包锁,对 package.json 的更改(许多用户认为是事实来源)并未反映在包锁中。

示例:包 A,版本 1.0.0 位于包和包锁中。在package.json中,A被手动编辑为1.1.0版本。如果认为 package.json 是真实来源的用户运行npm install,他们期望安装 1.1.0 版本。但是,尽管在 package.json 中列出了 v1.1.0,但仍安装了 1.0.0 版本。

示例:package-lock 中不存在模块,但 package.json 中确实存在该模块。作为将 package.json 视为事实来源的用户,我希望安装我的模块。但是,由于该模块不存在于 package-lock 中,因此未安装它,并且我的代码因找不到该模块而失败。

阅读有关 package-lock.json 的更多信息官方 npm 文档 https://docs.npmjs.com/files/package-lock.json!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NPM5,package-lock.json 与 package.json 有什么区别? 的相关文章

  • NPM 安装“在 M1 芯片上找不到模块‘node-darwin-arm64/package.json’”

    我知道这个问题已经被问到了不同的版本 但我还没有看到一个不涉及使用 Rosetta 安装或使用 zsh 伪造架构的解决方案 我使用 bash 并希望尽可能不处理 Rosetta 我是一个节点新手 正在努力找出失败的原因 节点 v16 14
  • Node.js 管理频繁变化的本地依赖项

    我目前正在开发我的第一个较大的 Node js 应用程序 该应用程序应该使用类似插件的依赖项尽可能模块化地工作 因为我处于开发的早期阶段 而且对节点也很陌生 所以这涉及大量的试验和错误 因此我需要经常重新启动应用程序 因此启动时间应尽可能短
  • webpack - require('node_modules/leaflet/leaflet.css')

    所以我正在尝试使用构建一个地图应用程序webpack and leaflet 我可以要求leaflet js从我的map js文件 但我无法在不出现错误的情况下调用 leaflet css 我现在的webpack config js好像 u
  • 从命令行更新具有固定依赖项的 npm 包

    我有一个带有更新的固定版本的 npm 包 package json 摘录示例 devDependencies someFixedVersionPackage 1 0 0 1 1 0 is latest anotherFixedVersion
  • 在 npm 脚本中匹配多个文件扩展名

    我有一个 npm 脚本 我想在其中匹配两者ts and tsx文件扩展名 如下所示 test mocha app test spec ts tsx 但是 上面的语法不起作用 执行此操作的正确语法是什么 你的模式是正确的 你的问题是你的 sh
  • 使用 npm 安装 font Awesome 5 以供 scs 使用

    就像标题所说 我无法出于 scss 目的使用 npm 安装 font Awesome 5 尝试安装版本5 根据https fontawesome com how to use use with node js https fontaweso
  • npm 安装失败并显示“子集不是函数”

    I have node v15 14 0 and npm 7 8 0 on Arch Linux x86 64 从该发行版的存储库安装 在空目录中启动项目npm init然后尝试安装一些东西npm i
  • 自动 npm install --legacy-peer-deps 用于单个依赖项

    假设我有一个package json像这样 name my app version 0 1 0 dependencies aws sdk client s3 3 21 0 testing library react 11 2 5 axios
  • 为什么 NPM 7.17 不安装我的对等依赖项

    我有一个main依赖于包的项目package1在本地文件存储中 package1同行取决于快递 name package1 version 1 0 0 description main index js scripts test echo
  • -bash: gulp: 在 Mac 中找不到命令

    我尝试在 mac 中安装 gulp 如下所示 Is iMac itop npm root Users itop node modules Is iMac itop npm config set prefix usr local Is iMa
  • JavaScript:解决意外字符“#”

    介绍 我的 React 应用程序可以执行npm run build在开发模式下 webpack config dev js 但不在生产模式下 webpack config prod js 抛出以下错误 Module parse failed
  • 创建shell可执行全局节点模块

    我尝试创建节点模块 我成功了 我用了npm install g在代码目录中 它创建了这个模块文件夹 AppData Roaming npm node modules myfirstmodule 现在我想让一个文件作为命令可执行 例如 pm2
  • npm install [package] 删除软件包

    npm install package 命令正在删除其他软件包 我必须运行 npm install 命令来重新安装它们 这是一项繁琐的任务 所有包都记录在 package json 和 package lock json 文件中 如果我 n
  • npm 脚本:node-sass 不监视部分 sass 文件

    我有这个项目结构 src assets css sass main scss variables scss 我正在尝试编写一个 npm 脚本 该脚本将监视我的所有 scss 文件 包括部分文件 中的更改 然后仅编译我的 main scss
  • sh:1:节点:权限被拒绝

    尝试在 ubuntu 18 04 上运行此命令 npm install g pngquant bin 但我得到了这个错误 fetchMetadata sill resolveWithNewModule email protected cdn
  • npm install 的 --save 选项是什么?

    我看到一些教程 其中命令是 npm install save 什么是 save选项是什么意思 更新 npm 5 As of npm 5 0 0 http blog npmjs org post 161081169345 v500 安装的模块
  • 无法启动 Angular-phonecat,安装后脚本失败[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我目前正在设置一个 vagrant box 来开始开发实验性的 node js angularjs 应用程序 由于我刚刚开始使用
  • Haskell Stack 从 github 安装包依赖项

    是否可以使用 Haskell 堆栈从 github 安装软件包的版本 例如在一个 cabal or a stack yaml文件 如何在 git repo branch revision 上指向依赖项 对于堆栈 The 的文档stack y
  • React-Native 打包器失败:模块名称重复

    这在开发过程中似乎是随机发生的 当尝试跑步时npm start or react native run ios 我收到以下错误 Failed to build DependencyGraph providesModule naming co
  • 安装后如何使用 npm 包 (chart.js)?

    我正在制作一个练习 Laravel 站点 并且我已经通过 npm install 安装了 Chart js 这是一个愚蠢的问题 但现在我如何从这里使用它 或通过 npm 安装的任何东西 这些文件安装在节点模块文件夹中 我应该在页眉中使用标签

随机推荐