覆盖或重载 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 的路径,我的项目将改用我的本地模块。
希望这可以帮助其他需要做类似我的事情的人。
干杯
假设我安装了一个名为 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 的路径,我的项目将改用我的本地模块。
希望这可以帮助其他需要做类似我的事情的人。
干杯