�鸿蒙报错速查:Cannot find name ‘require‘,禁用 require(),根因 + 真解法
报错原文ERROR: 10505001 ArkTS Compiler Error Error Message: Cannot find name require. Did you mean Require? At File: xxx.ets:N:N报错触发场景你写鸿蒙 ArkTS 时用 Node.js 的require()就炸// ❌ 报错写法 const path require(path) const fs require(fs) const http require(ohos.net.http)根因鸿蒙 ArkTS禁用 Node.js 的require()——这是跟 Node.js 最大的差异。Node.js 里require()是 CommonJS 规范的模块加载ArkTS 按 ES Module 规范设计只能用import。ArkTS 这么设计的原因ES Module 是静态分析友好的——import在编译期就能解析依赖图require()是运行时动态加载编译器分析不了。ArkTS 要求编译期消除一切歧义禁用require()。真解法用import替代require()三种姿势解法 1import整个模块// ✅ 正解 1import 整个模块替代 require() import common from ohos.app.ability.common import relationalStore from ohos.data.relationalStore // 用法 const ctx: common.UIAbilityContext getContext(this) as common.UIAbilityContext const rdb: relationalStore.RdbStore await relationalStore.getRdbStore(ctx, config)解法 2import { }解构单个符号// ✅ 正解 2import { } 解构替代 require() import { AppStorageV2 } from ohos.arkui.StateManagement import { BusinessError } from ohos.base // 用法 const cfg AppStorageV2.connect(AppConfig, appConfig, () new AppConfig())解法 3import type仅类型引入// ✅ 正解 3import type 仅类型引入替代 require() import type { Want } from ohos.app.ability.Want // 用法仅类型注解不占运行时 const want: Want { bundleName: com.xx, abilityName: Main } as Want真机配图import 替代 require 正解能编译能跑import/import { }/import type三种替代require()——正解能编译能跑。三个函数都真返了正确类型值import 正解初始态import common/import relationalStore/import type Want 均未调用点调三个函数后import commoncommon.UIAbilityContextimport relationalStorerelationalStore.RdbStoreimport type WantWant.type报错写法用require()编译就炸装不上真机正解写法import/import { }/import type替代能跑三种替代都真返了正确类型值。用了 require 就炸import 就跑——这是 ArkTS ES Module 规范最直白的证据。高频踩坑场景场景 1Node.js 习惯写require(path)// ❌ 报错Node.js 习惯 const path require(path) const joined path.join(a, b) // ✅ 正解鸿蒙沙箱内不用 path.join用字符串拼接或 ohos.file.fs const joined a / b场景 2动态加载require(variable)// ❌ 报错require 不能动态加载 const mod require动态名 // ✅ 正解import 静态加载所有可能的模块 import modA from ./modA import modB from ./modB const mod condition ? modA : modB场景 3require拿 Node.js 内置模块// ❌ 报错Node.js 内置模块鸿蒙没有 const fs require(fs) const http require(http) // ✅ 正解鸿蒙对应模块用 import import fs from ohos.file.fs import http from ohos.net.http场景 4require拿相对路径模块// ❌ 报错 const utils require(./utils) // ✅ 正解import 相对路径 import { helper } from ./utils一句话速查Cannot find name ‘require’ → 禁用 require()用import/import { }/import type替代跟 Node.js 的差异写法Node.jsArkTSconst x require(mod)✅ CommonJS❌ 报错import x from mod✅ ESM✅import { x } from mod✅ ESM✅import type { T } from mod✅ ESM✅require(变量)动态加载✅❌ 报错Node.js 转鸿蒙最容易踩这个坑——肌肉记忆写require()ArkTS 直接编译炸。新项目从一开始就养成「禁用 require只用 import」的习惯避坑。require 三种替代速查表替代方案适用场景写法示例import整模块拿整个模块import http from ohos.net.httpimport { }解构拿单个符号import { AppStorageV2 } from ohos.arkui.StateManagementimport type仅类型注解import type { Want } from ohos.app.ability.Want铁律ArkTS 里搜不到require关键字——遇到「要拿模块」就import/import { }/import type别想 require()。完整代码仓库本文所有正解写法都已托管到AtomGit仓库地址https://atomgit.com/JaneConan/arkui-bug-no-require仓库包含四种高频踩坑场景的 ❌ 报错写法 ✅ 正解写法对照import/import { }/import type三种替代方案示范可直接用 DevEco Studio 打开参考作者JaneConan 仓库https://atomgit.com/JaneConan/arkui-bug-no-require 协议Apache-2.0随便用别告我