typescript - 在 React Native 中升级 Babel 后没有命名空间支持?
问题描述
我使用'react-native init --typescript'创建了一个项目,将react-native升级到0.59.5,babel使用npx babel-upgrade,安装并配置了metro-react-native-babel-preset。但是,现在日志说不支持命名空间。我还有什么要做的吗?
我尝试清理 npm 缓存,删除 node_modules 目录并重做 npm install。我什至尝试过重建项目。
.babelrc
{
"presets": ["module:metro-react-native-babel-preset"]
}
包.json
{
"name": "Ovik",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "react-native start --skipflow --reset-cache",
"develop:android": "react-native run-android --no-packager",
"develop:ios": "react-native run-ios --no-packager",
"check": "tsc --noEmit || true"
},
"dependencies": {
"@babel/core": "^7.0.0",
"babel-loader": "^8.0.5",
"es6-symbol": "^3.1.1",
"firebase": "^5.9.4",
"futura": "^0.2.0",
"geofire": "^5.0.1",
"lodash.isequal": "^4.5.0",
"react": "^16.8.6",
"react-native": "^0.59.5",
"react-native-firebase": "^5.3.1",
"react-native-safe-area-view": "^0.13.1",
"react-native-slider": "^0.11.0",
"react-native-typography": "^1.4.0"
},
"devDependencies": {
"@types/lodash.isequal": "^4.5.5",
"@types/react": "^16.8.13",
"@types/react-native": "^0.57.45",
"babel-core": "^7.0.0-bridge.0",
"babel-jest": "^23.4.2",
"jest": "^24.7.1",
"metro-react-native-babel-preset": "^0.53.1",
"patch-package": "^6.1.2",
"react-native-typescript-transformer": "^1.2.12",
"react-test-renderer": "^16.8.6",
"tslint": "^5.16.0",
"tslint-language-service": "^0.9.9",
"typescript": "^3.4.3",
"@babel/preset-flow": "^7.0.0"
},
"jest": {
"preset": "react-native",
"transform": {
"^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js"
}
}
}
我希望该项目像以前一样捆绑,但是它给出了以下错误
error: bundling failed: SyntaxError: D:\Project\ovik\src\state\loading\index.ts: Namespaces are not supported.
48 | /** Types */
49 |
> 50 | export namespace Loading {
| ^
51 | export interface State {
52 | }
53 |
at File.buildCodeFrameError (D:\Project\ovik\node_modules\@babel\core\lib\transformation\file\file.js:261:12)
at NodePath.buildCodeFrameError (D:\Project\ovik\node_modules\@babel\traverse\lib\path\index.js:157:21)
at PluginPass.TSModuleDeclaration (D:\Project\ovik\node_modules\@babel\plugin-transform-typescript\lib\index.js:244:22)
at newFn (D:\Project\ovik\node_modules\@babel\traverse\lib\visitors.js:193:21)
at NodePath._call (D:\Project\ovik\node_modules\@babel\traverse\lib\path\context.js:53:20)
at NodePath.call (D:\Project\ovik\node_modules\@babel\traverse\lib\path\context.js:40:17)
at NodePath.visit (D:\Project\ovik\node_modules\@babel\traverse\lib\path\context.js:88:12)
at TraversalContext.visitQueue (D:\Project\ovik\node_modules\@babel\traverse\lib\context.js:118:16)
解决方案
我对 React Native 的了解是有限的,但我确实对转译器/捆绑器有相当长的了解。
您的升级显然包括 babel 的新 typescript 预设或transform-typescript
插件。就像它说namespace
的那样,babel 不支持。原因是 babel 在每个文件的基础上进行编译,这与将项目作为一个整体的 typescript 不同。
这个警告会留下来,不太可能在不久的将来得到修复。因此,您要么放弃namespace
使用,要么切换回以前的配置并继续tsc
用作编译器。
推荐阅读
- vba - VBA Word 将现有形状添加到主标题
- reactjs - 在 React 中动态调用方法
- firebase - 如何使用 PubSub 一次获取一条消息
- macos - 在 Mac 上安装 Tensorflow 的问题
- javascript - forEach() 中的 parseFloat() 不起作用
- ios - 使导航控制器的 largeTitleDisplayMode 对特定的滚动视图做出反应
- python - 从 Pandas 数据框生成三元组
- php - 如何防止意外的语法错误?
- android - React Native 应用程序无法在真正的 Android 手机上运行
- css - PrimeNG Accordion 无法正常工作和显示