Nodejs的node_modules是否应该加入版本控制

Nodejs的node_modules是否应该加入版本控制

团队有 win 和 mac,会有冲突吗

35 回复

原则上说不应该


加了要死的,那么多文件。。

。。。。为什么要加,这个完全不符合逻辑呀
你统计下 node_modules,100-200M,几万个文件

这个目录不是相当于 java 的 jar 依赖嘛… 依赖当然不传, build 之前自己 install 啊

你可能是需要 npm skrinkwrap 搜索一下就知道了

不要。

如果你想控制依赖的具体的版本可以用 yarn。

依赖管理应该只要 package.json 就行了

yarn lock, npm shrinkwrap

yarn 大法好

yarn.lock +1

package.json 里面的依赖写对就行

会冲突,最典型的就是 node-sass,它是先下载 c 语言源码,然后本地调用编译器进行编译的。别说不同系统,就是不同的 node 版本都要 rebuild 才行

package.json 加入版本控制就好,svn 或 git 去管理 package,package 再去管理 node_modules 就好。职责分明。

不把依赖加进版本库,当你们依赖的库再次出现了 left-pad 事件,或者库的作者帐号被盗,被植入了恶意代码,你们要如何处理?

yarn 大法好

no,Git 里文件只要自己的代码就好了,第三方的用的时候在线安装

yarn 大法好

别学 google 的 one source tree 邪教

这种问题当然是通过 npm 私有仓库来解决了。

node_modules 为什么用加入版本控制,package.json 放进去不叫好了吗?

不应该,我记得 package.json 加上就行了

不用,存 package.json 就行了。

然而我司居然把 node_modules 文件夹压缩之后加入版本控制了。

刚做项目不久,领导周末打电话问我:"项目里面 xx 插件是谁加的?怎么没打入压缩包内?现在构建版本都报错了你说怎么办????"

我说领导你 npm install 一下就行了…

不应该
那么多文件。控制起来。是失控。。
直接 package.json 就可以了啦。
整个团队保持一样的 package.json 基本没啥问题的。

yarn.lock 正解

不要加入版本控制,但是一定要归档。否则哪天 npm 上的项目被删了。。

https://github.com/github/gitignore/blob/master/Node.gitignore
参考 github 的.gitignore 模板

是不加入版本控制的

其实有一种折衷的方法,我最近在使用,也是 facebook 内部很多项目的用法,就是把 npm 包压缩,然后 offline 安装。
yarn 自带这个功能,可以参考这篇博客: https://yarnpkg.com/blog/2016/11/24/offline-mirror/

当你有 N 多环境需要 npm install,然后依赖又特别多的时候你们就知道痛苦了,开发环境,测试环境,CI 环境……
万一有的环境没有网络那又怎么办?其实依赖也进版本控制并不是一件不可接受的事,golang 项目的 vendor 一般也是推荐放进版本控制的。

现在已经不可能被删了

为什么这个板块儿颜色不一样~~

看场景吧。

我们的自动部署都是实时 install + run,目标文件生成以后还会把这个文件夹删掉。

补充上一条:我们只用于前端生成 JS 和 CSS。以 nodejs 为后端的项目是不是运行时依赖不太确定。

原则上不需要加,但是 require 必须写死版本号。如果你不想本地跑的好好的,上线发现洗洗睡了的话。。。

在Node.js项目中,通常不建议将node_modules目录加入版本控制(如Git)。这是因为node_modules目录包含了项目依赖的所有npm包,而这些包通常可以通过package.jsonpackage-lock.json(或yarn.lock,如果使用Yarn)文件来精确管理。

原因:

  1. 体积庞大node_modules目录可能包含大量的文件和目录,导致仓库体积迅速增大,影响克隆和拉取速度。

  2. 依赖管理package.jsonpackage-lock.json已经足够记录项目所需的依赖及其确切版本。这些文件确保了在不同环境和时间点上安装相同版本的依赖。

  3. 跨平台兼容性:直接提交node_modules可能导致跨平台兼容性问题,因为某些包可能会编译为特定平台的二进制文件。

建议:

.gitignore文件中添加以下行,以避免将node_modules目录加入版本控制:

/node_modules/

示例.gitignore

# Node.js
node_modules/
npm-debug.log
yarn-error.log
.npmrc

总结:

通过package.jsonpackage-lock.json管理依赖,并在.gitignore中排除node_modules目录,是Node.js项目中的最佳实践。这样做既保持了仓库的整洁和高效,又确保了依赖的一致性和可重复性。

# 安装依赖的命令
npm install
# 或者使用 Yarn
yarn install
回到顶部