鸿蒙NEXT版实战开发:编译报错“Cannot find module XXX or its corresponding type declarations”
往期鸿蒙全套实战文章必看:(附带鸿蒙全栈学习资料)
-
鸿蒙开发核心知识点,看这篇文章就够了
-
最新版!鸿蒙HarmonyOS Next应用开发实战学习路线
-
鸿蒙HarmonyOS NEXT开发技术最全学习路线指南
-
鸿蒙应用开发实战项目,看这一篇文章就够了(部分项目附源码)
编译报错“Cannot find module XXX or its corresponding type declarations”
- 场景一:
问题现象
Stage模板工程编译引用native文件(.so) 提示 "Cannot find module XXX or its corresponding type declarations."。
解决措施
当前Stage工程在编译构建阶段新增对native文件(.so)导出符号的语法校验,如果引用了没有对应声明文件(.d.ts)的native文件(.so)的现有工程在编译构建阶段,语法校验工具便会报错提示找不到对应的声明文件。
如果出现类似问题,可尝试通过如下方式进行解决:
- 在对应cpp目录下新建types/libxxx目录,并在该目录下新增index.d.ts用于声明native的类型符号;新增oh-package.json5配置文件用于校验工具的模块查询。
- 在native引用的模块内的oh-package.json5中添加native模块的本地依赖,并根据IDE提示点击Sync Now同步工程,下图以entry模块引用native模块为例。
- 在对应cpp目录下新建types/libxxx目录,并在该目录下新增index.d.ts用于声明native的类型符号;新增oh-package.json5配置文件用于校验工具的模块查询。
- 场景二:
问题现象
API 11 Stage模型工程编译失败,提示“Cannot find module '@kit.xxx' or its corresponding type declarations”。
问题原因
出现该问题的原因是使用DevEco Studio NEXT Developer Preview1及之后版本,新创建的API 11 Stage模型的模板文件里面使用的import方式,全部改为了import xxx from '@kit.xxx'的方式,若SDK使用的是HarmonyOS NEXT Developer Preview1之前的版本,将会出现编译报错,因为旧的SDK不支持此类方式导入。
解决措施
如果出现类似问题,需要对SDK进行升级或升级DevEco Studio。
- 如果使用的是DevEco Studio NEXT Developer Preview1至HarmonyOS NEXT Developer Beta1(5.0.3.300)之间的版本,在菜单栏点击Tool > SDK Manager,将SDK升级至HarmonyOS NEXT Developer Preview1及以上版本后,重新进行编译。
- 如果使用的是HarmonyOS NEXT Developer Beta1(5.0.3.300)及以上的版本,SDK随DevEco Studio软件包安装,无需单独下载,请在下载中心下载并使用新版本DevEco Studio。
- 场景三:
问题现象
引用三方包,构建失败,提示“Cannot find module 'xxx' or its corresponding type declarations”。
解决措施
进入对应模块级oh-package.json5文件或工程级oh-package.json5文件中查看三方包是否已安装,若未安装,需执行ohpm install安装;若已安装,需查看“main”字段是否配置正确,若未配置或配置错误,需配置为正确的入口文件。
- 场景四:
问题现象
引用的包路径被混淆,代码中又是在引用包后面拼接了路径,导致模块引用不到而报错。
例如:
代码中这样引用
这样引用会找不到模块,导致报错。
解决措施
修改引用方式,改为推荐的引用方式。
- 场景五:
问题现象
被引用模块oh_package.json5配置有误,执行了ohpm install 并且成功地安装了依赖,但是还报错模块找不到。
被引用模块的 oh_package.json5 中配置了错误的types字段。
该字段优先于main字段。 如果 types 字段配置的不存在,就会报错模块找不到。
解决措施
如果该包中没有d.ets声明,则这个字段可以删除。配置不存在或者错误,会导致报错。
- 场景六:
问题现象
oh_package.json5中dependencies中引入模块的名称和实际使用时import的不一致。
例如在oh_package.json5 中这样引入:
"dependencies": { "har": "file:../har" }
但是实际上在代码中import的时候是大写 HAR或者其他而不是dependencies里面配置的‘har’的值,要注意保持完全一致。(目前windows 没有问题,linux会报错模块找不到)
解决措施
引入和使用改成一致。
- 场景七:
问题现象
引用模块的oh_package.json5中main字段值和实际的文件名称大小写不一致。
解决措施
将main字段和实际文件名称的大小写改为一致。
- 场景八:
问题现象
Stage模板工程编译构建失败,提示 "Cannot find module '@bundle:rollup_plugin_ignore_empty_module_placeholder' or its corresponding type declarations"。
解决措施
该问题是由于工程引用了无对应实现文件的.d.ts声明文件:
- 通过在build目录中搜索'rollup_plugin_ignore_empty_module_placeholder',找到报错的中间文件,并根据中间文件找到对应工程文件。
在输入栏中输入rollup_plugin_ignore_empty_module_placeholder,找到问题模块的中间文件。
- 在引用类型文件中通过添加type显式声明符号类型引用:
export type {T} from './type';
- 同时排查是否从d.ts/d.ets中引用值类型符号,禁止在声明文件中声明值变量。
- 通过在build目录中搜索'rollup_plugin_ignore_empty_module_placeholder',找到报错的中间文件,并根据中间文件找到对应工程文件。
本文地址:https://www.vps345.com/10102.html