【问题标题】:How to override file or function inside node_modules如何覆盖 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

标签: angular npm node-modules


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

    • 包源代码的复制/分叉;
    • 进行更新;
    • 作为依赖项而不是原始项导入到项目中;
    • 更新readme.md 文件,以免在以后的升级中错过。
  2. 如果我们不需要完全更新文件和结构,将覆盖文件放置到项目的根目录就足够了(如Angular)。例如这样的css 文件将覆盖node_modules 中的相同文件:

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

【讨论】:

  • 是否可以在 node_modules 之外创建一个文件来读取 node_modules 文件并对该节点模块文件进行更改?我正在考虑节点通知程序中的 plist 文件。
猜你喜欢
  • 2021-05-29
  • 2011-05-02
  • 2019-04-20
  • 1970-01-01
  • 2015-04-21
  • 1970-01-01
  • 2015-10-02
  • 2018-01-10
  • 1970-01-01
相关资源
最近更新 更多