范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

package。json与packagelock。json的关系

  模块化开发在前端越来越流行,使用 node 和 npm 可以很方便的下载管理项目所需的依赖模块。package.json 用来描述项目及项目所依赖的模块信息。
  那 package-lock.json 和 package.json 有啥关系和联系呢?package.json管理包
  大家都知道,package.json 用来描述项目及项目所依赖的模块信息。,就是帮我们管理项目中的依赖包的,让我们远离了依赖地狱。
  通过 npm 管理,使用一些简单的命令,自动生成package.json, 安装包依赖关系都由package.json来管理,我们几乎不必考虑它们。语义版本控制
  首先我们先来了解下依赖包的版本号的定义
  版本号由三部分组成:major.minor.patch,主版本号.次版本号.修补版本号。
  例如:1.2.3,主要版本1,次要版本2,补丁3。补丁中的更改表示不会破坏任何内容的错误修复。次要版本的更改表示不会破坏任何内容的新功能。主要版本的更改代表了一个破坏兼容性的大变化。 如果用户不适应主要版本更改,则内容将无法正常工作。安装依赖包的版本如何指定
  相信大家都会经历过,我们安装一些依赖包的时候,版本号前面都会带 ^ 或者 ~ 的符号,这两个符号代表什么意思呢?
  ~ 会匹配最近的小版本依赖包,比如 ~1.2.3 会匹配所有 1.2.x 版本,但是不包括 1.3.0
  ^ 会匹配最新的大版本依赖包,比如 ^1.2.3 会匹配所有 1.x.x 的包,包括 1.3.0,但是不包括 2.0.0
  * 安装最新版本的依赖包,比如 *1.2.3 会匹配 x.x.x,
  那么该如何选择呢?当然你可以指定特定的版本号,直接写1.2.3,前面什么前缀都没有,这样固然没问题,但是如果依赖包发布新版本修复了一些小bug,那么需要手动修改package.json文件;~ 和 ^ 则可以解决这个问题。
  但是需要注意 ^ 版本更新可能比较大,会造成项目代码错误,所以 建议使用 ~ 来标记版本号,这样可以保证项目不会出现大的问题,也能保证包中的小bug可以得到修复。
  版本号写 *,这意味着安装最新版本的依赖包,但缺点同上,可能会造成版本不兼容,慎用!多人开发时依赖包安装的问题
  看了上面版本号的指定后,我们可以知道,当我们使用了 ^ 或者 ~ 来控制依赖包版本号的时候 ,多人开发,就有可能存在大家安装的依赖包版本不一样的情况,就会存在项目运行的结果不一样。
  我们举个例子:
  假设我们中安装了 vue, 当我们运行安装 npm install vue -save 的时候,在项目中的package.json 的 vue 版本是 vue: ^3.0.0, 我们电脑安装的vue版本就是 3.0.0 版本,我们把项目代码提交后,过了一段时间,vue 发布了新版本 3.0.1,这时新来一个同事,从新 git clone 克隆项目,执行 npm install安装的时候,在他电脑的vue版本就是 3.0.1了,因为^只是锁了主要版本,这样我们电脑中的vue版本就会不一样,从理论上讲(大家都遵循语义版本控制的话),它们应该仍然是兼容的,但也许 bugfix 会影响我们正在使用的功能,而且当使用vue版本3.0.0和3.0.1运行时,我们的应用程序会产生不同的结果。
  大家思考思考,这样的话,不同人电脑安装的依赖版项目,是不是都有可能不一样,就会导致每个人电脑运行的应用程序产生不同的结果。就会存在bug的隐患。
  这时也许有同学想到,那么我们在package.json上面锁死依赖包的版本号不就可以了? 直接写 vue: 3.0.0锁死,这样大家安装vue的版本都是3.0.0版本了。
  这个想法固然是不错的,但是你只能控制你自己的项目锁死版本号,那你项目中依赖包的依赖包呢?你怎么控制限制别人锁死版本号呢?
  为了解决这个不同人电脑安装的所有依赖版本都是一致的,确保项目代码在安装所执行的运行结果都一样,这时 package-lock.json 就应运而生了。package-lock.json
  package-lock.json 是在 npm(^5.x.x.x)后才有,中途有几次更改介绍
  官方文档是这样解释的:package-lock.json 它会在 npm 更改 node_modules 目录树 或者 package.json 时自动生成的 ,它准确的描述了当前项目npm包的依赖树,并且在随后的安装中会根据 package-lock.json 来安装,保证是相同的一个依赖树,不考虑这个过程中是否有某个依赖有小版本的更新。
  它的产生就是来对整个依赖树进行版本固定的(锁死)。
  当我们在一个项目中npm install时候,会自动生成一个package-lock.json文件,和package.json在同一级目录下。package-lock.json记录了项目的一些信息和所依赖的模块。这样在每次安装都会出现相同的结果. 不管你在什么机器上面或什么时候安装。
  当我们下次再npm install时候,npm 发现如果项目中有 package-lock.json 文件,会根据 package-lock.json 里的内容来处理和安装依赖而不再根据 package.json。
  注意,使用cnpm install时候,并不会生成 package-lock.json 文件,也不会根据 package-lock.json 来安装依赖包,还是会使用 package.json 来安装。package-lock.json 生成逻辑
  简单描述一下 package-lock.json 生成的逻辑。假设我们现在有三个 package,在项目 lock-test中,安装依赖A,A项目面有B,B项目面有C// package lock-test { "name": "lock-test", "dependencies": { "A": "^1.0.0" }} // package A { "name": "A", "version": "1.0.0", "dependencies": { "B": "^1.0.0" }} // package B { "name": "B", "version": "1.0.0", "dependencies": { "C": "^1.0.0" }} // package C { "name": "C", "version": "1.0.0" }
  在这种情况下 package-lock.json, 会生成类似下面铺平的结构// package-lock.json {      "name": "lock-test",       "version": "1.0.0",       "dependencies": {             "A": { "version": "1.0.0" },         "B": { "version": "1.0.0" },         "C": { "version": "1.0.0" }       } }
  如果后续无论是直接依赖的 A 发版,或者间接依赖的B, C 发版,只要我们不动 package.json, package-lock.json 都不会重新生成。
  A 发布了新版本 1.1.0,虽然我们 package.json 写的是 ^1.0.0 但是因为 package-lock.json 的存在,npm i 并不会自动升级,
  我们可以手动运行 npm i A@1.1.0 来实现升级。
  因为 1.1.0 package-lock.json 里记录的 A@1.0.0 是不一致的,因此会更新 package-lock.json 里的 A 的版本为 1.1.0。
  B 发布了新版本 1.0.1, 1.0.2, 1.1.0, 此刻如果我们不做操作是不会自动升级 B 的版本的,但如果此刻 A 发布了 1.1.1,虽然并没有升级 B 的依赖,但是如果我们项目里升级 A@1.1.1,此时 package-lock.json 里会把 B 直接升到 1.1.0 ,因为此刻^1.0.0的最新版本就是 1.1.0。
  经过这些操作后 项目 lock-test 的 package.json 变成// package  lock-test{ "dependencies": { "A": "^1.1.0" }}
  对应的 package-lock.json 文件{       "name": "lock-test",       "version": "1.0.0",     "dependencies": {           "A": { "version": "1.1.0" },         "B": { "version": "1.1.0" },         "C": { "version": "1.0.0" }     } }
  这个时候我们将 B 加入我们 lock-test 项目的依赖, B@^1.0.0,package.json如下{ "dependencies": { "A": "^1.1.0", "B": "^1.0.0" }}
  我们执行这个操作后,package-lock.json 并没有被改变,因为现在 package-lock.json 里 B@1.1.0 满足 ^1.0.0 的要求
  但是如果我们将 B 的版本固定到 2.x 版本, package-lock.json 就会发生改变{ "dependencies": { "A": "^1.1.0", "B": "^2.0.0" }}
  因为存在了两个冲突的B版本,package-lock.json 文件会变成如下形式{       "name": "lock-test",     "version": "1.0.0",       "dependencies": {             "A": {                   "version": "1.1.0",                   "dependencies": {                         "B": { "version": "1.1.0" }                   }             },             "B": { "version": "2.0.0" },             "C": { "version": "1.0.0" }       } }
  因为 B 的版本出现了冲突,npm 使用嵌套描述了这种行为
  我们实际开发中并不需要关注这种生成的算法逻辑,我们只需要了解,package-lock.json 的生成逻辑是为了能够精准的反映出我们 node_modules 的结构,并保证能够这种结构被还原。package-lock.json 可能被意外更改的原因package.json 文件修改了挪动了包的位置
  将部分包的位置从 dependencies 移动到 devDependencies 这种操作,虽然包未变,但是也会影响 package-lock.json,会将部分包的 dev 字段设置为 trueregistry 的影响
  经过实际使用发现,如果我们 node_modules 文件夹下的包中下载时,就算版本一样,安装源 registry 不同,执行 npm i 时也会修改 package-lock.json
  可能还存在其他的原因,但是 package-lock.json 是不会无缘无故被更改的,一定是因为 package.json 或者 node_modules 被更改了,因为 正如上面提到的 package-lock.json 为了能够精准的反映出我们 node_modules 的结构开发的建议
  一般情况下 npm install 是可以的,他能保证根据 package-lock.json 还原出开发时的 node_modules。
  但是为了防止出现刚刚提到的意外情况,除非涉及到对包的调整,其他情况下建议使用 npm ci 来安装依赖,会避免异常的修改 package-lock.json,
  持续集成工具中更推荐是用 npm ci,保证构建环境的准确性,npm i 和 npm ci 的区别 可以参考官方文档 npm-ci

iPhone没那么香了?五大手机品牌换机忠诚度出炉,苹果仅位列第四现在已经是8月底,到了9月份,苹果就将发布iPhone13系列,据悉今年备货超过9000万台,以满足全球果粉们的换机需求。不少人选择iPhone的原因,是因为苹果手机有着强大的处理新一代折叠屏力作三星GalaxyZFold35G让手机体验更完善折叠屏手机的出现,不仅带来了智能手机全新的发展方向,更重新定义了智能手机的使用方式。相较于传统的直屏手机,折叠屏手机拥有更大的屏幕优势和更便捷的交互方式,因而带来了截然不同的使用体盘点四款一步到位的5G手机,用着放心,三五年都不过时其实当下对于那些经济水平不错的人来说还是会首先考虑高端旗舰手机,至于为何?原因也很简单,这些用户就是想买到一款让人感到放心的机型,从而得到更好的体验感。不妨就来看看一下几几部手机。从百元到旗舰,各价位手机的最佳选择,一篇文章告诉你一01000元价位1红米9A电池比较大价格也比较便宜,并且对老人机做了专门的适配,就比如扬声器的声音比较大,收音机不用插耳机就可以使用。适配了MIUI12的老年版,桌面更加简洁,图骁龙855换新手机,选择骁龙870还是骁龙888?我从没想过这个问题有什么好纠结,我们现在可以将买手机的人分为3种1。不打游戏者,在预算充足的情况下可以选择目前旗舰(三星s21ultra,findx3pro,一加9pro,魅族18中国电信被错杀,短视的资本还认识不到天翼云的价值涨停跌停再跌停暴跌暴跌回A上市以来,巨无霸中国电信股价走势上演了惊天反转戏码上市首日,中国电信开盘后跳水,一度逼近发行价,随后可能是游资投机,股价直线拉升至涨停,单日涨幅近34。8每经11点丨国家广电总局停止播出郑爽已参与制作的节目网信办算法推荐服务提供者不得利用算法屏蔽信息过度推荐操纵榜单每经编辑张喜威1丨网信办算法推荐服务提供者不得利用算法屏蔽信息过度推荐操纵榜单每经AI快讯,8月27日,网信办就互联网信息服务算法推荐管理规定(征求意见稿)公开征求意见。意见提出,智能门锁的崛起TCL可视安全智能锁引领未来发展趋势8月26日,以看得见的安全感为主题的TCL可视安全智能锁秋季新品发布直播圆满落幕,TCL3D人脸识别猫眼锁X7STCL3D人脸识别智能锁X7以及TCLNFC全自动智能锁P12等秋季拥有教育机顶盒,让孩子在教育机顶盒中欢乐学习七八十年代,家中拥有一台电视,往往是富贵的象征。而在不断发展的现代社会中,电视已经成为每家每户都不可缺少的家用电器,有些家庭还不止拥有一台电视机。那么在电视机盛行的时代,也慢慢出现智能手机什么时候让你觉得是智障手机?这哪是智能手机,简直就是智障,还好意思说是智能的,你咋不上天呢!如果您喜欢我的回复,请关注我(匠心志)来安慰一下我这幼小的心灵搬运一下微博现在手上的手机是荣耀magic,还没有出现2021年买菜APP十大品牌分析报告思瀚产业研究院盒马生鲜盒马鲜生是阿里巴巴对线下超市完全重构的新零售业态。盒马是超市,是餐饮店,也是菜市场,但这样的描述似乎又都不准确。消费者可到店购买,也可以在盒马App下单。而盒马最大的特点之
矿视界译文EIP1559上线后的效果如何?自EIP1559激活以来,以太坊网络已经销毁了超过20,000ETH,这占同期新代币发行量的36,以太坊的平均交易手续费略有增加,从升级前的0。003ETH上涨至0。005ETH。经典在延续,雷蛇黑寡妇蜘蛛精英版简评作为雷蛇键盘热门黑寡妇蜘蛛系列最新版本,也是黑寡妇蜘蛛的新旗舰,雷蛇自然对这把键盘寄予了很高的期望。旗舰这两个字所能代表的就是一个品牌的最高水准,品牌也会不遗余力的拿出看家的本事,手感再次优化,经典双模108机械GANSSGM108D到站秀34期GANSS的GM108D的立足之本是性价比有线蓝牙双模PBT热升华和双口USBHUB。通过整体配置,结合樱桃轴体打造差异化,最近针对大键做了一次手感优化,提升顺畅度降低触底噪音,整专业FPS游戏键盘,金士顿HyperX阿洛伊键盘解读作为金士顿进军机械键盘领域的首款键盘,金士顿HyperX阿洛伊这款键盘可谓是肩负重任。在其它硬件厂商已经在机械键盘领域站稳了脚跟,取得了不错的成绩,金士顿的这款键盘才姗姗来迟。Hy摇杆式另类侧键,小鸡GM200独特的游戏鼠标外设是一个科技技术门槛不高的领域,找对自己的定位角度,进入并不难。所以我们能够看到如今各大硬件板卡厂商纷纷推出自己的外设产品,其中也不乏精品。对于消费者来说提供了更多的选择性,其中它号称文武双全,雷蛇刺鳞树蝰鼠标这款刺鳞树蝰是雷蛇的第二款蓝牙鼠标(第一款为八岐大蛇),虽然不是最新产品,但是融合三模的它也是雷蛇无线产品与时俱进的表现,PMW3339引擎,2。4G蓝牙双无线,至少在35年内可以全金属机身的机械键盘能做到多么简洁,IQUNIXF60sIQUNIX一直坚持的苹果风式简约设计和习惯用金属作为产品主要材质而被广大用户调侃为铝厂,与刚厂赛睿灯厂雷蛇画厂QPAD这些外设品牌称呼类似,说明IQUNIX与外设是有所特色,并形矿视界译文如何挑选Chia矿池自上个月新Chia矿池协议上线后,市面上陆续出现了许多Chia矿池。选择一个安全可靠的矿池对于挖矿来说是至关重要的,因此矿工在加入一个矿池之前需要多方比较,仔细做些功课,不能仅仅关矿视界译文除了存储,Filecoin上还有哪些商机?云服务界的AirbnbFilecoin和Airbnb(爱彼迎,全球最大的旅行房屋租赁社区)其实有不少共同点Airbnb屋主为旅客提供自己的房屋,Filecoin存储矿工为用户提供自矿视界译文IPFS助推NFT浪潮我们在2021年见证了NFT的大爆发,NFT的核心价值主张是持久性(Permanence)和不可变性(Immutability)。然而,由于设计缺陷,市面上许多用于出售的NFT都做高阶自动驾驶的量产车型摩卡预售17。984月19日,WEY品牌全球代言人WEY摩卡首席智能体验官姚安娜,空降上海车展智动WEY来摩卡专属日,携手全球首款智能汽车人WEY摩卡,为现场粉丝呈现了车展史上自动驾驶走秀,书写了其