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

时间:2018-08-25 02:51:02

标签: reactjs typescript npm webpack framerjs

我正在尝试在项目中导入CDNperf库。如果我不导入Hearts.tsx,则项目本身可以编译。但是,如果我导入Hearts.tsx,则失败如下。 Hearts.tsx导入成帧器。不幸的是,当我尝试使用webpack-dev-server运行它时出现错误。

    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
  }
};

这是详细的错误:

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文件:

{
  "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"
  }
}

3 个答案:

答案 0 :(得分:3)

似乎node_modules/framer/build/framer.js要求使用错误的模块名称:应该为react-dom,而不是ReactDOM。我找不到任何说明应该如何使用该库的文档,这可能表明为什么要求ReactDOM可以起作用。指向您指向该库的文档在哪里?

无论如何,您应该能够通过创建仅重新导出ReactDOM的{​​{1}}模块来解决该问题。使用文件创建一个react-dom目录:

ReactDOM

并将// ReactDOM/index.js export * from "react-dom"; // ReactDOM/package.json {"name": "ReactDOM"} 添加到您在"ReactDOM": "./ReactDOM"中的依赖项中。

答案 1 :(得分:1)

也许是因为您的反应盘未正确安装。

尝试

  

npm install react react-dom --save

然后,您的package.json必须包含依赖项

您现在检查过package.json吗?

答案 2 :(得分:0)

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

const path = require('path');

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

我在使用其他库时遇到了类似的问题,这为我解决了!