有没有办法从原生es模块中的root导入? (nodejs 16)

问题描述 投票:0回答:2

这是我们的项目结构:

- project
-     a.js
-     b.js

在 a.js 中,我想使用根路径导入 b.js 文件,如下所示:

import c from '~/b.js';

但不使用这样的相对路径:

import c from '../b.js';

我们使用的是原生的esmodule,而不是Babel或者Webpack之类的,那么有什么办法吗?

node.js es6-modules
2个回答
8
投票

这是一个非常不寻常的要求。尽管如此,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 就没有项目的“根路径”之类的东西。


2
投票

子路径导入还支持使用目录,例如为了使用

import {UserDao} from "#dao/UserDao.js";

package.json

中指定
"imports":
{
  "#dao/*": "./main/dao/*"
}

注:

  • #
    前缀为必填项
  • ./main/dao/*
    是相对于
    package.json
© www.soinside.com 2019 - 2024. All rights reserved.