package-lock.json 是否需要提交到版本控制,有什么作用? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cstome
V2EX    Node.js

package-lock.json 是否需要提交到版本控制,有什么作用?

  •  
  •   cstome 2018-10-31 17:04:51 +08:00 15421 次点击
    这是一个创建于 2586 天前的主题,其中的信息可能已经有所发展或是发生改变。

    两台电脑都是 node10 的版本,不知道为什么,每次 npm install,package-lock.json 都会有略微修改,比如:

    "acorn": "4.0.13" -> "acorn": "^4.0.3" 

    难道是一台电脑是 Win7,一台是 Win10 的缘故。

    之前一直都是把 package-lock.json 提交的,但是似乎也没什么用,能不能不要提交?

    11 条回复    2022-10-03 14:34:14 +08:00
    huijiewei
        1
    huijiewei  
       2018-10-31 17:06:03 +08:00
    当然提交啊,依赖版本统一化
    cstome
        2
    cstome  
    OP
       2018-10-31 17:06:39 +08:00
    @huijiewei #1 统一那为什么不同电脑 npm i 还会变
    yuanfnadi
        3
    yuanfnadi  
       2018-10-31 17:07:05 +08:00
    @cstome npm ci
    milklee
        4
    milklee  
       2018-10-31 17:08:48 +08:00
    跟 npm 的版本有关,可以在两台电脑上运行 npm -v 看看版本是否一致。另外如楼上所说,另一台电脑可以用 npm ci 根据 package-lock.json 安装依赖。npm i 是根据 package.json 安装的
    cstome
        5
    cstome  
    OP
       2018-10-31 17:11:52 +08:00
    @milklee #4
    @yuanfnadi #3

    但是 package.json 中的依赖也已经有版本描述啦,这样是否有些多余?

    你们平时用 ci 还是 i
    yuanfnadi
        6
    yuanfnadi  
       2018-10-31 17:15:17 +08:00
    @cstome npm ci 可以保证部署的时候代码是永远不变的。
    milklee
        7
    milklee  
       2018-10-31 17:16:27 +08:00
    不多余吧,npm ci 就不会改变 package-lock.json。拉别人的代码的时候会用 npm ci 初始化项目,加新依赖会用 npm i。如果其他人加过新依赖,也会用 npm ci 重新下载 node_modules
    milklee
        8
    milklee  
       2018-10-31 17:18:20 +08:00
    忘说了,踩过 npm 的无数坑之后,我已经换用 yarn 很久了...
    will0404
        9
    will0404  
       2018-10-31 17:21:35 +08:00   1
    如果你不知道为什么 npm i 会导致版本变化,那给你简单解释一下。

    假设你依赖某个包 A,你的 package.json 里写的"A": "~1.0.1",那么当 A 有 patch update 的时候你再次 npm install,你装下来的就是新版,也许是 1.0.2。
    同理,^对应包的 minor update,*对应 major update。

    如果不明白我在说什么的话去看一下 semver: https://docs.npmjs.com/misc/semver

    你要想依赖的版本永远不变,不随着包管理者的更新而更新,就把版本号写死,那就不需要 lock 文件了。
    issiki
        10
    issiki  
       2018-11-22 14:36:53 +08:00
    你可以看一下这个,虽然说的是 yarn,但道理是一样的 https://github.com/yarnpkg/yarn/issues/1583
    charlie21
        11
    charlie21  
       2022-10-03 14:34:14 +08:00
    `yarn install --frozen-lockfile` 会根据 lock file 安装第三方包,这样呢 lock file 本身也不会被更新了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2574 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 07:43 PVG 15:43 LAX 23:43 JFK 02:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86