内联模块参考

编辑页面

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` 也必须与文件名匹配。因此你可以直接省略它。 } }