-
2b5d238: Better dead code elimination
Upgrading to [email protected] as it contains fixes for function parameters.
-
69d739d: Better dead code elimination
Upgrading to [email protected] as it contains fixes for:
- Object destructuring
- Array destructuring
- Function expressions
- Arrow function expressions
-
02c683a: Allow call expressions in macro identifier validation
Previously, the code had duplicated checks for allowing macro within import specifiers. This was always meant to be a check for import specifiers and a check for a call expression.
-
a46e247: Rather than ship as a monolithic plugin, we've split up
vite-env-only
into two separate plugins:envOnlyMacros
anddenyImports
. These are both named exports ofvite-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 separatevite-env-only
plugins (for use in yourvite.config.ts
) andvite-env-only
macros (for use in your app code).👉 In your
vite.config.ts
, replace the default import with theenvOnlyMacros
named import:-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:-import { serverOnly$ } from "vite-env-only" +import { serverOnly$ } from "vite-env-only/macros"
The new
denyImports
plugin replaces the olddenyImports
anddenyFiles
options. Both of these options denied imports:denyImports
denied imports with specific import specifiersdenyFiles
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 olddenyImports
option. Matching is performed against the raw import specifier in the source code.The
files
option replaces the olddenyFiles
option. Matching is performed against the resolved and normalized root-relative file path.{ client?: { specifiers?: Array<string | RegExp>, files?: Array<string | RegExp> }, server?: { specifiers?: Array<string | RegExp>, files?: Array<string | RegExp> } }
👉 In your
vite.config.ts
, replace theenvOnly
plugin with thedenyImports
plugin.For example:
// 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:
// 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"], }, }), ], })
🚨 Macros are not enabled by the
denyImports
plugin. 🚨 If you also wanted to use macros, be sure to explicitly add theenvOnlyMacros
plugin to yourvite.config.ts
.
- 4f87331: Use default import from micromatch to fix ESM build error
-
25a324d: Allow globs for
denyImports
anddenyFiles
Using micromatch for pattern matching