【问题标题】:Overwrite or Overload a node_module name path覆盖或覆盖节点模块名称路径
【发布时间】:2021-03-04 12:13:28
【问题描述】:

假设我已经安装了一个名为 magicalModule 的 node_module,并且我已经通过 npm i magicalModule 安装了它。

我通过const magic = require('magicalModule')将它导入我的代码。

有没有办法让我覆盖该特定路径,以便我可以使用自己的模块?

例如,我想使用该模块的修改版本而不是已安装的包。也许在 package.json 中放置一些东西或类似的东西:

dependencies:{
    Alias:{
         'magicalModule': process.env.local ? './myPath' : 'magicalModule'
    }
}

类似上面的...

我知道有一个名为 Module-alias 的模块,但我不确定它是否适合我的用例。

至于为什么我需要做这样的事情是因为有一个 NPM 包在多个文件中被大量使用,我想用我目前正在开发的另一个 NPM 包替换它。想要在发布 NPM 包之前在本地测试它...

【问题讨论】:

    标签: javascript node.js npm dependency-management package.json


    【解决方案1】:

    如果您需要动态导入,则将 require 置于 if 条件中

    let myModule = require(process.env.local ? './myPath' : 'myModule'); // make sure there is index.js inside
    

    无法在 package.json 中执行此操作,因为该文件是静态的。但是,如果您可以以某种方式编辑包 json,则可以添加 本地依赖项,例如

    "dependencies": {
        "bar": "file:./myPath" // package.json is read inside of ./myPath
      }
    

    【讨论】:

    • 您对 if 条件的建议的问题是我必须为超过 50 个文件执行此操作....我认为这不是一个好兆头。如果找不到更好的解决方案,我很可能会这样做
    【解决方案2】:

    是的,经过一番修改后,解决方案毕竟是使用module-alias。 在我的主文件中,我在任何代码之前添加到它的顶部:

    if(process.env.useLocal) require('module-alias/register')
    

    然后在我的 package.json 文件中添加:

     "_moduleAliases": { "magicalModule" : "path_to_file" }
    

    在我的依赖项部分之后,它会覆盖 node_modules 的路径,而我的项目将使用我的本地模块。

    希望这可以帮助其他需要做与我类似的事情的人。

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-02
      • 2021-09-17
      • 2012-01-28
      • 1970-01-01
      相关资源
      最近更新 更多