HarmonyOS 鸿蒙Next在开发过程中遇到的报错:A page configured in 'main_pages.json' must have one and only one '@Entry' decorator.

发布于 1周前 作者 itying888 来自 鸿蒙OS

HarmonyOS 鸿蒙Next在开发过程中遇到的报错:A page configured in ‘main_pages.json’ must have one and only one ‘@Entry’ decorator.

这个报错是在使用预览器查看页面时报的 根据翻译的意思是在 这个配置文件中的每一个文件中都应该有入口修饰符,但是这个配置文件中有所有文件的信息包括组件,这个问题就处在组件上,因为组件上是不可以有入口修饰符的。

通常的组件是不需要进行跳转的所以可以在 main_pages.json 配置文件中将组件对应的路径删除掉 就没有这个问题了。

如果说需要这个路径并且单纯的想要看预览器的话就在组件文件上加上入口修饰符 @Entry 但是要记得看完删除掉,期间也会报错但是不影响显示  报下面这个错

It’s not a recommended way to export struct with @Entry decorator, which may cause ACE Engine error in component preview mode.

顺便求助大佬有没有更好的解决方法

5 回复

main_pages.json 是配置页面文件(内有带[@Entry](/user/Entry)的组件) 的配置文件,因此如果文件中只有组件(不带[@Entry](/user/Entry))则不要配置在main_pages.json中;

对于不带[@Entry](/user/Entry)的UI组件,在[@Component](/user/Component)前加[@Preview](/user/Preview)即可用预览器查看。

不用[@Entry](/user/Entry),直接加个[@Preview](/user/Preview)即可预览非入口组件。

加在哪里呢,这是我的组件 报错了A page configured in ‘main_pages.json’ must have one and only one ‘@Entry’ decorator. <ArkTSCheck>,但是我在main_pages未声明 // DynamicComponent.ets import { NodeController, BuilderNode, FrameNode, UIContext } from ‘@kit.ArkUI’;

export interface BuilderData { url: string; controller: WebviewController; }

const storage = LocalStorage.getShared();

export class NodeControllerImpl extends NodeController { private rootNode: BuilderNode<BuilderData[]> | null = null; private wrappedBuilder: WrappedBuilder<BuilderData[]> | null = null;

constructor(wrappedBuilder: WrappedBuilder<BuilderData[]>) { super(); this.wrappedBuilder = wrappedBuilder; }

makeNode(): FrameNode | null { if (this.rootNode != null) { return this.rootNode.getFrameNode(); } return null; }

initWeb(url: string, controller: WebviewController) { if(this.rootNode != null) { return; }

const uiContext: UIContext = storage.get&lt;UIContext&gt;("uiContext") as UIContext;
if (!uiContext) {
  return;
}
this.rootNode = new BuilderNode(uiContext);
this.rootNode.build(this.wrappedBuilder, { url: url, controller: controller });

} }

export const createNode = (wrappedBuilder: WrappedBuilder<BuilderData[]>, data: BuilderData) => { const baseNode = new NodeControllerImpl(wrappedBuilder); baseNode.initWeb(data.url, data.controller); return baseNode; }

你这个代码全么?我感觉你这应该是一个只处理数据的文件吧,这个文件中是不是没有ui啊,那你应该看看 main_page 文件中是不是一条路径都没有,如果一条都没有说明没以启动页 也会出现这个报错

遇到HarmonyOS鸿蒙系统中“A page configured in ‘main_pages.json’ must have one and only one ‘@Entry’ decorator”的错误,这通常表明在main_pages.json配置文件中指定的页面,其对应的JS文件中没有正确或仅有一个[@Entry](/user/Entry)装饰器。[@Entry](/user/Entry)装饰器用于标记一个页面作为应用的入口或路由目标。

解决此问题,请按以下步骤操作:

  1. 检查main_pages.json:确认文件中列出的每个页面组件都正确指向了相应的JS文件。
  2. 检查JS文件:打开对应的JS文件,确保该文件中只有一个类使用了[@Entry](/user/Entry)装饰器。如果有多余的或缺失的[@Entry](/user/Entry),请删除多余的或添加缺失的。
  3. 确保装饰器语法正确[@Entry](/user/Entry)装饰器应直接位于类定义之前,没有多余的空格或错误。
  4. 重新编译项目:修改后,重新编译并运行你的HarmonyOS应用,看问题是否解决。

如果以上步骤都正确无误,但问题依旧存在,可能需要检查其他配置或代码逻辑错误。此时,可以考虑查看HarmonyOS的官方文档或示例代码,以获取更多帮助。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部