【问题标题】:react app with webpack/babel appears blank on IE browserreact app with webpack/babel 在 IE 浏览器上显示为空白
【发布时间】:2019-08-15 02:46:47
【问题描述】:

我有用 react-router、redux、webpack4、babel 构建的 react-hooks 应用程序。 而且我无法在 IE 浏览器上获得 react 应用程序渲染。

我猜这是将 es6 转换为 es5 的问题。

这是我尝试过的事情。 但它们都不起作用。

index.html

<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.5.7/es5-shim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.5.7/es5-sham.min.js"></script>

index.js 在索引字段时导入'core-js'或'react-app-polyfill'。

import 'core-js';
import 'react-app-polyfill/ie9';
import 'react-app-polyfill/ie11';

babel.js 向 env 添加目标选项。

presets: [
    [
      'env',
      {
        useBuiltIns: 'entry',
        targets: {
          browsers: [
            'last 1 version',
            '> 1%',
            'not dead',
            'ie >= 9'
          ],
          uglify: true,
        },
        loose: true,
        modules: isTest ? 'commonjs' : false,
        debug: isTest ? false : true,
      },
    ],
    'react',
  ],
plugins: [
    'transform-runtime',
    'transform-class-properties',
    'transform-object-rest-spread',
    'syntax-dynamic-import',
]

package.json

"browserslist": [
    "last 1 version",
    "> 1%",
    "not dead",
    "ie >= 9"
  ],

webpack.base.js 将浏览器选项添加到 'postcss-loader, autoprefixer'。

module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /(node_modules|bower_components)/,
        use: [
          {
            loader: 'babel-loader',
            options: babelConfig,
          },
        ],
      },
      {
        test: /\.(sa|sc|c)ss$/,
        exclude: /node_modules/,
        use: [
          {
            loader: devMode ? 'style-loader' : MiniCssExtractPlugin.loader,
          },
          {
            loader: 'css-loader',
            options: {
              minimze: true,
              sourceMap: devMode,
              importLoaders: 1,
            },
          },
          {
            loader: 'postcss-loader',
            options: {
              indent: 'postcss',
              plugins: [
                autoprefixer({
                  browsers: ['last 1 version',
                             '> 1%',
                             'not dead',
                             'ie >= 9'
                  ],
                }),
              ],
              sourceMap: devMode,
            },
          },
          {
            loader: 'sass-loader',
            options: {
              sourceMap: devMode,
              includePaths: ['client/styles/main.scss'],
            },
          },
        ],
      },
    ],
  },
 ...
  },

版本

"react": "^16.8.6",
"react-dom": "^16.8.6",
"react-router-dom": "^4.3.1",
"connected-react-router": "^6.4.0",
"react-redux": "^6.0.0",
"webpack": "^4.16.5",
"babel-core": "^6.26.3",
"core-js": "^2.5.7",
"react-app-polyfill": "^1.0.2",

------------------- 版本 --------------- ------------------

更新:在 IE 浏览器中添加错误消息并创建代码沙箱。

code sandbox link

------------------- 版本 --------------- ------------------

更新到最新的 IE 版本后。 我在vendors.lazy-chunk.js 中得到Back navigation caching errorJS syntax error

------------------- 版本 --------------- ------------------

登录功能代码示例更新。 code sample

【问题讨论】:

  • 您能否创建一个代码沙箱 (codesandbox.io/s/new) 向我们准确展示您在说什么。将代码从 ES6+ 编译到 ES5 时的错误将取决于所使用的特定函数。
  • 你遇到了什么错误?
  • IE的控制台一定有错误,请检查一下,更新你的问题。
  • 你有没有使用F12开发工具检查IE控制台是否有错误?我们无法仅使用上述代码 sn-p 重现该问题。您能否提供一个使用 CodeSandbox 或 StackBlitz(stackblitz.com) 的最小的、可重现的示例?以便我们更好地理解这个问题。另外,react 应用支持 IE11 可以参考this thread
  • CodeSandbox 无法在 IE 11 中运行,所以我在 StackBlitz 中使用您的代码做了一个演示:stackblitz.com/edit/react-vhafos。该应用程序似乎在 IE 11 中运行良好:react-vhafos.stackblitz.io。您可以与演示中的依赖项进行比较,看看是否遗漏了一些依赖项。你用的是什么版本的IE?控制台中出现的错误表明 F12 开发工具有问题。请移至最新版本的 IE 并重试。也可以参考this thread

标签: reactjs internet-explorer webpack babeljs


【解决方案1】:

我在我这边复制了你的代码,让它在IE 11中运行没有任何错误。你可以参考我的步骤:

  1. 使用create-react-app 创建一个反应应用。

  2. 我使用了您的 CodeSandbox 中的文件,并修改了其中的一些。

(1) 你可以查看我的package.json

(2)我也修改了index.js,我们只需要在index.js的第一行添加import 'react-app-polyfill/ie11'; import 'react-app-polyfill/stable';,使其兼容IE 11即可。

(3) 我还在 store.js 中将import createBrowserHistory from "history/createBrowserHistory"; 修改为import { createBrowserHistory } from 'history';。否则会抛出错误“警告:请使用require("history").createBrowserHistory 而不是require("history/createBrowserHistory")。对后者的支持将在下一个主要版本中删除。”

  1. 手动安装以下软件包。注意 webpack 版本是 4.39.1。就我而言,我还安装了 node-sass

  1. 运行npm start 启动应用程序。 IE 11 中的截图是这样的:https://i.stack.imgur.com/aTq5G.png

您也可以在这里查看我的示例:https://stackblitz.com/edit/react-vhafos

【讨论】:

  • 感谢您抽出宝贵时间回答我的问题@YuZhou。我已按照您的回答并确保拥有 IE 最新版本。但它仍然失败。在我的 IE 浏览器中也只需在 stackblitz 中进行基本设置即可呈现。但是当我用完整的代码打开我的网站时,它不会呈现。请您检查我的原始源代码好吗?非常感谢您的帮助。
  • 如果你要查看我的仓库,请告诉我,我会把链接发给你!谢谢@周宇
  • 嗨@Jiah827,我认为错误可能是由代码的其他部分引起的。如果您提供a minimal,reproducible example 而不是整个源代码会更好。此外,如果您在完整代码中遇到语法错误,我认为您最初提出的关于将 es6 转换为 es5 的问题的猜测可能是正确的。您还可以尝试使用babel 将代码中的 es6 语法转换为 es5。
  • 我在开发模式下没有任何语法错误。我已经更新了代码示例链接。谢谢!!
  • 太奇怪了,在 prod 模式下(以及在 dev 模式下)仍然无法重现任何错误。我使用npm run build 让它在prod 模式下运行,你可以检查the result。我刚刚用您上一版中的文件替换了这些文件并安装了一些需要的软件包。另外,我将assets文件夹移动到src,并在使用时修改了路径。你可以查看我的file catalogpackage.json
猜你喜欢
  • 1970-01-01
  • 2020-04-27
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 2017-04-08
  • 2019-08-08
  • 2016-12-24
  • 1970-01-01
相关资源
最近更新 更多