javascript - React - 由于某种原因,Babel Polyfill 不会阻止 Set 或 Weakmap 上的异常,但会填充 Promise

标签 javascript reactjs babeljs babel-polyfill

我正在尝试提供与 IE 10 的某种交叉兼容性。我已经使用 Babel Polyfill 来解决 IE 11 的 Promise 异常,但对于 IE 10,我收到了 Set 和 Weakmap 的异常,babel polyfill 应该纠正这些异常因为据我了解,这些也包括在内。

这是我的第一个 React/React-static 项目,所以说实话,我凭感觉行事,所以希望有人能以简单清晰的方式帮助/解释事情。

仅供引用:react-static 构建生成的 main.js 文件中未定义 Set。 Weakmap 存在于 hot-reloader 模块中,这只是开发模式下的问题。

我的 App.js 文件:

import "babel-polyfill";
import React from "react";
import { Router, Link } from "react-static";
import { hot } from "react-hot-loader";
import Routes from "react-static-routes";

import "./sass/app.scss";
import "./sass/_base.scss";
import "./sass/_layout.scss";
import "./sass/_utilities.scss";
import "./sass/main.scss";

import "./sass/_components.scss";

const App = () => (
    <Router>
        <div>
            <Routes />
        </div>
    </Router>
);

export default hot(module)(App);

我的 static.config.js 文件:

import ExtractTextPlugin from "extract-text-webpack-plugin";

export default {
    getSiteData: () => ({
        title: "React Static"
    }),
    getRoutes: async () => {
        // const { data: posts } = await axios.get(
        //  "https://jsonplaceholder.typicode.com/posts"
        // );
        return [
            {
                path: "/",
                component: "src/containers/Home"
            },
            {
                path: "/about",
                component: "src/containers/About"
            },
            {
                path: "/services",
                component: "src/containers/Services"
            },
            {
                path: "/cases",
                component: "src/containers/Cases"
            },
            {
                path: "/process",
                component: "src/containers/Process"
            },
            {
                path: "/contact",
                component: "src/containers/Contact"
            },
            {
                path: "/contactsent",
                component: "src/containers/Contactsent"
            },
            {
                is404: true,
                component: "src/containers/404"
            }
        ];
    },
    webpack: (config, { defaultLoaders, stage }) => {
        let loaders = [];

        if (stage === "dev") {
            loaders = [
                { loader: "style-loader" },
                { loader: "css-loader" },
                { loader: "sass-loader" }
            ];
        } else {
            loaders = [
                {
                    loader: "css-loader",
                    options: {
                        importLoaders: 1,
                        minimize: stage === "prod",
                        sourceMap: false
                    }
                },
                {
                    loader: "sass-loader",
                    options: { includePaths: ["src/", "src/sass/"] }
                }
            ];

            // Don't extract css to file during node build process
            if (stage !== "node") {
                loaders = ExtractTextPlugin.extract({
                    fallback: {
                        loader: "style-loader",
                        options: {
                            sourceMap: false,
                            hmr: false
                        }
                    },
                    use: loaders
                });
            }
        }

        config.module.rules = [
            {
                oneOf: [
                    {
                        test: /\.s(a|c)ss$/,
                        use: loaders
                    },
                    defaultLoaders.cssLoader,
                    defaultLoaders.jsLoader,
                    defaultLoaders.fileLoader
                ]
            }
        ];
        return config;
    }
};

我的package.json:

{
  "name": "react-static-example-basic",
  "version": "1.0.1",
  "main": "index.js",
  "license": "MIT",
  "scripts": {
    "start": "react-static start",
    "stage": "react-static build --staging",
    "build": "react-static build",
    "serve": "serve dist -p 3000"
  },
  "dependencies": {
    "axios": "^0.16.2",
    "core-js": "^3.0.1",
    "es6-promise": "^4.2.6",
    "promise-polyfill": "8.1.0",
    "raf": "^3.4.1",
    "react": "^16.0.0",
    "react-dom": "^16.0.0",
    "react-router": "^4.2.0",
    "react-spring": "^8.0.5",
    "react-static": "^5.9.7"
  },
  "devDependencies": {
    "babel-polyfill": "^6.26.0",
    "eslint-config-react-tools": "1.x.x",
    "extract-text-webpack-plugin": "^3.0.2",
    "node-sass": "^4.7.2",
    "sass-loader": "^6.0.6",
    "serve": "^6.1.0"
  }
}

最佳答案

可能值得尝试单独安装 core-js在程序集中包含此类模块:

npm i --save core-js
import "core-js/es/set";
import "core-js/es/weak-map";

如果这没有帮助,请尝试使用 polyfill.io :
添加您的 html:

<script crossorigin="anonymous" src="https://polyfill.io/v3/polyfill.min.js?features=WeakMap%2CWeakSet%2CSet"></script>

关于javascript - React - 由于某种原因,Babel Polyfill 不会阻止 Set 或 Weakmap 上的异常,但会填充 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55875710/

相关文章:

javascript - 在JS函数中使用 'this'来更新innerHTML

javascript - 使用 jQuery resizing 来改变填充

javascript - 是否可以在 ipad 上使用 iscroll 选择文本?

javascript - 结合 Arbnb 配置和 Facebook Flow 的 ESLint

reactjs - 在没有 mapStateToProps 的情况下使用带有钩子(Hook)的 createSelector(或任何记忆化选择器)

javascript - webpack 的“npm run build”,我收到错误...帮助我

reactjs - 弹出 create-react-app 后无法使用扩展运算符

c# - 如何使用 OAuth 像小部件一样保护客户端脚本?

javascript - 搜索过滤器在 setState : React JS 上的 react 表中不起作用

javascript - 如何在react功能组件中绑定(bind)? .bind(this) 不起作用