首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模块未找到:错误:无法解析“ReactDOM”

模块未找到:错误:无法解析“ReactDOM”
EN

Stack Overflow用户
提问于 2018-08-25 02:51:01
回答 4查看 10.1K关注 0票数 1

我正在尝试在我的项目中导入框架器库。如果我不导入Hearts.tsx,项目本身就会编译得很好。但是,如果我导入Hearts.tsx,它就会失败,如下所示。Hearts.tsx导入框架。不幸的是,当我试图在webpack开发服务器上运行它时,我遇到了一个错误。

代码语言:javascript
复制
    ERROR in ./node_modules/framer/build/framer.js
Module not found: Error: Can't resolve 'ReactDOM' in '/Users/ikaplan/Code/typeTestFramer/node_modules/framer/build'
 @ ./node_modules/framer/build/framer.js 1:99-118
 @ ./src/components/Heart.tsx
 @ ./src/index.tsx
 @ multi (webpack)-dev-server/client?http://localhost:9001 ./src/index.tsx





var path = require("path");

module.exports = {
  mode: "development",
  entry: "./src/index.tsx",
  output: {
    filename: "bundle.js",
    path: __dirname + "/dist"
  },

  // Enable sourcemaps for debugging webpack's output.
  devtool: "source-map",

  resolve: {
    // Add '.ts' and '.tsx' as resolvable extensions.
    extensions: [".ts", ".tsx", ".js", ".json"]
    },
  externals: {
    react: "react",
    "react-dom": "react-dom"
  },
  module: {
    rules: [
      // All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.
      { test: /\.tsx?$/, loader: "awesome-typescript-loader" },

      // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
      { enforce: "pre", test: /\.js$/, loader: "source-map-loader" }
    ]
  },

  // When importing a module whose path matches one of the following, just
  // assume a corresponding global variable exists and use that instead.
  // This is important because it allows us to avoid bundling all of our
  // dependencies, which allows browsers to cache those libraries between builds.

  // webpack-dev-server configuration
  // This specifies where javascript bundle is created when
  // webpack CLI is run. However, webpack-dev-server is only
  // concerned with the 'filename' parameter.
  // webpack-dev-server generates the bundle with the 'filename' in
  // memory. It never creates an actual file in the 'path' specified
  // unlike the webpack CLI.
  output: {
    path: path.resolve(__dirname, "./dist"),
    filename: "bundle.js"
  },

  devServer: {
    // Can be omitted unless you are using 'docker'

    // This is where webpack-dev-server serves your bundle
    // which is created in memory.
    // To use the in-memory bundle,
    // your <script> 'src' should point to the bundle
    // prefixed with the 'publicPath', e.g.:
    //   <script src='http://localhost:9001/assets/bundle.js'>
    //   </script>
    publicPath: "/dist/",
    // The local filesystem directory where static html files
    // should be placed.
    // Put your main static html page containing the <script> tag
    // here to enjoy 'live-reloading'
    // E.g., if 'contentBase' is '../views', you can
    // put 'index.html' in '../views/main/index.html', and
    // it will be available at the url:
    //   https://localhost:9001/main/index.html
    contentBase: path.resolve(__dirname, "./"),
    // 'Live-reloading' happens when you make changes to code
    // dependency pointed to by 'entry' parameter explained earlier.
    // To make live-reloading happen even when changes are made
    // to the static html pages in 'contentBase', add
    // 'watchContentBase'
    watchContentBase: true,
    compress: false,
    port: 9001
  }
};

这是详细的错误:

代码语言:javascript
复制
ERROR in ./node_modules/framer/build/framer.js
Module not found: Error: Can't resolve 'ReactDOM' in '/Users/ikaplan/Code/typeTestFramer/node_modules/framer/build'
resolve 'ReactDOM' in '/Users/ikaplan/Code/typeTestFramer/node_modules/framer/build'
  Parsed request is a module
  using description file: /Users/ikaplan/Code/typeTestFramer/node_modules/framer/package.json (relative path: ./build)
    Field 'browser' doesn't contain a valid alias configuration
    resolve as module
      /Users/ikaplan/Code/typeTestFramer/node_modules/framer/build/node_modules doesn't exist or is not a directory
      /Users/ikaplan/Code/typeTestFramer/node_modules/framer/node_modules doesn't exist or is not a directory
      /Users/ikaplan/Code/typeTestFramer/node_modules/node_modules doesn't exist or is not a directory
      /Users/ikaplan/Code/node_modules doesn't exist or is not a directory
      /Users/ikaplan/node_modules doesn't exist or is not a directory
      /Users/node_modules doesn't exist or is not a directory
      /node_modules doesn't exist or is not a directory
      looking for modules in /Users/ikaplan/Code/typeTestFramer/node_modules
        using description file: /Users/ikaplan/Code/typeTestFramer/package.json (relative path: ./node_modules)
          Field 'browser' doesn't contain a valid alias configuration
          using description file: /Users/ikaplan/Code/typeTestFramer/package.json (relative path: ./node_modules/ReactDOM)
            no extension
              Field 'browser' doesn't contain a valid alias configuration
              /Users/ikaplan/Code/typeTestFramer/node_modules/ReactDOM doesn't exist
            .ts
              Field 'browser' doesn't contain a valid alias configuration
              /Users/ikaplan/Code/typeTestFramer/node_modules/ReactDOM.ts doesn't exist
            .tsx
              Field 'browser' doesn't contain a valid alias configuration
              /Users/ikaplan/Code/typeTestFramer/node_modules/ReactDOM.tsx doesn't exist
            .js
              Field 'browser' doesn't contain a valid alias configuration
              /Users/ikaplan/Code/typeTestFramer/node_modules/ReactDOM.js doesn't exist
            .json
              Field 'browser' doesn't contain a valid alias configuration
              /Users/ikaplan/Code/typeTestFramer/node_modules/ReactDOM.json doesn't exist
            as directory
              /Users/ikaplan/Code/typeTestFramer/node_modules/ReactDOM doesn't exist
[/Users/ikaplan/Code/typeTestFramer/node_modules/framer/build/node_modules]
[/Users/ikaplan/Code/typeTestFramer/node_modules/framer/node_modules]
[/Users/ikaplan/Code/typeTestFramer/node_modules/node_modules]
[/Users/ikaplan/Code/node_modules]
[/Users/ikaplan/node_modules]
[/Users/node_modules]
[/node_modules]
[/Users/ikaplan/Code/typeTestFramer/node_modules/ReactDOM]
[/Users/ikaplan/Code/typeTestFramer/node_modules/ReactDOM.ts]
[/Users/ikaplan/Code/typeTestFramer/node_modules/ReactDOM.tsx]
[/Users/ikaplan/Code/typeTestFramer/node_modules/ReactDOM.js]
[/Users/ikaplan/Code/typeTestFramer/node_modules/ReactDOM.json]
 @ ./node_modules/framer/build/framer.js 1:99-118
 @ ./src/components/Heart.tsx
 @ ./src/index.tsx

我遗漏了什么?

顺便说一下,这是我的package.json文件:

代码语言:javascript
复制
{
  "name": "typetest",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "awesome-typescript-loader": "^5.2.0",
    "babel-core": "^6.26.3",
    "babel-preset-env": "^1.7.0",
    "typescript": "^2.7.1",
    "webpack": "^4.17.1",
    "webpack-cli": "^3.1.0",
    "webpack-dev-server": "^3.1.4",
    "framer": "^0.7.5"
  },
  "dependencies": {
    "@types/react": "^16.3.12",
    "@types/react-dom": "^16.0.5",
    "@types/draft-js": "^0.10.24",
    "react": "^16.3.2",
    "react-dom": "^16.3.2",
    "source-map-loader": "^0.2.4",
    "ReactDOM": "./ReactDOM"
  },
  "peerDependencies": {
    "framer": "^0.7.5",
    "react": "^16.3.2",
    "react-dom": "^16.3.2"
  }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-08-25 04:09:13

看起来node_modules/framer/build/framer.js需要错误的模块名称:它应该是react-dom,而不是ReactDOM。我找不到任何文档来说明应该如何使用这个库,这些文档可能会说明为什么需要ReactDOM才能工作。指向这个图书馆的文档在哪里?

无论如何,您应该能够通过创建一个只需要再导出ReactDOMreact-dom模块来解决这个问题。使用文件创建一个ReactDOM目录:

代码语言:javascript
复制
// ReactDOM/index.js
export * from "react-dom";

// ReactDOM/package.json
{"name": "ReactDOM"}

并将"ReactDOM": "./ReactDOM"添加到package.json中的依赖项中。

票数 4
EN

Stack Overflow用户

发布于 2018-08-25 03:31:09

也许问题在于你的反应,它没有被正确安装。

试一试

npm安装反应反应-多玛-保存

在此之后,您的package.json必须包括依赖项。

你现在查过你的package.json了吗?

票数 1
EN

Stack Overflow用户

发布于 2018-12-17 12:25:07

另一种解决方案是在Webpack配置中使用module.resolve选项:

代码语言:javascript
复制
const path = require('path');

module.exports = {
  ...,
  resolve: {
    ...,
    alias: {
      ...,
      React: path.resolve(__dirname, './node_modules/react/'),
      ReactDOM: path.resolve(__dirname, './node_modules/react-dom/')
    }
  }
}

我有一个类似的问题,使用不同的图书馆,这解决了我!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52013636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档