This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
内联模块参考
编辑页面
Expo 内联模块的参考文档。
内联模块是 实验性功能,并且可在 Expo SDK 56 及更高版本中使用。该 API 可能会发生破坏性变更。
内联模块允许你直接在 Expo 项目目录中编写原生模块代码(Kotlin 和 Swift),而无需创建单独的 Expo 模块包。Expo 会自动发现这些文件,并将它们包含到构建中。
配置
expo.experiments.inlineModules
定义后,会在 Expo CLI 和 Expo Modules Autolinking 中启用内联模块功能。
{ "expo": { "experiments": { "inlineModules": {} } } }
expo.experiments.inlineModules.watchedDirectories
配置可以创建内联模块的目录。
{ "expo": { "experiments": { "inlineModules": { "watchedDirectories": ["app", "src"] } } } }
嵌套目录中的文件也会被使用。
例如,如果在 app 配置中定义了 watchedDirectories = ["app"],
并且存在一个位于嵌套路径中的模块文件,例如 app/nested/directory/SomeModule.kt,那么 SomeModule 就可以在你的应用中使用。
watchedDirectories 中的目录:
- 需要位于 TypeScript/JavaScript 项目中。这意味着它的目录树中必须有一个祖先目录包含 package.json。例如,
"watchedDirectories": ["app", "src/some/directory", pathToOtherProject]应该可以工作,而"watchedDirectories": ["/", pathToFolderNotInNodeProject]则不行。 - 不能是整个项目目录,例如
./,也不能是它的祖先目录(例如../)。 - 不能是
watchedDirectories中另一个目录的子目录。例如,watchedDirectories不能是["app", "app/nested/directory"],你只需将watchedDirectories设置为["app"]。 - 不能包含诸如
" ", "(", ")", "$"之类的特殊字符。这意味着你不能在watchedDirectories中使用"app/(tabs)",但你可以使用"app",并且它仍然会使用来自"app/(tabs)"目录的原生文件。
expo.experiments.inlineModules.xcodeProjectTargets
配置将内联模块文件添加到哪些 Xcode 目标中。如果省略此配置,内联模块只会添加到应用的主目标中。
{ "expo": { "experiments": { "inlineModules": { "xcodeProjectTargets": ["MyApp", "MyAppWidgets"] } } } }
每个条目都是 Xcode 项目中(以及 ios/Podfile 的 target 块中)显示的目标名称。只使用目标名称 — 即使目标嵌套在 abstract_target 中,也不要包含抽象目标的名称。
警告 更改应用配置后,需要运行
npx expo prebuild,更改才能生效。
命名约定
内联模块文件名必须与原生模块名称匹配(该名称在整个应用中必须唯一)。 如果你有一个 SimpleModule.kt,那么其中的内联模块就会使用该文件名。例如:
// SimpleModule.kt // ... class SimpleModule: Module() { // 请注意,类名必须与文件名匹配。 public func definition() -> ModuleDefinition { // Name("SimpleModule") // 请注意,`Name` 也必须与文件名匹配。因此你可以直接省略它。 } }