zoukankan      html  css  js  c++  java
  • packagelock.json 有何作用,如果没有会出现什么问题

    package-lock.json的作用

    用一句话来概括很简单,就是锁定安装时的包的版本号,并且需要上传到git,以保证其他人在npm install时大家的依赖能保证一致。

    根据官方文档,这个package-lock.json 是在 `npm install`时候生成一份文件,用以记录当前状态下实际安装的各个npm package的具体来源和版本号。

    它有什么用呢?因为npm是一个用于管理package之间依赖关系的管理器,它允许开发者在pacakge.json中间标出自己项目对npm各库包的依赖。你可以选择以如下方式来标明自己所需要库包的版本

    这里举个例子:

    "dependencies": {
     "@types/node": "^8.0.33",
    }

    ~和^的区别

    • ~会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0
    • ^会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0
    那么该如何选择呢?当然你可以指定特定的版本号,直接写1.2.3,前面什么前缀都没有,这样固然没问题,但是如果依赖包发布新版本修复了一些小bug,那么需要手动修改package.json文件;~^则可以解决这个问题。

    但是需要注意^版本更新可能比较大,会造成项目代码错误,所以建议使用~来标记版本号,这样可以保证项目不会出现大的问题,也能保证包中的小bug可以得到修复。

    版本号写*,这意味着安装最新版本的依赖包,但缺点同上,可能会造成版本不兼容,慎用

    总结

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

    原来package.json文件只能锁定大版本,也就是版本号的第一位,并不能锁定后面的小版本,你每次npm install都是拉取的该大版本下的最新的版本,为了稳定性考虑我们几乎是不敢随意升级依赖包的,这将导致多出来很多工作量,测试/适配等,所以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一下才对。

  • 相关阅读:
    Multi-Tenancy模式,基础服务大规模扩张的时候,是应该推进了。
    Python中的tuple
    Create and Call HttpHandler in SharePoint
    各种数据库(oracle、mysql、sqlserver等)在Spring中数据源的配置和JDBC驱动包
    BNU 34986 Football on Table
    Effective JavaScript Item 31 优先使用Object.getPrototypeOf,而不是__proto__
    POJ 3080 Blue Jeans (后缀数组)
    HDU 2586 How far away ?(LCA模板 近期公共祖先啊)
    自己主动化的在程序中显示SVN版本号
    在Mac OS X中部署Tomcat的经验
  • 原文地址:https://www.cnblogs.com/zjianfei/p/15217416.html
Copyright © 2011-2022 走看看