API 导入

让 API 无需手写 import 即可使用

自动引用机制可以让你在应用文件中直接使用 API,而不必重复显式 import。Oiyo 会根据 scan.apis 扫描规则启用自动引用机制。

主要解决:

  • 按需引入。
  • 减少样板代码。
  • 获得类型提示和检查。

扫描源

采用 glob 语法进行文件匹配,扫描源按 使用侧 的导入来源声明。

运行时 API

Oiyo 已内置 Runtime API 的扫描源,可以直接使用它们。

src/App.vue
<script setup>
// 无需手动导入类型: import type { Ref } from '@skiyee/oiyo/runtime';
// 无需手动导入方法: import { ref, onLaunch } from '@skiyee/oiyo/runtime';

const title: Ref<string> = ref('Hello Oiyo')
const count = ref(0)

onLaunch(() => {
  console.log('App Launch, title:', title.value)
})
</script>

这里无需导入 refonLaunch,因为 Oiyo 会通过自动引用机制处理这些来源。

在 Vue 文件中使用只是示例,你可以在 应用的任意文件 中进行使用。

本地 API

Oiyo 已内置 composables/*.ts 作为约定扫描源,无需再次配置。

对于非约定目录,可以在 oiyo.config.ts 中显式配置:

oiyo.config.ts
import { defineOiyoConfig } from '@skiyee/oiyo/config'

export default defineOiyoConfig({
  scan: {
    apis: [
      'utils/*.ts',
      { from: 'shared/*.ts', types: true },
    ],
  },
})
扫描路径均基于 <srcDir> 目录。即 utils/*.ts 将扫描 src/utils 下第一层 TypeScript 文件。
避免使用 Barrel Files(index 桶文件)进行模块重导出,否则可能造成重复扫描。

定义

export function useSystemDark() {
  const { hostTheme } = uni.getSystemInfoSync()
  const isDark = ref(hostTheme === 'dark')
  return readonly(isDark)
}

使用

src/App.vue
interface Config {
  name: string
  titles: {
    first: string
  }
  delay: number
}

const config: DeepPartial<Config> = {
  delay: 1000,
}

const isDark = useSystemDark()

async function mockSleep() {
  await sleep(config.delay ?? 300)

  console.log({
    title: config.titles?.first ?? 'default title',
    dark: isDark.value,
  })
}

mockSleep()

第三方 API

假设要扫描 pinia 包,可以这样显式配置该库的扫描源:

oiyo.config.ts
import { defineOiyoConfig } from '@skiyee/oiyo/config'

export default defineOiyoConfig({
  scan: {
    apis: [
      'pinia',
    ],
  },
})

效果:

  • defineStorecreatePiniasetActivePinia 可以在应用文件中直接使用。
扫描源的声明与显式导入的 来源 保持一致。
  1. import { defineStore } from 'pinia': pinia
  2. import { useUser } from 'package/composables': package/composables

显式导入

自动引用机制并不禁止显式 import,可以根据团队约定选择。

以下情况推荐显式 import:

  • 希望文件依赖关系更明确。
  • 避免同名导出冲突。
  • 使用未加入扫描系统的模块。
  • 只在极少数文件中使用。

Oiyo 的自动引用机制适合高频、稳定、约定明确的 API。

验证可用

如果 API 不可用,检查:

  1. 文件是否在扫描路径内。
  2. 是否使用命名导出。
  3. 扫描源 glob 是否写对。
  4. 是否重新运行 oiyo dev 命令。

使用原则

使用时遵循这些原则:

  • 若文件放在约定目录,优先利用内置扫描。
  • 非约定目录或第三方库,通过 oiyo.config.ts 显式配置。
  • 需要自动导入的内容使用命名导出。
  • 避免使用 Barrel Files 进行模块重导出。