Build and Vite integration
@netscript/fresh ships a Vite plugin that wires a Fresh workspace into the build:
it resolves NetScript app aliases, maps environment variables into
import.meta.env, and generates route manifests at build and dev time. Reach for
it when you set up the Vite config for a NetScript Fresh app and want aliases, env
exposure, and route manifest generation handled in one place.
The plugin factory
createNetScriptVitePlugin(options) is the single entry point. It accepts a
NetScriptVitePluginOptions object and returns a NetScriptVitePlugin — the
package-owned view of the Vite plugin hooks NetScript Fresh relies on. Add the
returned plugin to the plugins array of your Vite config.
The returned plugin runs with enforce: "pre", so its hooks order ahead of most
other plugins. It contributes four things:
- Config defaults through the
confighook, which returns Vite config defaults for NetScript Fresh workspaces. - Alias resolution through the
resolveIdhook, which resolves NetScript app aliases to absolute file paths. - Route manifests through the
buildStarthook, which generates route manifests when the Vite build starts. - Dev-server watchers through the
configureServerhook, which registers development-server watchers for route manifests.
Basic setup
A minimal integration points the plugin at the Fresh app root. With no alias entries supplied, the plugin generates aliases from the app root.
import { createNetScriptVitePlugin } from "@netscript/fresh";
const netscript = createNetScriptVitePlugin({
appRoot: "./app",
workspaceRoot: ".",
});
export default {
plugins: [netscript],
};
Aliases
Aliases are resolved through resolveId. There are two ways to control them.
Supply explicit aliasEntries to use a fixed set of aliases instead of generated
ones. Each NetScriptViteAlias has a find (the import specifier prefix or exact
specifier to match) and a replacement (the filesystem path that replaces the
matched specifier).
import {
createNetScriptVitePlugin,
type NetScriptViteAlias,
} from "@netscript/fresh";
const aliasEntries: NetScriptViteAlias[] = [
{ find: "@app/", replacement: "./app/" },
];
const netscript = createNetScriptVitePlugin({
appRoot: "./app",
aliasEntries,
});
Alternatively, let the plugin generate aliases by listing app-root-relative
aliasDirectories and an aliasPrefix:
const netscript = createNetScriptVitePlugin({
appRoot: "./app",
aliasPrefix: "@app/",
aliasDirectories: ["islands", "components"],
});
Environment variables
Use envMappings to expose environment values through import.meta.env. Each
NetScriptViteEnvMapping reads a source key from the provided environment map,
defines a target key on import.meta.env, and may supply a fallback value used
when the source key is absent. Provide the source values through env.
import {
createNetScriptVitePlugin,
type NetScriptViteEnvMapping,
} from "@netscript/fresh";
const envMappings: NetScriptViteEnvMapping[] = [
{
source: "PUBLIC_API_URL",
target: "VITE_API_URL",
fallback: "http://localhost:3000",
},
];
const netscript = createNetScriptVitePlugin({
appRoot: "./app",
envMappings,
env: Deno.env.toObject(),
});
Route manifests
Route manifest generation runs in the buildStart hook for builds and through
configureServer watchers during development. Configure it with routeManifest,
a NetScriptRouteManifestOptions object.
const netscript = createNetScriptVitePlugin({
appRoot: "./app",
routeManifest: {
enabled: true,
routesDir: "./app/routes",
outputPath: "./app/_routes.gen.ts",
logLevel: "changes",
},
});
logLevel accepts "silent", "changes", or "verbose".
Dev-server filesystem access
The plugin sets up the Vite dev server's filesystem allow-list. watchPaths adds
paths watched by the dev server, allowFsPaths adds filesystem paths the dev
server is allowed to serve, and includeWorkspaceRootInFsAllow controls whether
workspaceRoot is included in the filesystem allow-list.
const netscript = createNetScriptVitePlugin({
appRoot: "./app",
workspaceRoot: ".",
watchPaths: ["./app/routes"],
allowFsPaths: ["./packages"],
includeWorkspaceRootInFsAllow: true,
});
API summary
| Symbol | Description |
|---|---|
createNetScriptVitePlugin(options) |
Create the NetScript Fresh Vite plugin for aliases, env mapping, and route manifests. |
NetScriptVitePluginOptions |
Options accepted by the NetScript Fresh Vite plugin. |
NetScriptVitePlugin |
Package-owned view of the Vite plugin hooks used by NetScript Fresh. |
NetScriptViteAlias |
Resolved Vite alias entry generated or accepted by the plugin (find, replacement). |
NetScriptViteEnvMapping |
Environment variable mapping injected into import.meta.env (source, target, fallback?). |
NetScriptRouteManifestOptions |
Options controlling the NetScript route manifest generator. |
NetScriptVitePluginOptions fields
| Field | Type | Description |
|---|---|---|
appRoot? |
string |
Fresh app root used for aliases and route manifest output. |
workspaceRoot? |
string |
Workspace root allowed through the Vite dev-server filesystem guard. |
aliasEntries? |
NetScriptViteAlias[] |
Explicit Vite aliases to use instead of generated aliases. |
aliasDirectories? |
string[] |
App-root-relative directories used to generate aliases. |
aliasPrefix? |
string |
Alias prefix used for generated aliases. |
watchPaths? |
string[] |
Additional paths watched by the Vite dev server. |
envMappings? |
NetScriptViteEnvMapping[] |
Environment variable mappings to expose through import.meta.env. |
env? |
Record<string, string | undefined> |
Environment source values used by envMappings. |
allowFsPaths? |
string[] |
Additional filesystem paths allowed by the Vite dev server. |
includeWorkspaceRootInFsAllow? |
boolean |
Whether to include workspaceRoot in the Vite filesystem allow-list. |
routeManifest? |
NetScriptRouteManifestOptions |
Route manifest generation options. |
NetScriptVitePlugin hooks
| Member | Description |
|---|---|
name |
Vite plugin name. |
enforce |
Vite hook ordering ("pre"). |
config(config, env) |
Return Vite config defaults for NetScript Fresh workspaces. |
resolveId(source) |
Resolve NetScript app aliases to absolute file paths. |
buildStart() |
Generate route manifests when the Vite build starts. |
configureServer(server) |
Register development-server watchers for route manifests. |