过去,每当我想在 Node.js 应用程序中使用相对路径时,我都会使用 app-module-path
。如果我通过 .mjs
格式使用 ES 模块,如何在特定目录路径变为相对路径的情况下获得相同的功能?
以另一种方式,我是否能够为目录分配一个别名,以便所有相对路径都相对于该别名,就像 ./
是相对于路径的别名一样当前目录。
最佳答案
可以通过猴子修补内置 module
模块,为使用 require
加载的 CommonJS 模块的某些路径提供别名。
ES 模块提供了一种通过指定 custom ES module loader 来更改模块加载行为的方法,如 this related answer 中所述.
这样根源路径(将相对于加载器位置指定)可以映射到某些别名( @
is conventional 对于前端项目):
custom-loader.mjs
import path from 'path';
const ROOT_PATH = new URL(path.dirname(import.meta.url) + '/src').pathname;
export function resolve(specifier, parentModuleURL, defaultResolver) {
specifier = specifier.replace(/^@/, ROOT_PATH);
return defaultResolver(specifier, parentModuleURL);
}
其用法如下:
node --experimental-modules --loader ./custom-loader.mjs ./app.mjs
请注意,这提供了一种对于 ES 模块来说并不自然的行为,这可能会影响 IDE 等其他工具处理此代码的方式。
关于node.js - 在带有 ES 模块的 Node.js 中使用相对路径导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51452743/