我已经使用create-react-app
创建了一个基本的React Web应用,并在弹出后具有以下结构。工作得很好。
intended-app-home
|- the-app
|- config
|- node_modules
|- public
|- scripts
|- src
|- package.json
|- .eslintignore
|- .eslintrc
|- .gitignore
现在,我想将the-app
的内容向上移动到文件夹intended-app-home
。当我这样做时,运行npm start
时出现以下错误:
Failed to compile.
Error in ./src/index.js
1:1 error Parsing error: 'import' and 'export' may appear only with 'sourceType: module'
✖ 1 problem (1 error, 0 warnings)
Error in ./src/components/Blah.js
1:1 error Parsing error: 'import' and 'export' may appear only with 'sourceType: module'
我错过了什么?假设app文件夹是可移植的是不安全的?
以下是我的.eslintrc
内容:
{
"extends": "eslint:recommended",
"env": {
"browser": true,
"commonjs": true,
"node": true,
"es6": true
},
"parserOptions": {
"ecmaVersion": 6
},
"rules": {
"no-console": "off",
"strict": ["error", "global"]
}
}
答案 0 :(得分:2)
您必须将以下内容添加到.eslintrc
,因为错误提示:
"parserOptions": {
"sourceType": "module"
}
sourceType
- 如果您的代码位于ECMAScript模块中,则设置为"script"
(默认)或"module"
。
问题是,在ECMAScript 2015中,有诸如脚本和模块之类的东西。脚本只是简单的JavaScript文件。另一方面,模块是导出数据和/或导入其他模块的脚本。因此,如果要使用import
或export
,则必须指定"sourceType": "module"
,以便ESLint可以使用Espree正确解析模块代码并将其拖放。
现在解释为什么只有当the-app
内容向上移动一级时才会出现错误。默认情况下,Create React App对package.json
中指定的项目使用以下ESLint配置:
"eslintConfig": {
"extends": "react-app"
}
因此,ESLint配置只是扩展了React App配置。如果您在eslint-config-react-app
中查看index.js
的来源:
parserOptions: { ecmaVersion: 6, sourceType: 'module', ecmaFeatures: { jsx: true, generators: true, experimentalObjectRestSpread: true, }, },
因此,默认情况下,Create React App的ESLint配置将sourceType
设置为module
。当您尝试将the-app
的内容上移一级时,会出现问题。由于您的.eslintrc
不指定sourceType
,因此使用默认值script
。由于.eslintrc
会覆盖来自Create React App 1 的package.json
中的ESLint,因此您在脚本中无法使用import
和export
时会发生错误
如果要添加新规则,则不应创建新的ESLint配置文件。相反,只需编辑package.json
中已有的配置:
"eslintConfig": {
"extends": ["eslint:recommended", "react-app"],
"rules": {
"no-console": "off",
"strict": ["error", "global"]
}
}
请注意,eslint-config-react-app
已为您设置env
。
1 如果选中the ESLint source,默认的CLI选项是使用.eslintrc
,如果文件存在于eslintConfig
package.json
之内,查看属性useEslintrc: true
。因此被覆盖的原因。
答案 1 :(得分:0)
如果上述方法没有帮助,删除ios / build文件夹并再次运行对我来说是有效的。
即从您的新根文件夹
rm -r ios/build
npx react-native run-ios