内联模块参考
编辑页面
Expo 内联模块的参考文档。
For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.
内联模块是实验性功能。该 API 可能会发生破坏性变更。
内联模块允许你直接在 Expo 项目目录中编写原生模块代码(Kotlin 和 Swift),而无需创建单独的 Expo 模块包。Expo 会自动发现这些文件,并将它们包含到构建中。
配置
expo.experiments.inlineModules
定义后,会在 Expo CLI 和 Expo Modules Autolinking 中启用内联模块功能。
app.json
{ "expo": { "experiments": { "inlineModules": {} } } }
expo.experiments.inlineModules.watchedDirectories
配置可以创建内联模块的目录。
app.json
{ "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)"目录的原生文件。
你需要在更改 app 配置 后运行npx expo prebuild,它才会生效。
命名约定
内联模块文件名必须与原生模块名称匹配(该名称在整个应用中必须唯一)。 如果你有一个 SimpleModule.kt,那么其中的内联模块就会使用该文件名。例如:
// SimpleModule.kt // ... class SimpleModule: Module() { // 请注意,类名必须与文件名匹配。 public func definition() -> ModuleDefinition { // Name("SimpleModule") // 请注意,`Name` 也必须与文件名匹配。因此你可以直接省略它。 } }