React Native:是否可以避免将所有依赖项存储在 node_modules 子文件夹中

ReactNative: is it possible to avoid storing all dependencies in node_modules subfolder

我对 ReactNative 很陌生,很抱歉,如果它很明显,但是..

每个通过 CLI 初始化的 RN 项目都有大量节点模块存储在 project_root/node_modules 中。不是我会介意,但如果你有几个项目,它似乎是多余的并且占用 time/space 将它移动到源版本控制系统。

难道不能从机器上的通用 node_modules 检索所有这些相同的模块吗?

您永远不想在源代码管理中存储嵌套在 node_modules 中的依赖项……它通常会破坏版本控制和依赖项的全部目的。您的 package.json 文件将指定版本,因此当您 运行 npm install 它确切地知道要获取哪些依赖项。

作为替代方案,Yarn 是 Facebook 开发的一个新兴的软件包客户端,它可以更好地在本地缓存您的软件包,因此如果多个项目重用相同的依赖项,它仍然可以满足将它们保留在 node_modules 中的需要,但不需要为每个项目执行 http 请求。

Yarn 不会取代 NPM 作为包注册表,只是一个更好的客户端来下载、维护和缓存这些包。

Yarn 还添加了一个 yarn.lock 文件(类似于 Ruby 的 Gemfile.lock),允许您锁定应用程序中使用的特定版本,而不管 package.jsonThis file can be stored in version control,这可能是您希望通过在版本控制中保存 node_modules 来实现的。

一些不错的读物...

我赞同 Brad 的回答:不要将 node_modules 放入版本控制中。 npm install 将从 package.json 安装正确的版本。只需将 package.json 放入版本控制中,而不是 node_modules.

但是,如果您仍想节省磁盘 space,您可以使用 link 选项将一些依赖项安装在一般 node_modules 文件夹中:

npm config set link true -g

您可以在此处阅读有关 link 的更多信息:https://docs.npmjs.com/misc/config#link

请注意,在使用此选项时,您不得在您的版本控制中包含node_modules,因为npm会将symlinks node_modules 中的全局安装包。全局安装位置因机器而异,因此如果 node_modules 在版本控制中,它可能 link 到不存在的位置。