有什么办法可以在原生 es 模块中从 root 导入吗? (节点 16)
Is there any way to import from root in native es module? (nodejs 16)
这是我们的项目结构:
- project
- a.js
- b.js
在 a.js 中,我想以这样的方式使用根路径导入 b.js 文件:
import c from '~/b.js';
但不使用这样的相对路径:
import c from '../b.js';
我们用的是原生的esmodule,不是babel或者webpack之类的,有什么办法吗?
我不明白你为什么要这样做。但是,如果您不使用相对导入,则需要将完整路径添加到文件。所以从你描述结构的方式来看,它应该是:
import c from '~/project/b.js'
这是一个非常不寻常的要求。尽管如此,node.js 确实支持这个
到 self-referencing a package using its name,所以如果您的项目有一个名为 my-project
的 package.json
,那么您可以
import c from 'my-project/b.js';
从项目中的任何地方,不使用相对导入
到subpath imports,所以如果你声明一个
…
"imports": {
"#b": "./b.js"
},
…
在你的 package.json
然后你可以做
import c from '#b';
这也适用于 ES 模块,请参阅 ESM resolution algorithm (specifically PACKAGE_IMPORTS_RESOLVE
). Of course, it does not work without a package.json
, as without a package 您的项目没有“根路径”之类的东西。
这是我们的项目结构:
- project
- a.js
- b.js
在 a.js 中,我想以这样的方式使用根路径导入 b.js 文件:
import c from '~/b.js';
但不使用这样的相对路径:
import c from '../b.js';
我们用的是原生的esmodule,不是babel或者webpack之类的,有什么办法吗?
我不明白你为什么要这样做。但是,如果您不使用相对导入,则需要将完整路径添加到文件。所以从你描述结构的方式来看,它应该是:
import c from '~/project/b.js'
这是一个非常不寻常的要求。尽管如此,node.js 确实支持这个
到 self-referencing a package using its name,所以如果您的项目有一个名为
my-project
的package.json
,那么您可以import c from 'my-project/b.js';
从项目中的任何地方,不使用相对导入
到subpath imports,所以如果你声明一个
… "imports": { "#b": "./b.js" }, …
在你的
package.json
然后你可以做import c from '#b';
这也适用于 ES 模块,请参阅 ESM resolution algorithm (specifically PACKAGE_IMPORTS_RESOLVE
). Of course, it does not work without a package.json
, as without a package 您的项目没有“根路径”之类的东西。