在 jsconfig.json 中使用 baseUrl 不适用于 Next.js

Using baseUrl in jsconfig.json is not working with Next.js

jsconfigerror 是显示 jsconfig 不工作的示例存储库。

我的 jsconig.json 文件中有以下设置:

{
  "compilerOptions": {
    "baseUrl": "./"
  }
}

但是,当我进行导入时,它失败了:

./pages/index.js
Module not found: Can't resolve 'components/AThing' in '/var/www/gd.hutuber.com/pages'

文件夹结构

¬ components
   ¬ AThing
¬ pages
   ¬ index.js

pages/index.js

import Head from 'components/AThing'

如何让 baseUrl 与 Next.js 一起工作?

由于Next.js 9.4,Next.js自动支持tsconfig.jsonjsconfig.json“路径”和“baseUrl”选项。

official documentation 阅读更多内容。


对于之前的版本,Next.js 不会读取文件 jsconfig.json 中写入的配置。您必须以 Next.js 方式自定义 Webpack 配置。

在项目的根目录中文件 package.json 旁边创建一个名为 next.config.js 的文件。然后重启。

const path = require('path')

module.exports = {
  webpack: config => {
    config.resolve.modules.push(path.resolve('./'))

    return config
  }
}

从 Next.js 9.4 开始,您可以轻松地在项目的根目录中创建 jsconfig.json 或 *tsconfig.json 文件,然后只需输入以下内容:

{
  "compilerOptions": {
    "baseUrl": "."
  }
}

接下来您必须做的是导入您的组件,如下所示:

import Head from 'components/AThing';

假设组件文件夹也放在项目的根目录中。

在根文件夹中创建文件 jsconfig.json 并添加:

{
  "compilerOptions": {
    "baseUrl": "."
  }
}

然后“npm 运行 dev”“yarn dev”。

如果在定义新路径时有'next dev' 运行ning,请确保重新启动'next dev'。

尝试:

{
  "compilerOptions": {
    "baseUrl": "src"
  }
}

开始之前,您应该检查您的 Next.js 版本是否至少为 9.4。

当您配置 jsconfig.json 时,您应该终止进程并重新启动。

    {
    "compilerOptions": {
      "baseUrl": ".",
      "paths": {
        "@components/*": ["components/*"],
        "@pages/*": ["pages/*"],
      }
    }
  }

虽然 baseUrl 很有用并且在大多数情况下都足够了,但您可以使用前缀 @ 来明确这是一个别名文件夹。

请确保,当您导入某些内容时,您不会像 ./pages/index.js 那样以 ./ 开头,因为您正在打破绝对别名并开始以相对模式导入。

import Head from '@components/AThing'

只是为了澄清这里的片段。 Next.js.

的所有现代迭代都支持 JSconfig 和绝对路径
  1. 创建配置文件:

    jsconfig.json
    
  2. 指定你的基地URL:

    {
      "compilerOptions": {
        "baseUrl": "."
      }
    }
    
  3. 像这样更改导入:

    import 'components/header'