如何持久化在 node_modules 中所做的更改?

Posted

技术标签:

【中文标题】如何持久化在 node_modules 中所做的更改?【英文标题】:How to persist changes made in node_modules? 【发布时间】:2020-01-09 23:26:37 【问题描述】:

我正在使用来自react-native-elementsCard,我摆脱了

image && ..... <BackgroundImage .....

部分是因为我想在图像下载之前添加一个占位符图像(活动指示器),这样我就不会在图像淡入之前看到一个空白区域。

不管怎样,我用另一个组件替换了那个部分,它刚刚击中了我——我的.gitignore 忽略了/node_modules。如果我要像对 Card 所做的那样进行更改,然后购买一台新计算机并克隆我的 repo,运行 npm install 不会为我的更改提供 npm 模块。

我该如何解决这个问题?我不想推送我的整个 node_modules 目录。另外,我考虑过基于Card 制作我自己的组件,但它有太多的依赖项和导入,如果我不需要,我也不想解决和复制到我的项目中.

【问题讨论】:

在 github 上 fork 该库,进行更改。在包 json 上使用它而不是 npm 版本 或者你可以尝试探索这个补丁模块npmjs.com/package/… 【参考方案1】:

由于您描述的原因,您永远不应该对 node_modules 进行更改,您的更改只是暂时的,如果您决定更新依赖项,您的更改将丢失。

根据您更改代码的原因,您可以做其他事情:

如果这是一项功能,您可以请求它来制作它们,或者为它们打开拉取请求 如果是错误,请为他们打开错误,或再次发出拉取请求以解决它

如果您想进行持久的更改,那么您必须根据他们的库创建自己的库(假设他们的许可证允许您这样做),这是一个非常糟糕的选择,您会丢失所有自动更新,并且错误修复。

你应该做的是你建议的,是你应该在他们的组件上构建一个包装器组件,在这种情况下你不会添加任何新的依赖项(他们使用的依赖项无论如何都会存在,除非你决定构建使用它们的依赖关系从头开始组件,在这种情况下,这不是一个 Wrapper 组件,而是一个全新的组件,如果你可以包装他们的组件来实现你想要的,请避免使用此选项)

【讨论】:

【参考方案2】:

我们已经通过创建 update_note_modules.sh(shell 可执行文件)文件解决了这个问题,并在每次 npm/yarn 安装后运行这个文件

第 1 步:将您的代码副本从 node_modules 保存到您的主应用程序文件夹。我们已经创建了“核心”文件夹并在那里保存副本

第 2 步:创建 update_note_modules.sh 文件

文件代码

echo "Updating react-native-dropdownalert"
cp core/react-native-dropdownalert/DropdownAlert.js node_modules/react-native-dropdownalert/DropdownAlert.js

echo "node_modules updated"

注意:路径会根据你的项目而改变

第 3 步:在每次 npm/yarn 安装后运行 update_note_modules.sh

只需将文件路径粘贴到终端并回车即可执行文件

/path to file/update_note_modules.sh

【讨论】:

这有时可能会奏效,但它非常非常脆弱——它做了很多假设。这不是最好的方法。【参考方案3】:

我会在这里推荐https://github.com/ds300/patch-package;制作补丁并将它们一致地应用于 node_modules 中的事物。通常对于从未推送到某些版本的软件包的修复很有用。

【讨论】:

这和一年前评论中的包是一样的,不是吗?

以上是关于如何持久化在 node_modules 中所做的更改?的主要内容,如果未能解决你的问题,请参考以下文章

如何还原某些用户在 GIT 存储库中所做的更改

如何下载 o 在本机反应中所做的应用程序? [关闭]

Firestore - 如何像我们在sql中所做的那样获取集合中的记录总数[重复]

如何刷新CDIView以反映在另一个CDIView中所做的更改?

如何在 python 的帮助下跟踪和显示 HDF5 文件中所做的不断变化

如何使用 Core Data 有效地保存 UI/主线程中所做的更改?