在带有 ES 模块的 Node.js 中使用相对路径导入

Saw*_*oes 5 node.js es6-modules mjs

过去,app-module-path每当我想在 Node.js 应用程序中使用相对路径时,我都会使用它。如果我通过该格式使用 ES 模块.mjs,如何在某个目录路径变为相对路径的情况下具有相同的功能?

以另一种方式,我是否能够为目录分配一个别名,以便所有相对路径都相对于该别名,就像./路径的别名相对于当前目录一样。

Est*_*ask 2

可以为require通过猴子修补内置module模块加载的 CommonJS 模块的某些路径提供别名。

ES 模块提供了一种通过指定自定义 ES 模块加载器来更改模块加载行为的方法,如相关答案中所述。

这样根源路径(将相对于加载器位置指定)可以映射到某个别名(对于前端项目来说@是常规的):

自定义加载程序.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);
}
Run Code Online (Sandbox Code Playgroud)

其用法如下:

node --experimental-modules --loader ./custom-loader.mjs ./app.mjs
Run Code Online (Sandbox Code Playgroud)

请注意,这提供了一种对于 ES 模块来说并不自然的行为,这可能会影响 IDE 等其他工具处理此代码的方式。


归档时间:

查看次数:

16079 次

最近记录:

2 年,8 月 前