问个 npm install 的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hello2090
V2EX    Node.js

问个 npm install 的问题

  •  
  •   hello2090 2023-11-06 07:58:14 +08:00 2880 次点击
    这是一个创建于 706 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Angular 做的不多,问题可能比较简单,大家别笑话。

    创建了一个 NODE 项目以后有了一个 PACKAGE.JSON, 定义了项目的 DEPENDENCY, NPM INSTALL 了之后有了 PACKAGE-LOCK.JSON. 里面是 NPM INSTALL 安装的具体版本。

    那我现在把项目放到 GIT 上,别的 TEAM MEMBER 拿到 CODE, 他们第一次运行,需要保证他们使用/安装的版本和我的一样,是使用NPM INSTALL吗?我在 STACKOVERFLOW 上看到说可以使用NPM CI, 这个命令会检查安装的版本和 PACKAGE-LOCK 里面的版本是一致的。请问是应该使用这个命令吗?谢谢

    19 条回复    2023-11-06 14:26:48 +08:00
    SchneeHertz
        1
    SchneeHertz  
       2023-11-06 08:34:36 +08:00
    npm install 就可以
    sengle
        2
    sengle  
       2023-11-06 08:37:28 +08:00
    是的,使用 npm ci [会用且只会用] package-lock.json 里面的固定的依赖版本进行安装,保证环境一致。( npm install 在存在 lock 文件时是优先使用 lock 中的依赖版本进行安装)
    musi
        3
    musi  
       2023-11-06 08:40:44 +08:00   1
    不懂就问,除了 Angular 这个单词为啥其他的单词都大写
    0xsui
        4
    0xsui  
       2023-11-06 08:47:49 +08:00
    npm 比较慢,建议用 pnpm ,另外,
    npm 依赖版本锁定要保留 package-lock.json;
    pnpm 要保留 pnpm-lock.yaml
    tutou
        5
    tutou  
       2023-11-06 09:16:56 +08:00
    @sengle npm install 的话,就算存在 lock 文件,有时也会升级版本的
    Baymaxbowen
        6
    Baymaxbowen  
       2023-11-06 09:26:16 +08:00
    可以把 package 里面,依赖包的版本号前面的 ^去掉,强制锁定版本
    crysislinux
        7
    crysislinux  
       2023-11-06 09:27:33 +08:00 via Android
    5 楼说的对,要想完全按照 lock 文件装需要用 npm ci
    hello2090
        8
    hello2090  
    OP
       2023-11-06 09:39:46 +08:00 via iPhone
    @musi 哈哈,切换大小写和中文感觉很麻烦,搞糊涂了,后面干脆都大写了
    zqx
        9
    zqx  
       2023-11-06 10:05:12 +08:00 via Android
    6 楼的方法,无法锁定依赖的依赖的版本
    zhhbstudio
        10
    zhhbstudio  
       2023-11-06 10:14:08 +08:00
    npm ci 不会安装 devdependencies [开发依赖] 只会安装 dependencies [运行依赖] 。我理解还是确认好版本号,不使用 ^ ~ 等标记,锁死版本。
    当然实际情况下我都直接 npm i[nstall] 。版本号也不管,实际没出过问题。
    fqy12300
        11
    fqy12300  
       2023-11-06 10:17:52 +08:00
    @tutou npm install package 可以同时修改 package-lock.json 和 package.json ,而不带参数的 npm install 只会修改 package-lock.json
    fqy12300
        12
    fqy12300  
       2023-11-06 10:21:17 +08:00
    @crysislinux npm install 不带参数,是不会升级版本的。
    fqy12300
        13
    fqy12300  
       2023-11-06 10:24:03 +08:00
    @zhhbstudio package-lock.json 已经帮你锁死版本了。
    yzqn
        14
    yzqn  
       2023-11-06 10:26:30 +08:00
    @sengle “npm install 在存在 lock 文件时是优先使用 lock 中的依赖版本进行安装”,请问 lock 文件的作用是什么呢
    IvanLi127
        15
    IvanLi127  
       2023-11-06 10:51:14 +08:00 via Android
    只要附带 lock 文件就行了,对方只要是开发就执行 npm i 。
    zhhbstudio
        16
    zhhbstudio  
       2023-11-06 11:21:39 +08:00
    @fqy12300 #13 我记得比如你的 package.json 中有 a@^1.1.1 ,当你安装后 lock 文件中锁定版本也是这个,当新版本 [email protected] 发布后,npm install 会安装 [email protected] 的。
    我去实际试一下。
    v2AKS
        17
    v2AKS  
       2023-11-06 12:49:57 +08:00
    npm install 时会按照你 package.json 里依赖的版本锁定符号("^" "~" ""),自动升级 package-lock.json 。如果不想自动升级,可以用 npm ci ,ci 会先删除依赖文件夹然后跳过读取 package.json ,直接安装 package-lock.json 里指定的版本

    老实说 nodejs 这块确实有诟病,想固定依赖基本上都得在 package.json 锁定版本,万一有的父依赖的子依赖有安全隐患,后续这个子依赖升级修复了,但是那个父依赖没升级,你想避免隐患的话只能去 package-lock.json 改子依赖的版本,然后一改就只能用 npm ci 安装,因为用 npm i 会自动修正
    v2AKS
        18
    v2AKS  
       2023-11-06 12:55:11 +08:00
    我之前修过一阵子依赖安全问题,经常遇到上述的情况,最后的手段就是手动在 package-lock.json 里锁定各个依赖的版本,然后只要这些父依赖没更新,这个项目就得一直用 npm ci 安装依赖
    zhhbstudio
        19
    zhhbstudio  
       2023-11-06 14:26:48 +08:00
    @fqy12300 #13 #16 好像各个版本不同,最新版本是会锁死的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2710 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 12:06 PVG 20:06 LAX 05:06 JFK 08:06
    Do have faith in what you're doing.
    ubao 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