typescript &盖茨比:开发包无法解析路径,但VS代码可以

ccgok5k5  于 2023-02-13  发布在  TypeScript
关注(0)|答案(3)|浏览(133)

我有一堆像import Navi from 'components/Navi'这样的导入
components/Navi部分下面有一条红色的错误线,直到我将其添加到我的tsconfig.json

"baseUrl": "./",
"paths": {
  "components/*": ["src/components/*"],
  "layouts/*": ["src/layouts/*"],
  "pages/*": ["src/pages/*"],
  "templates/*": ["src/templates/*"],
  "scss/*": ["src/scss/*"],
  "types": ["src/types"]
}

当我试图通过运行gatsby develop来构建我的开发包时,一切看起来都很好,直到出现⠹ Building development bundle
紧接着是许多语句,如Can't resolve 'components/Navi' in '~/src/components'
只有当我指定了import Navi from '../Navi'这样的相对路径时,这些错误才会消失
顺便说一句,我也不能使用结构为

src
    -> types
        -> index.ts

它将显示错误,在'types'一词下显示一条红线,表示Cannot find module 'types'.ts(2307)。我必须将导入更改为import {Issue} from 'types/index'
我已经尝试运行gatsby clean并删除node_modules

vof42yt1

vof42yt11#

您需要将gatsby-plugin-root-import添加到gatsby-config.js中,以便使用绝对导入。
Webpack 4在其配置中提供了别名,通过别名可以指定从特定文件夹的绝对导入。gatsby-plugin-root-import插件可以帮助您实现该配置
首先使用安装

npm install --save-dev gatsby-plugin-root-import

yarn add --dev gatsby-plugin-root-import

然后在gatsby-config.js中进行如下配置

// gatsby-config.js
const path = require('path')

module.exports = {
  plugins: [
    ...
    {
      resolve: 'gatsby-plugin-root-import',
      options: {
        "components": path.join(__dirname, "src/components"),
        "layouts": path.join(__dirname, "src/layouts"),
        "templates": path.join(__dirname, "src/templates"),
        "scss": path.join(__dirname, "src/scss"),
        "types": path.join(__dirname, "src/types"),
        "src": path.join(__dirname, 'src'),
        "pages": path.join(__dirname, 'src/pages')
      }
    }
    ...
  ]
}
ecbunoof

ecbunoof2#

Shubham的解决方案在2021年6月仍然有效a-如果你想让它自动解析src下的所有目录,你可以使用我为此编写的两行代码:

const fs = require("fs");
const path = require("path");

const srcDirs = fs.readdirSync(path.resolve(__dirname, "src"));

const rootDirsConfig = {};

srcDirs.forEach((srcDir) => {
    rootDirsConfig[srcDir] = path.resolve(__dirname, "src", srcDir);
});

module.exports = {
    plugins: [
          {
            resolve: "gatsby-plugin-root-import",
            options: rootDirsConfig,
          },
    ]
}
mwg9r5ms

mwg9r5ms3#

安东尼·帕皮耶夫斯基的答案仍然有效。
如果您使用TypeScript,那么只需将IPluginRefOptions类型添加到rootDirsConfig中,如下所示:

import { IPluginRefOptions } from 'gatsby';
import path from 'path';
import fs from 'fs';

const srcDirs = fs.readdirSync(path.resolve(__dirname, 'src'));

const rootDirsConfig: IPluginRefOptions = {};

srcDirs.forEach((srcDir) => {
  rootDirsConfig[srcDir] = path.resolve(__dirname, 'src', srcDir);
});

相关问题