j4
j44mo ago

Vite plugin's global variables are `undefined` when using Deno

Anyone run across this before? Running Deno 2 and Vite 6beta. I built a third-party Vite plugin, and now I'm testing it in a "native" Deno project (deno.json, not package.json, etc). However, all of the packages and dependencies are from npm. My Vite plugin defines a global like so.
...
return {
define: {
'XINK_VITE_MODE': JSON.stringify(mode)
}
}
...
...
return {
define: {
'XINK_VITE_MODE': JSON.stringify(mode)
}
}
...
In another part of my plugin package's code, not within the vite plugin definition itself, I grab the value during runtime, but it's logging undefined. This works fine when using Bun. I also tried doing globalThis.XINK_VITE_MODE as well, since Vite's intellisense said it's supposed be available on window during dev.
export const initRouter = async () => {
const mode = XINK_VITE_MODE
console.log('Vite mode is:', mode)
...
}
export const initRouter = async () => {
const mode = XINK_VITE_MODE
console.log('Vite mode is:', mode)
...
}
1 Reply
j4
j4OP4mo ago
This turned out to be an issue with my Vite plugin config. It was working with a locally-linked package with bun (bun link <name>). But this isn't how Vite handles things with non-locally-linked packages. So, this is what resolved it for me:
...
return {
define: {
'XINK_VITE_MODE': JSON.stringify(mode)
},
ssr: { noExternal: [ '@xinkjs/xink' ] // the plugin's package name
}
...
...
return {
define: {
'XINK_VITE_MODE': JSON.stringify(mode)
},
ssr: { noExternal: [ '@xinkjs/xink' ] // the plugin's package name
}
...

Did you find this page helpful?