Skip to content

自动导入

WXT 使用 unimport(与 Nuxt 使用的相同工具)来设置自动导入。

ts
export default defineConfig({
  // 参见 https://www.npmjs.com/package/unimport#configurations
  imports: {
    // ...
  },
});

默认情况下,WXT 会自动为其所有 API 以及项目中的一些目录设置自动导入:

  • <srcDir>/components/*
  • <srcDir>/composables/*
  • <srcDir>/hooks/*
  • <srcDir>/utils/*

这些目录中文件的所有命名导出和默认导出,在项目的其他任何地方都可以直接使用,无需手动导入。

要查看自动导入的完整 API 列表,请运行 wxt prepare 并查看项目中的 .wxt/types/imports-module.d.ts 文件。

TypeScript

为了让 TypeScript 和编辑器能够识别自动导入的变量,你需要运行 wxt prepare 命令

将此命令添加到 postinstall 脚本中,这样编辑器在安装依赖后就能获得报告类型错误所需的一切信息:

jsonc
// package.json
{
  "scripts": {
    "postinstall": "wxt prepare", 
  },
}

ESLint

ESLint 无法识别自动导入的变量,除非在 ESLint 的 globals 中显式定义它们。默认情况下,如果 WXT 检测到项目中安装了 ESLint,它会自动生成配置。如果配置没有自动生成,你可以手动让 WXT 生成。

ts
export default defineConfig({
  imports: {
    eslintrc: {
      enabled: 9,
    },
  },
});
ts
export default defineConfig({
  imports: {
    eslintrc: {
      enabled: 8,
    },
  },
});

然后在 ESLint 配置中,导入并使用生成的文件:

js
// eslint.config.mjs
import autoImports from './.wxt/eslint-auto-imports.mjs';

export default [
  autoImports,
  {
    // 其余配置...
  },
];
js
// .eslintrc.mjs
export default {
  extends: ['./.wxt/eslintrc-auto-import.json'],
  // 其余配置...
};

禁用自动导入

并非所有开发者都喜欢自动导入。要禁用它们,请将 imports 设置为 false

ts
export default defineConfig({
  imports: false, 
});

显式导入(#imports

你可以通过 #imports 模块手动导入所有 WXT 的 API:

ts
import {
  createShadowRootUi,
  ContentScriptContext,
  MatchPattern,
} from '#imports';

要了解更多关于 #imports 模块的工作原理,请阅读相关博客文章

如果你已经禁用了自动导入,仍然建议使用 #imports 从一个地方导入所有 WXT 的 API。