覆盖或重载 node_module 名称路径

Overwrite or Overload a node_module name path

假设我安装了一个名为 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 包之前在本地测试它...

如果您需要动态导入,则将 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
  }

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

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

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

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

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

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

干杯