有什么办法可以在原生 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-projectpackage.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 您的项目没有“根路径”之类的东西。