[英]SyntaxError: Strict mode does not allow function declarations in a lexically nested statement
After upgrading from React Native 0.18 to 0.22 for Android, I have started to get the following error: 从React Native 0.18升级到0.22 for Android后,我开始收到以下错误:
Got JS Exception: SyntaxError: Strict mode does not allow function declarations in a lexically nested statement.
It crashes the app at start app, and it is impossible to start debugging. 它在启动应用程序时崩溃了应用程序,无法启动调试。
As suggested by this post , I have tried to remove all 'use strict' manually as well as using build script: 正如本文所述 ,我试图手动删除所有'use strict'以及使用构建脚本:
gulp.task('transform-android', function() {
return gulp.src(config.tasks.androidjs.src)
.pipe(envify({NATIVE: true}))
.pipe(babel({
"stage": 0,
blacklist: ["useStrict"]
}))
.pipe(gulp.dest(path.join(config.root.dest, config.tasks.androidjs.dest)));
});
There is no 'use strict' anymore in the generated code. 生成的代码中不再存在“use strict”。 However, I am still getting the exact same error.
但是,我仍然得到完全相同的错误。 I am using babel v5.8.3.
我正在使用babel v5.8.3。
Any help is highly appreciated! 任何帮助都非常感谢!
Here's my package.json 这是我的package.json
{
"name": "xodo",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "node_modules/react-native/packager/packager.sh"
},
"author": "",
"license": "ISC",
"dependencies": {
"events": "^1.1.0",
"firebase": "^2.3.1",
"flux": "^2.0.1",
"immutable": "3.7.3",
"jwt-decode": "^1.4.0",
"linkifyjs": "^2.0.0-beta.7",
"lodash": "^3.10.1",
"promise-queue": "^2.2.3",
"react": "^0.14.7",
"react-immutable-proptypes": "^1.5.1",
"react-native": "^0.22.2",
"react-native-invertible-scroll-view": "^0.2.0",
"reqwest": "^1.1.5",
"rsvp": "^3.0.18",
"unbounce": "^0.1.0",
"xmldom": "^0.1.22"
},
"devDependencies": {
"babel": "^5.8.3",
"del": "^2.2.0",
"gulp": "^3.9.0",
"gulp-babel": "^5.3.0",
"gulp-envify": "^1.0.0",
"gulp-less2js": "0.0.3",
"gulp-rename": "^1.2.2",
"gulp-replace": "^0.5.4",
"gulp-sequence": "^0.4.0",
"path": "^0.12.7"
}
}
Below is the full stacktrace of the error: 下面是错误的完整堆栈跟踪:
Got JS Exception: SyntaxError: Strict mode does not allow function declarations in a lexically nested statement.
03-29 15:15:01.567 2047-2109/com.xodo.pdf.reader E/unknown:React: Exception in native call from JS
com.facebook.react.bridge.JSExecutionException: SyntaxError: Strict mode does not allow function declarations in a lexically nested statement. (http://10.0.3.2:8081/index.android.bundle?platform=android&dev=true&hot=false:32356)
at com.facebook.react.bridge.ReactBridge.loadScriptFromFile(Native Method)
at com.facebook.react.bridge.JSBundleLoader$2.loadScript(JSBundleLoader.java:58)
at com.facebook.react.bridge.CatalystInstanceImpl$2.call(CatalystInstanceImpl.java:146)
at com.facebook.react.bridge.CatalystInstanceImpl$2.call(CatalystInstanceImpl.java:137)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$1.run(MessageQueueThreadImpl.java:73)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31)
at android.os.Looper.loop(Looper.java:148)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:184)
at java.lang.Thread.run(Thread.java:818)
problem appears in one of the core files. 问题出现在其中一个核心文件中。 pull request is alredy created for react-native but you can make changes by yourself as workaround
pull request是为react-native创建的,但您可以自己进行更改以作为变通方法
open node_modules\\react-native\\Libraries\\Core\\InitializeCore.js line 112
open node_modules \\ react-native \\ Libraries \\ Core \\ InitializeCore.js第112行
change function handleError(e, isFatal) to var handleError = function(e, isFatal)
将函数handleError(e,isFatal)更改为var handleError = function(e,isFatal)
then do npm start -- --reset-cache
然后做npm start - --reset-cache
you can find more information at https://github.com/facebook/react-native/issues/11389 您可以在https://github.com/facebook/react-native/issues/11389找到更多信息
This is not a direct answer to your problem but more of a concept or reason behind the error. 这不是您问题的直接答案,而是错误背后的概念或原因。
When an inner function is defined in a block rather than function body it will give SyntaxError. ES5 disallows function declarations on blocks (except function bodies). On the other hand, ES2015 (ES6) has relaxed this restriction.
Here is ESLint rule no-inner-declaration 这是ESLint规则no-inner-declaration
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.