Skip to content

definePlugin

Allows defining a type-safe plugin that can be used in defineIntegration.

package/plugins/add-vite-plugin.ts
1
import { definePlugin } from "../core/define-plugin.js";
2
import { addVitePlugin } from "../utilities/add-vite-plugin.js";
3
import type { Plugin as VitePlugin } from "vite"
4
5
export const addVitePluginPlugin = definePlugin({
6
name: "addVitePlugin",
7
hook: "astro:config:setup",
8
implementation:
9
({ updateConfig }) =>
10
(plugin: VitePlugin) =>
11
addVitePlugin({ plugin, updateConfig }),
12
});

You can then use it in withPlugins:

my-integration/index.ts
1
import { defineIntegration, withPlugins } from "astro-integration-kit";
2
import { addVitePluginPlugin } from "../package/plugins/add-vite-plugin.js";
3
4
export default defineIntegration({
5
name: "my-integration",
6
setup({ name }) {
7
return withPlugins({
8
name,
9
plugins: [addVitePluginPlugin],
10
hooks: {
11
"astro:config:setup": ({ addVitePlugin }) => {}
12
}
13
})
14
}
15
})

Limitations

  1. Plugins support overrides. That means that if 2 plugins declare the same name, the latest will be kept.

Practical examples

Astro Integration Kit uses definePlugin for its core plugins under the hood, have a look at our source for practical examples!