【问题标题】:NextJS cannot recognize TypeScript filesNextJS 无法识别 TypeScript 文件
【发布时间】:2021-03-30 13:28:30
【问题描述】:

我是 NextJS 的新手。
无论如何,我想使用 TypeScript 而不是 JS 来开发我的网站。所以我从头开始关注NextJS's official to install TS,但是当我运行npm run dev 时,404 错误页面问候我。
好的,下面是我的tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "strict": false,
    "forceConsistentCasingInFileNames": true,
    "noEmit": true,
    "esModuleInterop": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "jsx": "preserve"
  },
  "include": [
    "next-env.d.ts",
    "**/*.ts",
    "**/*.tsx"
  ],
  "exclude": [
    "node_modules"
  ]
}

嗯,我认为似乎没有什么问题:(
然后是package.json

{
  "name": "MY_PROJECT_NAME",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "go": "next build && next start",
    "debug": "NODE_OPTIONS='--inspect' next dev"
  },
  "dependencies": {
    "@mdx-js/loader": "^1.6.22",
    "@next/mdx": "^10.0.3",
    "@types/node": "^14.14.14",
    "@types/react": "^17.0.0",
    "@types/styled-components": "^5.1.5",
    "@types/webpack": "^4.41.25",
    "autoprefixer": "^10.1.0",
    "express": "^4.17.1",
    "gray-matter": "^4.0.2",
    "next": "^10.0.3",
    "postcss": "^8.2.1",
    "raw-loader": "^4.0.2",
    "react": "16.13.1",
    "react-dom": "16.13.1",
    "react-markdown": "^4.3.1",
    "remark-emoji": "^2.1.0",
    "remark-html": "^13.0.1",
    "remark-images": "^2.0.0",
    "styled-components": "^5.2.1",
    "tailwindcss": "^2.0.2",
    "typescript": "^4.1.3",
    "webpack": "^4.44.0"
  }
}

嗯,我的代码有什么问题?
当我以.jsx 运行我的代码时,一切正常。但是.tsx 不起作用。
有人知道这个问题吗?
请帮帮我!

-- 添加index.tsx--

import Layout from '../components/Layout'

export default () => (
    <>
        <Layout title="Kreimben::Home" isHome={true}>
            <div className="flex justify-center text-center">
                <div className="bg-gray-300 p-8 m-12 rounded-lg w-4/5 text-4xl font-serif">
                                Welcome to indie developer's website!
                </div>
            </div>
            <main className="flex justify-center">
                <div className="w-4/5 py-32 mb-12 shadow-xl rounded-lg bg-gradient-to-r from-teal-300 to-blue-500 text-center">
                    <p className="text-4xl font-serif">I code</p>
                    <p className="font-semibold text-6xl">iOS, macOS, and anything!</p>
                </div>
            </main>
        </Layout>
    </>
)

【问题讨论】:

  • tsconfig.json 中的jsx 选项应该是react。无论如何,您可以通过举一个工作示例来分享您所做的事情吗?
  • @tmhao2005 _app.tsx 后面是this link 中的官方文档,然后是 index.tsx 以显示网站的字面索引页面。当我将所有 tsx 文件更改为 jsx 时,神奇地正常工作:(
  • 我知道你在关注他们的文件。但我很想检查你是否遗漏了什么。这就是为什么我问你做了什么
  • 好的,我添加了index.tsx的源代码,然后告诉我你需要什么:) 谢谢@tmhao2005
  • 我认为你的设置会起作用。如果你不给我们一个可重现的回购,对不起,我们无能为力

标签: javascript typescript next.js vercel


【解决方案1】:

我刚刚从@next/mdx 插件配置中发现了问题。当您切换到 Typescript 时,pageExtensions 应该是 [ts, tsx]

简而言之,优化正确的 ext 文件可以解决问题:

next.config.js

// ...

module.exports = withMDX({
  pageExtensions: ['ts', 'tsx', 'md', 'mdx'], // Replace `jsx?` with `tsx?`
})

【讨论】:

    猜你喜欢
    • 2021-01-13
    • 2018-01-12
    • 2021-04-01
    • 2021-02-28
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    相关资源
    最近更新 更多