如何覆盖 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.less
? node_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