Skip to content

Commit

Permalink
Merge pull request #40 from pcattori/v3
Browse files Browse the repository at this point in the history
v3 release notes
  • Loading branch information
pcattori authored May 24, 2024
2 parents c5c8a16 + a46e247 commit 45ab785
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 99 deletions.
72 changes: 0 additions & 72 deletions .changeset/popular-ladybugs-count.md

This file was deleted.

10 changes: 0 additions & 10 deletions .changeset/separate-macros-export.md

This file was deleted.

17 changes: 0 additions & 17 deletions .changeset/three-mirrors-relate.md

This file was deleted.

115 changes: 115 additions & 0 deletions .changeset/v3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
---
"vite-env-only": major
---

Rather than ship as a monolithic plugin, we've split up `vite-env-only` into two separate plugins: `envOnlyMacros` and `denyImports`.
These are both named exports of `vite-env-only`; the default export has been removed.
This makes it easy to tell if you app is relying on macros, import denial, or both.

Additionally, we've changed the macros themselves to come from `vite-env-only/macros` to more clearly separate
`vite-env-only` plugins (for use in your `vite.config.ts`) and `vite-env-only` macros (for use in your app code).

## Migrating macros

👉 In your `vite.config.ts`, replace the default import with the `envOnlyMacros` named import:

```diff
-import envOnly from "vite-env-only"
+import { envOnlyMacros } from "vite-env-only"

export default {
plugins: [
- envOnly(),
+ envOnlyMacros(),
]
}
```

👉 In your app code, replace your macro imports to use the new `/macros` export:

```diff
-import { serverOnly$ } from "vite-env-only"
+import { serverOnly$ } from "vite-env-only/macros"
```

## Migrating `denyImports` + `denyFiles`

The new `denyImports` plugin replaces the old `denyImports` and `denyFiles` options.
Both of these options denied imports:

- `denyImports` denied imports with specific _import specifiers_
- `denyFiles` denied imports that resolved to specific _files_

Additionally, neither of these options had anything to do with macros.
But there wasn't a way to configure `vite-env-only` for import denial without also _implicitly_ setting up its macros.

The new `denyImports` named export is a new plugin replaces these options.

The `specifiers` option replaces the old `denyImports` option.
Matching is performed against the raw import specifier in the source code.

The `files` option replaces the old `denyFiles` option.
Matching is performed against the resolved and normalized root-relative file path.

```ts
{
client?: {
specifiers?: Array<string | RegExp>,
files?: Array<string | RegExp>
},
server?: {
specifiers?: Array<string | RegExp>,
files?: Array<string | RegExp>
}
}
```

👉 In your `vite.config.ts`, replace the `envOnly` plugin with the `denyImports` plugin.

For example:

```ts
// vite.config.ts
import { defineConfig } from "vite"
import envOnly from "vite-env-only"

export default defineConfig({
plugins: [
envOnly({
denyImports: {
client: ["fs-extra", /^node:/, "@prisma/*"],
server: ["jquery"],
},
denyFiles: {
client: ["**/.server/*", "**/*.server.*"],
},
}),
],
})
```

Should now be written as:

```ts
// vite.config.ts
import { defineConfig } from "vite"
import { denyImports } from "vite-env-only"

export default defineConfig({
plugins: [
denyImports({
client: {
specifiers: ["fs-extra", /^node:/, "@prisma/*"],
files: ["**/.server/*", "**/*.server.*"],
},
server: {
specifiers: ["jquery"],
},
}),
],
})
```

> [!IMPORTANT]
> Remember that the **macros are not enabled** by the `denyImports` plugin.
> If you also wanted to use macros, be sure to explicitly add the `envOnlyMacros` plugin to your `vite.config.ts`.

0 comments on commit 45ab785

Please sign in to comment.