鸿蒙NEXT版实战开发:编译报错“Cannot find module XXX or its corresponding type declarations”

往期鸿蒙全套实战文章必看:(附带鸿蒙全栈学习资料)


编译报错“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)的现有工程在编译构建阶段,语法校验工具便会报错提示找不到对应的声明文件。

    如果出现类似问题,可尝试通过如下方式进行解决:

    1. 在对应cpp目录下新建types/libxxx目录,并在该目录下新增index.d.ts用于声明native的类型符号;新增oh-package.json5配置文件用于校验工具的模块查询。

    2. 在native引用的模块内的oh-package.json5中添加native模块的本地依赖,并根据IDE提示点击Sync Now同步工程,下图以entry模块引用native模块为例。

  • 场景二:

    问题现象

    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声明文件:

    1. 通过在build目录中搜索'rollup_plugin_ignore_empty_module_placeholder',找到报错的中间文件,并根据中间文件找到对应工程文件。

      在输入栏中输入rollup_plugin_ignore_empty_module_placeholder,找到问题模块的中间文件。

    2. 在引用类型文件中通过添加type显式声明符号类型引用:
      export type {T} from './type';

    3. 同时排查是否从d.ts/d.ets中引用值类型符号,禁止在声明文件中声明值变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值