reactjs 未捕获的类型错误:无法解析模块说明符"react-dom/client",---使用Express服务器和TypeScript客户端

chhqkbe1  于 2023-03-01  发布在  React
关注(0)|答案(1)|浏览(214)
    • 完整错误:**

在浏览器控制台的客户端看到这个错误,尝试从我的服务器的node_modules文件夹导入react模块。

Uncaught TypeError: Failed to resolve module specifier "react-dom/client". Relative references must start with either "/", "./", or "../".

编辑:我在浏览器控制台的client/中看到这个错误,试图从服务器上的node_modules文件夹导入一个模块,使用一个非相对路径。我见过的大多数React示例代码都使用这个非相对引用,所以我不明白为什么它对我不起作用,因为我认为React是为了在客户机上运行客户端渲染,所以我假设这是一个常见的用例。
我正在制作我的第一个网站来学习各种网络技术,现在我正在学习React。我想通过制作一些组件在我的页面中使用来将React添加到我现有的项目中。这就是为什么我没有使用"创建React应用程序",因为我想将其添加到我现有的设置中。
我有:

  • 用JavaScript/NodeJS编写的Express服务器
  • 客户端代码采用TypeScript编写
  • 我使用Pug在服务器上生成HTML,但这可能无关紧要。
  • 我正在使用npm来管理react、express等包
  • 我没有使用任何东西进行捆绑

我见过很多类似的问题,但找不到解决方案,帮助我。人们似乎正在使用webpack或谈论捆绑,这是我忽略了,因为我还没有需要它。
我在我的项目中做了一个简单的页面来模仿我的设置以简化调查-一个静态HTML文件,它包括一个. ts文件作为模块,它导入一个. tsx文件。我仍然在这里得到错误。

    • 文件夹结构:**
BudgetV1
  |- node_modules
  | |- @types
  | | |- react
  | | |- react-dom
  | |- react  
  | |- react-dom
  |
  |- public
  | |- reactPractice.html
  |
  |- scripts
  | |- practicingReact.ts
  | |- helpInsertReact.tsx
  |
  |- app.js
  |- package.json
  |- tsconfig.json
    • 包. json**
{
  "name": "budgetv1pug",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www",
    "devstart": "nodemon ./bin/www",
    "serverstart": "SET DEBUG=budgetv1pug:* & npm run devstart"
  },
  "dependencies": {
    "async": "^3.2.4",
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "express-validator": "^6.14.2",
    "http-errors": "~1.6.3",
    "mongoose": "^6.6.2",
    "morgan": "~1.9.1",
    "pug": "2.0.0-beta11",
    "react": "^18.2.0",
    "react-dom": "^18.2.0"
  },
  "devDependencies": {
    "@types/react": "^18.0.28",
    "@types/react-dom": "^18.0.11",
    "nodemon": "^2.0.20"
  }
}
    • 系统配置json**
{
  "compilerOptions": {
    "target": "ES2015",
    "allowJs": true,
    "sourceMap": true,
    "outDir": "./public/out",
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true,
    "watch": true,
    "jsx": "react-jsx",
    "moduleResolution": "node",
    "noEmitOnError": true,
    "allowSyntheticDefaultImports": true,
  },
  "include": ["./scripts/*"]
}
    • 应用程序. js**
const express = require('express');
const path = require('path');

const app = express();

// Set up mongoose connection
.....

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use(express.static(path.join(__dirname, 'node_modules'))); // Tried adding this but didn't help.

app.use('/', catalogRouter)

// ...
// More unrelated app.use() setup calls
// ...

module.exports = app;
    • React实践. html**
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>React</title>
</head>

<body>
    <h1>Hi</h1>
    <script src="./out/practicingReact.js" type="module"></script>
    <div id="root"></div>
</body>
</html>
    • 练习Reactts**
import insertReact from "./reactComponents/helpInsertReact.js";

window.addEventListener("DOMContentLoaded", function (e) {
    console.log("DOMContentLoaded");
    insertReact();
});
    • 帮助插入React. tsx**
import React, { StrictMode } from "react";
import { createRoot } from "react-dom/client"; // Problem line

export default function insertReact() {
    console.log("insertReact");
    let rootDiv: HTMLElement = document.getElementById("root")!;
    const root = createRoot(rootDiv);
}

最后在浏览器开发工具控制台中,页面加载错误:

Uncaught TypeError: Failed to resolve module specifier "react-dom/client". Relative references must start with either "/", "./", or "../".

在线留言:1
注意,如果我在helpInsertReact.tsx中添加一行使用"react"中的内容,我会得到一个类似的错误"module specifier" react "。
我可以看到helpInsertReact.js的GET请求进入我的服务器,但是在浏览器开发工具的Sources选项卡中看不到该文件。我猜它甚至没有开始运行,因为出现了"failed to resolve ..."错误

3pvhb19x

3pvhb19x1#

错误消息"未捕获的TypeError:无法解析模块说明符"react-dom/client"。相对引用必须以"/"、./"或../"开头。通常在JavaScript应用程序中导入模块时出现问题。
此错误消息明确表示无法解析模块说明符"react-dom/client",因为它不是以"/"、"./"或"../"开头。
若要修复此错误,应更新模块说明符,使其以这些字符之一开头。例如,如果尝试导入名为"client"的模块,而该模块与当前文件位于同一目录中,则应使用. "/client "作为模块说明符。如果" client "位于父目录中,则应使用.. "/client"。
如果在更新模块说明符后仍然有问题,您可能需要检查您尝试导入的模块是否已实际安装,并且在项目依赖项中可用。您可以通过检查package.json文件或在项目目录中运行命令"npm ls"来完成此操作。

相关问题