React Typescript:第 0 行:解析错误:无法读取未定义的属性“名称”

Posted

技术标签:

【中文标题】React Typescript:第 0 行:解析错误:无法读取未定义的属性“名称”【英文标题】:React Typescript: Line 0: Parsing error: Cannot read property 'name' of undefined 【发布时间】:2020-06-28 22:28:43 【问题描述】:

今天突然我开始在使用 Typescript 构建的项目中遇到构建错误。在几周内没有更改的文件(或它引用的任何内容)中,我开始得到:

./path/to/my/file.ts
  Line 0:  Parsing error: Cannot read property 'name' of undefined

这个错误首先出现在我们的 CI 上,可以通过在服务器上手动构建来复制,并且在更新所有包后,我终于可以在自己的计算机上重现(运行完美)。现在,即使我拉出项目的旧(构建)提交,我也无法构建它。我已经将yarn.lock 提交给我的回购协议,但即使使用旧的package.jsonyarn.lock(我删除node_modules 并执行yarn),我也无法构建。

这个错误从今天开始就出乎意料。

可能是什么原因?


我的(可能相关的)版本:

yarn 1.22.4,
node v13.11.0,
typescript 3.7.5
react 16.12
react-scripts 3.4.0
macOS 10.15 Catalina

【问题讨论】:

我也遇到了同样的问题,请问您找到错误的原因了吗? @Kenjoe 问题现在自行消失了。可能是依赖项的对等依赖项配置错误。 【参考方案1】:

这个问题显然是由依赖项的一些(对等?)依赖项配置错误引起的,react-scripts 使用 TypeScript 模板。它走了。确保更新您的依赖项,清除 node_modules,甚至清除 package-lock.jsonyarn.lock,然后立即再次尝试全新构建。

【讨论】:

奇怪,升级到 3.8.X 无济于事,清除了 node_modules 再次安装,一切顺利 将 TS 更新到 3.8.x 修复了我的 eslint 问题,但在清除 node_modules 和 *-lock.json 文件之前,我一直无法构建。为了确定,我还关闭并重新打开了我的 IDE,现在一切正常。 在 2020 年 8 月,我通过在自动将依赖机器人升级到 ^4.0.2 后将 Typescript 回滚到 ^3.9.5 来解决此问题。 YMMV 如果您在升级到 TS 4.0 后遇到这个问题,那是因为 create-react-app 还不支持 TS 4.0(或者更准确地说,它的依赖项不支持)。 github.com/facebook/create-react-app/issues/9515 您可以通过降级 TS、使用 CRA 4.0 的预发布版本或根据 github.com/facebook/create-react-app/issues/9515 强制固定您的 ts-eslint 和解析器依赖项来修复 【参考方案2】:

我的一个app生成的案例

npx create-react-app my-app --template typescript

更准确地说,create-react-app@3.4.1

通过运行以下命令解决了该问题:

rm yarn-lock && rm -rf node_modules && npm i

之后你可以运行:

yarn startnpm start

【讨论】:

感谢cretae-react-app 的来电。这解决了我的问题。 虽然,在尝试删除 yarn.lock 并运行 yarn 之后,我还是设法让应用程序使用 yarn 进行编译 为我做的!刚刚删除了node_modules,然后是yarn,就是这样。【参考方案3】:

只需将 typescript 版本更新到 3.8.x :Link

【讨论】:

不,没有解决我的问题。每晚更新到 3.9,但仍然相同。 在 4.0 上,仍然遇到同样的问题。【参考方案4】:

就我而言,我只需要在 ts 文件的末尾添加一个额外的换行符。

export * from './result';
export * from './request';
//new line here

【讨论】:

【参考方案5】:

出现此错误是因为您的 typescript 与您的 typescript-eslint 插件不兼容。

您可以通过将这两个依赖项升级到最新版本来修复它。

"devDependencies": 
  "@typescript-eslint/eslint-plugin": "^4.6.0",
  "@typescript-eslint/parser": "^4.6.0",

【讨论】:

【参考方案6】:

更新 react-scripts 对我有用。 react-scripts 3.4.0可能不支持typescript 3.7.5

【讨论】:

【参考方案7】:

在我的例子中,罪魁祸首是不存在文件的资产导入,例如:

import  ReactComponent as SomeIcon  from '../assets/img/some-icon.svg';

上面的答案帮助我找到了罪魁祸首。 我跑了rm -rf node_modules package-lock.json && npm i && npm start导致显示真正的错误(而不是无用的神秘“第0行:解析错误:无法读取属性'名称'未定义的")

添加丢失的文件后,错误就消失了。

【讨论】:

【参考方案8】:

在我的情况下,这是因为我在 .\src 下有 TS 代码,它在 .\tools 下引用了 TS 代码,但我的 tsconfig.json 中的 include 中只有 src,添加 tools 已修复问题

【讨论】:

以上是关于React Typescript:第 0 行:解析错误:无法读取未定义的属性“名称”的主要内容,如果未能解决你的问题,请参考以下文章

react-router 和 typescript 抛出“无法解析 'react-router-dom'”错误

在 react-typescript 中导入 html 文件

使用 TypeScript 和 NPM 链接创建 React 应用程序:导致模块解析失败的枚举

无法从“screens\SignUpScreen.js”解析“react-native-paper/lib/typescript/src/components/MaterialCommunityIco

Webpack 和 TypeScript:无法解析 node.d.ts 中的模块“child_process”

第1784期React + Typescript 工程化治理实践