我今天用create-react-app创建了一个新项目。生产版本在IE11上运行不正常,控制台显示以下错误:
SCRIPT1010: Expected identifier
它指向我的main.js中的行:
{var n=e&&e.__esModule?function(){return e.default}:function(){return e};
错误发生在上面的e。(默认)之后。我的包json很简单:
{
"name": "sample-app",
"version": "0.1.0",
"private": true,
"dependencies": {
"react": "^16.3.1",
"react-dom": "^16.3.1",
"react-scripts": "1.1.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
}
}
奇怪的是,我的开发服务器在IE11上完美运行,所以问题只在于生成版本。它也适用于Chrome。我需要填充吗?
答案 0 :(得分:1)
看来填充料的顺序也是一个因素。此问题中有几种解决方案可以帮助解决此问题。 https://github.com/facebook/react/issues/8379
答案 1 :(得分:0)
您需要包含babel-polyfill并转换为ES5以便IE11正常工作。
React 16取决于集合类型Map和Set。如果你支持 较旧的浏览器和设备可能尚未提供这些本机 (例如IE< 11)或具有不兼容的实现(例如IE 11),考虑在捆绑应用程序中包含全局polyfill, 例如core-js或babel-polyfill。
https://reactjs.org/docs/javascript-environment-requirements.html
您可以通过webpack包含polyfill,如此
entry: {
app: [
'babel-polyfill',
'react-hot-loader/patch',
'react',
'react-dom',
'./src/index.web.tsx',
]
},
答案 2 :(得分:0)
这是IE问题,不是框架反应。
“默认”是IE上的保留字的问题
您可以将“默认”函数重命名为新名称,或将javascript函数用作:
return e["default"]
答案 3 :(得分:0)
这是我修复它的方法。不要忘了React先生“ Dan Abramov”在这方面帮助了我。
因此,问题是默认情况下,应用程序是在IE7上呈现的,而不仅仅是在支持已编译版本的IE IE11 / EDGE上呈现。因此,我不得不提及元信息,以使浏览器知道预期的浏览器是IE11 / edge。将其添加到index.html的function OpenFirstDiv() {
document.getElementById("FirstDiv").style.display = 'block';
document.getElementById("SecondDiv").style.display = 'none';
}
function OpenSecondDiv() {
document.getElementById("FirstDiv").style.display = "none";
document.getElementById("SecondDiv").style.display = "block";
}
部分:
head
现在,正如我所知,您还会在控制台中看到以下错误:
<meta http-equiv="X-UA-Compatible" content="IE=edge">
不用担心,还有一种解决方法:https://reactjs.org/docs/javascript-environment-requirements.html
这是我在git上与Dan讨论的问题:https://github.com/facebook/create-react-app/issues/4255