这是我们的项目结构:
- project
- a.js
- b.js
在 a.js 中,我想使用根路径导入 b.js 文件,如下所示:
import c from '~/b.js';
但不使用这样的相对路径:
import c from '../b.js';
我们使用的是原生的esmodule,而不是Babel或者Webpack之类的,那么有什么办法吗?
这是一个非常不寻常的要求。尽管如此,node.js 确实支持这一点
通过使用其名称自引用包,因此如果您的项目有一个名为
package.json
的 my-project
,那么您可以这样做
import c from 'my-project/b.js';
从项目中的任何地方,不使用相对导入
通过子路径导入,所以如果你声明一个
…
"imports": {
"#b": "./b.js"
},
…
在你的
package.json
那么你可以做
import c from '#b';
这也适用于 ES 模块,请参阅 ESM 解析算法(具体为
PACKAGE_IMPORTS_RESOLVE
)。当然,如果没有 package.json
,它就无法工作,因为没有 package 就没有项目的“根路径”之类的东西。
子路径导入还支持使用目录,例如为了使用
import {UserDao} from "#dao/UserDao.js";
在
package.json
中指定
"imports":
{
"#dao/*": "./main/dao/*"
}
注:
#
前缀为必填项./main/dao/*
是相对于 package.json