./src/index.js 中的错误 14:4 模块解析失败:意外标记 (14:4) 您可能需要适当的加载程序来处理此文件类型

ERROR in ./src/index.js 14:4 Module parse failed: Unexpected token (14:4) You may need an appropriate loader to handle this file type

我正在尝试 运行 与 webpack 做出反应。我收到以下错误:

./src/index.js 中的错误 14:4 模块解析失败:意外标记 (14:4) 您可能需要一个合适的加载器来处理这种文件类型,目前没有配置加载器来处理这种文件。

| ReactDOM.render(
>     <HashRouter>
|         <App />
|     </HashRouter>,

webpack.config.js

module.exports = {
    entry: path.resolve(__dirname, 'src/App.js'),
    watch: true,
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
    },
    module: {
        rules: [{
            test: /\.js$/,
            exclude: /(node_modules|bower_components)/,
            use: {
                loader: 'babel-loader',
            }
        }]
    }, 
}  

package.json

{
  "name": "app-weather",
  "version": "0.1.0",
  "private": true,
  "main": "index.js",
  "dependencies": {
    "bulma": "^0.7.5",
    "dotenv": "^8.0.0",
    "node-sass": "^4.12.0",
    "react": "^16.8.6",
    "react-dom": "^16.8.6",
    "react-router-dom": "^5.0.1",
    "react-scripts": "3.0.1"
  },
  "scripts": {
    "start": "webpack-dev-server",
    "build": "webpack",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-loader": "^8.0.6",
    "babel-preset-env": "^1.7.0",
    "babel-preset-react": "^6.24.1",
    "html-webpack-plugin": "^3.2.0",
    "webpack": "^4.39.2",
    "webpack-cli": "^3.3.7",
    "webpack-dev-server": "^3.8.0"
  }
}

您需要为 react 添加预设以通过 babel 加载,并添加对 JSX 文件的支持

module.exports = {
    entry: path.resolve(__dirname, 'src/App.js'),
    watch: true,
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
    },
    module: {
        rules: [{
            test: /\.jsx?$/, // change here
            exclude: /(node_modules|bower_components)/,
            options: { // added this
                presets: ['react'],
            },
            use: {
                loader: 'babel-loader',
            }
        ]
    }, 
}  

修改您的 babel-loader 配置:

  1. 将您的 test 条件更改为 /\.jsx?$/,因此 .jsx 也将被转译。
  2. options 添加到 react 预设 (!) use 不是 作为兄弟姐妹use)
  3. 如果你想使用 Babel 6,那么你需要安装用于 Babel 7 的 babel-loader v7 (npm i -D babel-loader@7) instead of v8

那你应该没问题。以下是对我有用的 Babel 6(以及 7,如果你想更改)配置的相关部分:

通天塔 6

网络包:

module.exports = {
  ...
  module: {
    rules: [
      {
        test: /\.jsx?$/,
        exclude: /(node_modules|bower_components)/,
        use: {
          loader: "babel-loader",
          options: {
            presets: ["react"]
          },
        }
      }
    ]
  }
};

package.json:

{
  ...
  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-loader": "^7.1.5",
    "babel-preset-env": "^1.7.0",
    "babel-preset-react": "^6.24.1"
  },
}

通天塔 7

网络包:

module.exports = {
  ...
  module: {
    rules: [
      {
        test: /\.jsx?$/, 
        exclude: /(node_modules|bower_components)/,
        use: {
          loader: "babel-loader",
          options: {
            presets: ["@babel/preset-react"]
          }
        }
      }
    ]
  }
};

package.json:

{
  ...
  "devDependencies": {
    "@babel/core": "^7.5.5",
    "@babel/preset-env": "^7.5.5",
    "@babel/preset-react": "^7.0.0",
    "babel-loader": "^8.0.6"
  }
}

希望对您有帮助。

这意味着您的浏览器正在提供未转译或未转换的代码。

当这些文件以某种方式被遗漏用于转译时会出现此问题,请确保这些文件夹包含在有效加载器下的 webpack 模块部分中,例如 - 对于 typescript - ts-loader 等。花了很多小时并得到修复。

您可以使用其他编译器,例如 babel。适合自己的就看自己了

 module: {
       rules: [
                    {
                        test: /\.ts|\.tsx?$/, loader: 'ts-loader', 
                        options: { onlyCompileBundledFiles: true, configFile: "testing.tsconfig.json", compilerOptions: {
                            noEmit: false, allowTsInNodeModules: false
                          }}, 
                        include: [
                            path.resolve(__dirname, "./src"),
                            path.resolve(__dirname, "./tests")
                          ],
                        exclude: [ 
                            path.resolve(__dirname, './automation/'),
                            path.resolve(__dirname, './src/types/testutils/'),
                            path.resolve(__dirname, './node_modules/')
                      ]
                    }
            ]
   }

看看这个包含部分:

 include: [
         path.resolve(__dirname, "./src"),
         path.resolve(__dirname, "./tests")
 ],