我们说我有以下代码:
var mod1 = require('../../../../ok/mod1');
var mod2 = require('../../../info/mod2');
它不像上面那样编码,我想知道是否有一种方法可以像在nodejs中webpack-resolve-root那样配置根解析器?
据我所知,NODE_PATH
可用于替换node_modules
的根,但这不是我想要的。我想让解析器按顺序解析多个文件夹。
答案 0 :(得分:6)
有一个名为module-alias的npm包,它可以满足您的需求。
答案 1 :(得分:2)
更新了 2021 年的答案。
nodejs subpath imports 已添加到:v14.6.0、v12.19.0
这允许您将以下内容添加到 package.json
"imports": {
"#ok/*": "./some-path/ok/*"
"#info/*": "./some-other-path/info/*"
},
在你的 .js 中
import mod1 from '#ok/mod1';
import mod2 from '#info/mod2';
答案 2 :(得分:-2)
解决此问题的最佳方法是使用全局(config)容器。 在大多数情况下,您的应用程序中将有一个配置文件。在此配置中,您可以添加一个属性,该属性将是包含文件/文件夹的所有绝对路径的对象。 由于配置文件在应用程序启动时使用,因此您只需执行以下操作:
var config = require("./config.js");
//config = {... , path: {"someModule": "/absolute/path/to", "someModule2": "/absolute/path/to"...}}
global.CONFIG_CONTAINER = config
稍后在您的应用程序中,您可以使用
var myModule = require(CONFIG_CONTAINER.path.someModule)
// + concat if you are looking for a file
如果你有一些复杂的路径并且你需要一个更动态的系统,你总是可以在配置中实现一个为你构建路径的函数。 (config.makePath = function(){...}) 这应该简单地处理它。