首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Node.js
Express
PPA for Ubuntu
ppa:chris-lea/node.js
V2EX  ›  Node.js

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

  •  
  •   cstome · 230 天前 · 2936 次点击
    这是一个创建于 230 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    10 回复  |  直到 2018-11-22 14:36:53 +08:00
        1
    huijiewei   230 天前
    当然提交啊,依赖版本统一化
        2
    cstome   230 天前
    @huijiewei #1 统一那为什么不同电脑 npm i 还会变
        3
    yuanfnadi   230 天前
    @cstome npm ci
        4
    milklee   230 天前
    跟 npm 的版本有关,可以在两台电脑上运行 npm -v 看看版本是否一致。另外如楼上所说,另一台电脑可以用 npm ci 根据 package-lock.json 安装依赖。npm i 是根据 package.json 安装的
        5
    cstome   230 天前
    @milklee #4
    @yuanfnadi #3

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

    你们平时用 ci 还是 i
        6
    yuanfnadi   229 天前
    @cstome npm ci 可以保证部署的时候代码是永远不变的。
        7
    milklee   229 天前
    不多余吧,npm ci 就不会改变 package-lock.json。拉别人的代码的时候会用 npm ci 初始化项目,加新依赖会用 npm i。如果其他人加过新依赖,也会用 npm ci 重新下载 node_modules
        8
    milklee   229 天前
    忘说了,踩过 npm 的无数坑之后,我已经换用 yarn 很久了...
        9
    will0404   229 天前   ♥ 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 文件了。
        10
    issiki   208 天前
    你可以看一下这个,虽然说的是 yarn,但道理是一样的 https://github.com/yarnpkg/yarn/issues/1583
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3876 人在线   最高记录 5043   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 19ms · UTC 09:12 · PVG 17:12 · LAX 02:12 · JFK 05:12
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1