如何覆盖 node_modules 中的文件或函数

Posted

技术标签:

【中文标题】如何覆盖 node_modules 中的文件或函数【英文标题】:How to override file or function inside node_modules 【发布时间】:2019-09-05 18:30:50 【问题描述】:

我需要从位于“node_modules”中的依赖项中替换一个文件。直接修改 node_modules 不是一个好习惯,因为它会被下一个“npm install”覆盖。 如何在不触摸“node_modules”的情况下替换此类文件?例如,我们可以用打字来做到这一点。但是其他文件呢?

就我而言,我想替换“foo.component.less”和“foo.component.metadata.json”文件。仅在主机中创建新文件并没有帮助,因为它会覆盖对 css 的访问,但不会覆盖元数据。

【问题讨论】:

谁在使用foo.component.lessnode_modules 中的另一个模块? 在“node_modules”里面我有 foo.component.css。并且它在源映射生成时会产生一些冲突,因为项目中的所有其他样式都较少。因此,我用 less 替换 css 并在元数据文件中进行适当的修改。如果直接在 node_modules 中更新,效果很好。 您必须将包的源代码复制/分叉到您自己的存储库中。在那里进行修改,然后手动将此包添加到您的 package.json 文件中。 我不得不为一个项目做这样的事情。你应该能够使用 npm 脚本来完成你想要的。我在博客上写了我的解决方案 here。 【参考方案1】:

    最佳但长期的解决方案:创建包源代码的副本/分叉:

    包源代码的复制/分叉; 进行更新; 作为依赖项而不是原始项导入到项目中; 更新readme.md 文件,以免在以后的升级中错过。

    如果我们不需要完全更新文件和结构,将覆盖文件放置到项目的根目录就足够了(如Angular)。例如这样的css 文件将覆盖node_modules 中的相同文件:

    将所需文件复制到项目根目录; 更新该文件。现在npm 将首先查看它。

【讨论】:

是否可以在 node_modules 之外创建一个文件来读取 node_modules 文件并对该节点模块文件进行更改?我正在考虑节点通知程序中的 plist 文件。

以上是关于如何覆盖 node_modules 中的文件或函数的主要内容,如果未能解决你的问题,请参考以下文章

重写覆盖依赖文件

如何停止 node_modules 中更漂亮的依赖项覆盖项目 .prettierrc?

如何在 ./node_modules/@types 之外使用打字稿定义文件

Angular:在 node_module 组件中覆盖 DatePipe

.min 或 src 作为 node_module 的 package.json 中的“主”文件

如何包含位于node_modules文件夹中的脚本?