如何通过nodejs导入获得别名

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

我有一个使用node.js v16的项目,越来越多的npm库不再兼容require,需要与import一起使用。

到目前为止,我一直在使用 package.json 将我的根目录作为别名

  // package.json
  "dependencies": {
    "~src": "file:.",
  }

在我的源代码中

const someCode = require('~src/absolute/path/someCode');

这不适用于导入,并且通过我所做的测试,我还没有找到任何解决方案使其适用于导入。

您已经遇到过这样的问题吗?并找到了解决方案?

node.js import alias require
3个回答
20
投票

我相信在当前版本的 Node 中为文件夹添加别名的首选方法是使用 子路径导入

例如,您可以将根文件夹别名为

#src
(导入映射必须始终以
#
开头)。为此,请在 package.json 中添加以下导入部分:

"imports": {
  "#src/*": "./*.js"
}

现在,假设你的包中有一个文件

some/path/someCode.js
,你可以像这样导入它:

import someCode from '#src/some/path/someCode';

您还可以使用相同的语法映射子文件夹:

"imports": {
  "#src/*": "./*.js",
  "#somepath/*": "./some/path/*.js"
}

在导入文件中:

import someCode from '#somepath/someCode';

5
投票

请注意,如果您使用打字稿,您还必须更新您的 tsconfig。假设您想使用

@helpers/whatever
而不是
../../../helpers/whatever


"baseUrl": "src", # or whatever your base directory is
"paths": {
   "@helpers/*": ["helpers/*"]
},

如果您使用 jest,您还需要更新您的 jest 配置

moduleNameMapper: {
    '^@helpers/(.*)$': '<rootDir>/src/helpers/$1',
},

0
投票

安装模块别名

npm install module-alias

并在入口文件中导入模块别名/寄存器(位于所有代码行的顶部,即第一行)。

require('module-alias/register')

要在代码编辑、自动建议、引用、自动导入等时检测别名,我们必须配置 jsconfig,如果该文件不存在则自行创建。您可以根据您的项目使用路径,我没有 src 文件夹,所以我有直接使用路径,如下面所示,您可以在代码中提到 src 时添加前缀 src/ 。 jsconfig.json

{
    "compilerOptions": {
       ...
      "allowJs": true,
      "moduleResolution": "node",
      "baseUrl": ".",
      "paths": {
        "@/*": ["*"],
        "@constants/*": ["constants/*"],
        "@router/*": ["router/*"],
        "@utility/*": ["utility/*"],
        "@config/*": ["config/*"],
        "@middleware/*": ["middleware/*"],
        "@controllers/*": ["api/controllers/*"],
        "@routes/*": ["api/routes/*"],
        "@services/*": ["api/services/*"],
        "@models/*": ["api/models/*"],
      }
    },
  }

对于运行时导入解析,我们必须在package.json中添加别名,这允许nodes js真正成功地找到并执行代码 包.json:

{
  ...
  "_moduleAliases": {
    "@": ".",
    "@constants": "constants",
    "@router": "router",
    "@utility": "utility",
    "@config": "config",
    "@middleware": "middleware",
    "@controllers": "api/controllers",
    "@routes": "api/routes",
    "@services": "api/services",
    "@models": "api/models"
  },
 ...
© www.soinside.com 2019 - 2024. All rights reserved.