【问题标题】:Substitute a package in NPM/Node在 NPM/Node 中替换一个包
【发布时间】:2016-05-22 18:49:47
【问题描述】:

是否可以强制外部 npm 依赖项使用提供相同 API 但实现不同的不同 node.js 包?

【问题讨论】:

  • 您有特定的用例吗?答案可能会有所不同
  • 这是我的用例。我在以下模块中发现了一个错误:/node_modules/react-router/node_modules/history/node_modules/query-string/index.js 如何用固定的模块(查询字符串)替换该模块(有一个包含修复的叉子)

标签: node.js npm


【解决方案1】:

您应该能够下载您喜欢的任何模块的源代码并将该文件夹放在您的node_modules 文件夹中。从那时起,您只需在 Node.js 应用程序中 require 即可,就像任何其他 NPM 模块一样。

【讨论】:

    【解决方案2】:

    如果您愿意这样做并且该模块是开源的,您可以在 github 上 fork,更改他们的 package.json 以包含您想要的模块,并使用 github url 为您自己的 package.json 像这样:

    "modulename": "git+https://git@github.com/user/repo.git"
    

    【讨论】:

      【解决方案3】:

      我建议下载所需 API 的代码,创建一个 src/assets 文件夹,将其放入其中,将 package.json 中的包名更改为 npm 中未使用的名称,然后使用 'require('newPackageName') ' 在您的代码中。

      如果您决定使用 package.json 的某些功能来指向特定版本(例如使用“1.4.7”而不是“^1.4.7”)或者如果您指向 github 地址,请注意何时你运行 npm 更新。它会将您的 URL 替换为 npmjs.org 中具有该特定名称的最新版本。我不知道它在较新版本的 npm 中是否仍然这样做,但在适用于 Node.js 0.12 的版本中,这是默认行为。

      我可以告诉你 node shrinkwrap 会起作用,但它也会阻止任何其他包被更新。不,你不能只有一个收缩包装的依赖,它必须是所有的,否则 npm update 将不起作用。

      【讨论】:

        猜你喜欢
        • 2014-07-18
        • 1970-01-01
        • 1970-01-01
        • 2016-12-22
        • 1970-01-01
        • 2020-12-16
        • 2017-05-16
        • 1970-01-01
        • 2020-07-06
        相关资源
        最近更新 更多