HarmonyOS鸿蒙Next中HMRouter的组件中使用lazy import编译报错Module '"..XXX"' has no exported member 'from'. At File:
HarmonyOS鸿蒙Next中HMRouter的组件中使用lazy import编译报错Module ‘"…XXX"’ has no exported member ‘from’. At File: 项目中使用了HMrouter ,做优化时给自定义组件的import 加了lazy ,编译报错,
去掉lazy可以正常编译,
环境问题不能截图,是否有人知道原因
感谢您的提问,能否提供相关demo
根据描述写了以下场景均未复现,默认导出和分别导出、导出带注解的Component:
import { HMDefaultGlobalAnimator, HMNavigation, HMRouter, HMRouterMgr } from "@hadss/hmrouter";
import { AttributeUpdater } from "@kit.ArkUI";
import lazy { ComponentA } from "../component/ComponentA";
import lazy ComponentB from "../component/ComponentB";
import lazy { PageC } from "../component/ComponentC";
@Entry
@Component
struct Index {
modifier: MyNavModifier = new MyNavModifier();
build() {
// @Entry中需要再套一层容器组件,Column或者Stack
Column(){
// 使用HMNavigation容器
HMNavigation({
navigationId: 'MainNavigation', homePageUrl: 'HomePage',
options: {
standardAnimator: HMDefaultGlobalAnimator.STANDARD_ANIMATOR,
dialogAnimator: HMDefaultGlobalAnimator.DIALOG_ANIMATOR,
modifier: this.modifier
}
})
}
.height('100%')
.width('100%')
}
}
class MyNavModifier extends AttributeUpdater<NavigationAttribute> {
initializeModifier(instance: NavigationAttribute): void {
instance.hideNavBar(true);
}
}
@HMRouter({ pageUrl: 'HomePage' })
@Component
export struct HomePage {
build() {
Column() {
Button('Push C')
.onClick(() => {
HMRouterMgr.push({ pageUrl: 'PageC' })
})
ComponentA()
ComponentB()
PageC()
}
}
}
// ComponentC.ets
import { HMRouter, HMRouterMgr } from "@hadss/hmrouter"
@HMRouter({ pageUrl: 'PageC' })
@Component
export struct PageC {
build() {
Column() {
Button('Push HomePage')
.onClick(() => {
HMRouterMgr.push({ pageUrl: 'HomePage' })
})
}
}
}
关于组件的懒加载可以尝试:通过If条件判断延迟创建,或者使用组件动态创建解决页面、组件加载缓慢的问题。
更多关于HarmonyOS鸿蒙Next中HMRouter的组件中使用lazy import编译报错Module '"..XXX"' has no exported member 'from'. At File:的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
1.我尝试了一下使用lazy的导出方式复现了楼主的操作
复现错误:
ERROR: 10505001 ArkTS Compiler Error
Error Message: Module '"../pages/L****Page"' has no exported member 'from'. At File: C:/Users/admin/DevEcoStudioProjects****/generated/HMfrom-1974194127.ets:1:10
错误代码位置:
import lazy { HMPopInfo, HMRouter } from '@hadss/hmrouter';
2.解决方案
我理解的是HMPopInfo, HMRouter这两个导入的东西是要在静态编译的时候就需要使用到的,因为HMRouter在编译的时候会生成相应的Navigation路径更具模版生成页面,而HMRouter就是脚本需要的装饰器,使用了;lazy的当时导出导致在静态编译阶段找不到相应的信息,从而编译错误。
使用lazy的时候通常是页面、@Component
UI 组件,开发者可以精准定位启动阶段不必预先加载的文件列表,并在这些文件的调用点增加lazy标识
3.参考文档
延迟加载(lazy import)-ArkTS模块化-ArkTS运行时-ArkTS(方舟编程语言)-应用框架 - 华为HarmonyOS开发者
如果底部是三个tabs,但是首屏只展示第一个tab,预期逻辑是给第二个和第三个组件的import加上lazy ,如果不适用lazy的话,会加载第二个第三个组件,包括它内部的导包,都会占用冷启动时间,目前看这个问题只有使用了@HMRouter({ pageUrl: ‘XXX’ })这个装饰器的页面才会编译失败,其他的子组件可以正常使用lazy。
可能原因
-
导出声明不匹配
错误信息has no exported member 'from'
表明模块中未正确导出名为’from’的成员。常见于:- 导出时未使用
export
关键字显式暴露成员 - 导出名称与导入名称大小写不一致(如导出
From
但导入from
)
- 导出时未使用
-
懒加载语法误用
鸿蒙支持动态导入(Dynamic Import)而非直接使用lazy
修饰符。错误通常源于语法格式不符合规范。
ArkTS/HarmonyOS中正确的懒加载语法需要严格遵循ES模块规范:
// 正确写法(箭头函数返回Promise)
const HomePage = lazy(() => import('../pages/HomePage'));
必须通过() => import()形式封装动态导入
缺少箭头函数会导致编译器无法识别模块加载方式
在HarmonyOS鸿蒙Next中使用HMRouter时,lazy import报错"Module has no exported member ‘from’"通常由以下原因导致:
- 导入路径或导出名错误:检查目标模块是否正确定义并导出相应成员
- TypeScript配置问题:确保tsconfig.json中moduleResolution设置为"node"
- 模块声明缺失:确认被导入模块存在完整的类型声明文件
- 构建工具兼容性:验证HMRouter版本与当前HarmonyOS SDK的兼容性
检查导入语句格式应为:
const Module = lazy(() => import('./Module'));
确保import路径准确且目标模块使用export正确定义成员。