diff --git a/examples/integration/README.md b/examples/integration/README.md new file mode 100644 index 000000000000..6d0c85462dfd --- /dev/null +++ b/examples/integration/README.md @@ -0,0 +1,31 @@ +# Astro Starter Kit: Integration Package + +This is a template for an Astro integration. Use this template for writing integrations to use in multiple projects or publish to NPM. + +``` +npm create astro@latest -- --template integration +``` + +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/astro/tree/latest/examples/integration) + + +## 🚀 Project Structure + +Inside of your Astro project, you'll see the following folders and files: + +``` +/ +├── index.ts +├── tsconfig.json +├── package.json +``` + +The `index.ts` file is the "entry point" for your integration. Export your integration in `index.ts` to make them importable from your package. + +## 🧞 Commands +All commands are run from the root of the project, from a terminal: + +| Command | Action | +| :--------------------- | :----------------------------------------------- | +| `npm link` | Registers this package locally. Run `npm link my-integration` in an Astro project to install your integration +| `npm publish` | [Publishes](https://docs.npmjs.com/creating-and-publishing-unscoped-public-packages#publishing-unscoped-public-packages) this package to NPM. Requires you to be [logged in](https://docs.npmjs.com/cli/v8/commands/npm-adduser) diff --git a/examples/integration/index.ts b/examples/integration/index.ts new file mode 100644 index 000000000000..2c7249b837e5 --- /dev/null +++ b/examples/integration/index.ts @@ -0,0 +1,23 @@ +import type { AstroIntegration } from 'astro'; + +export default function createIntegration(): AstroIntegration { + // See the Integration API docs for full details + // https://docs.astro.build/en/reference/integrations-reference/ + return { + name: '@example/my-integration', + hooks: { + 'astro:config:setup': () => { + // See the @astrojs/react integration for an example + // https://github.com/withastro/astro/blob/main/packages/integrations/react/src/index.ts + }, + 'astro:build:start': ({ buildConfig }) => { + // See the @astrojs/netlify integration for an example + // https://github.com/withastro/astro/blob/main/packages/integrations/netlify/src/integration-functions.ts + }, + 'astro:build:done': ({ dir, routes }) => { + // See the @astrojs/partytown integration for an example + // https://github.com/withastro/astro/blob/main/packages/integrations/partytown/src/index.ts + }, + }, + }; +} diff --git a/examples/integration/package.json b/examples/integration/package.json new file mode 100644 index 000000000000..bb22851a4cac --- /dev/null +++ b/examples/integration/package.json @@ -0,0 +1,23 @@ +{ + "name": "@example/integration", + "private": true, + "version": "0.0.1", + "type": "module", + "exports": { + ".": "./index.ts" + }, + "files": [ + "src", + "index.ts" + ], + "keywords": [ + "withastro" + ], + "scripts": {}, + "devDependencies": { + "astro": "^1.4.2" + }, + "peerDependencies": { + "astro": "^1.4.2" + } +} diff --git a/examples/integration/tsconfig.json b/examples/integration/tsconfig.json new file mode 100644 index 000000000000..d78f81ec4e8e --- /dev/null +++ b/examples/integration/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "astro/tsconfigs/base" +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 36191f598723..1c0d473b8428 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -225,6 +225,12 @@ importers: astro: link:../../packages/astro vue: 3.2.40 + examples/integration: + specifiers: + astro: ^1.4.2 + devDependencies: + astro: link:../../packages/astro + examples/minimal: specifiers: astro: ^1.4.6