如何在nodejs中拥有路径别名?

时间:2015-10-19 12:46:05

标签: node.js root resolve

我们说我有以下代码:

var mod1 = require('../../../../ok/mod1');
var mod2 = require('../../../info/mod2');

它不像上面那样编码,我想知道是否有一种方法可以像在nodejs中webpack-resolve-root那样配置根解析器?

据我所知,NODE_PATH可用于替换node_modules的根,但这不是我想要的。我想让解析器按顺序解析多个文件夹。

3 个答案:

答案 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(){...}) 这应该简单地处理它。