当我们导入一个函数时,是否有可能避免多个 ../ ?

Is there any possibility to avoid multiple ../ when we are importing a function?

我想在导入函数时避免这个问题

const ApiError = require('../../../../classes/ErrorClass');

是否可以使用,我不知道 Ex:

require('mypath/ErrorClass')

如果我有 11 个导入,我不想有这样的东西

const ApiError = require('../../../../classes/ErrorClass');
const ex= require('../../../classes/ApiClass');
const ex1= require('../../../../utils/utils');
const ex2= require('../../../etc/etc');
const ex3= require('../../../../../etc/etc');
const ex4= require('../../../../etc/etc');
const ex5= require('../../../../etc/etc');
const ex6= require('../../../../etc/etc');

谢谢!

您可能希望使用提供的 built-in 变量节点 __dirname 来获得应用程序根目录

说你有这个目录

myapp/
├─ utils/
│  ├─ main.js
├─ lib/
│  ├─ mylib.js
├─ node_modules/

所以, main.js:

const mylib = require(__dirname + '/lib/mylib')

由于没有深入了解您的配置,我将尝试在此处提供一些不同的解决方案。

Webpack

如果您使用的是 webpack,则可以为解析使用别名配置 属性 在您的实际路径与您想要调用的路径之间创建一个映射。它看起来像这样:

const path = require('path');

module.exports = {
  resolve: {
    alias: {
      Components: path.resolve(__dirname, '/path/to/function') 
    }
  }
}

查看 resolve chapter 表单 webpack 文档以获取更多信息。

打字稿

在使用 typescript 时,您可以在 tsconfig.json 中指定 baseUrl 属性,这将允许您指定相对于您在此处指定的路径的每个导入。假设您有这条路径:'../../../../classes/ErrorClass',展开后看起来像:src/some/folder/structure/classes/ErrorClass。配置后,如果 baseUrl 配置为 src/some/folder/structure.

,这可能看起来像这样 classes/ErrorClass

是的,您可以使用 package.json 来完成。 假设您具有以下结构:

my-app/
├─ src/
│  ├─ index.js
│  ├─ node_modules/
│  ├─ dir/
│  │  ├─ nested/
│  │  │  ├─ nestedMod.js
│  ├─ function/
│  │  ├─ myMod.js
│  │  ├─ myMod3.js
│  │  ├─ myMod2.js
├─ package.json

您必须在 package.json

中添加 imports 字段
{
  "name": "my-app",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "imports": {
    "#nestedMod": "./src/dir/nested/nestedMod.js",
    "#myFunc": "./src/function/myMod.js",
    "#myFunc2": "./src/function/myMod2.js",
    "#myFuncs/*": "./src/function/*.js"
  }
}

那么你可以这样做:

const nestedMod = require('#nestedMod')
const myFunc = require('#myFunc')
const myFunc2 = require('#myFunc2')
const myFunc3 = require('#myFuncs/myMod3')

P.S.: 仅适用于 Node