diff --git a/examples/react-server/vite-plugin-environment-optimize-deps.ts b/examples/react-server/vite-plugin-environment-optimize-deps.ts deleted file mode 100644 index 171e31c4..00000000 --- a/examples/react-server/vite-plugin-environment-optimize-deps.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { createDebug, tinyassert } from "@hiogawa/utils"; -import { - type Plugin, - type PluginOption, - type ResolvedConfig, - resolveConfig, - type DepOptimizationMetadata, -} from "vite"; -import { optimizeDeps } from "vite"; -import path from "node:path"; -import fs from "node:fs"; - -const debug = createDebug("env-deps"); - -// temporary workaround for missing optimizeDeps. -// this also requires patch vite-5.2.6-patch-import-analysis.tgz -// to immitate noExternal for environment - -export function vitePluginEnvironmentOptimizeDeps({ - name, - force, -}: { - name: string; - force?: boolean; -}): PluginOption { - let config: ResolvedConfig; - let depsDir: string; - let metadata: DepOptimizationMetadata; - - const plugin: Plugin = { - name: vitePluginEnvironmentOptimizeDeps.name, - enforce: "pre", - apply: "serve", - configResolved(config_) { - config = config_; - }, - async buildStart(_options) { - const environment = config.environments[name]; - tinyassert(environment); - // need to put outside of node_modules to make it treated as user code - const cacheDir = path.join(config.root, "dist", ".env-deps", name); - depsDir = path.join(cacheDir, "deps"); - const tmpConfig = await resolveConfig( - { - cacheDir, - root: config.root, - configFile: false, - clearScreen: false, - resolve: environment.resolve, - optimizeDeps: { - ...environment.dev.optimizeDeps, - entries: [], - noDiscovery: true, - }, - }, - "serve", - ); - await optimizeDeps(tmpConfig, force, true); - const metadataFile = path.join(depsDir, "_metadata.json"); - metadata = JSON.parse(await fs.promises.readFile(metadataFile, "utf-8")); - }, - resolveId(source, _importer, _options) { - if (this.environment?.name === name) { - const entry = metadata.optimized[source]; - debug("[resolveId]", { source, entry }); - if (entry) { - return path.join(depsDir, entry.file); - } - } - return; - }, - }; - - return [plugin]; -} - -export function vitePluginFixJsxDEV(): Plugin { - return { - name: vitePluginFixJsxDEV.name, - apply: "serve", - transform(code, _id, _options) { - // import { jsxDEV } from "..." - // ⇓ - // import __jsxRuntime from "..."; const { jsxDEV } = __jsxRuntime; - if (code.startsWith("import { jsxDEV }")) { - const lines = code.split("\n"); - lines[0] = [ - "import __jsxRuntime", - lines[0]!.slice("import { jsxDEV }".length), - "const { jsxDEV } = __jsxRuntime", - ].join(""); - return lines.join("\n"); - } - return; - }, - }; -} diff --git a/examples/react-server/vite.config.ts b/examples/react-server/vite.config.ts index a0de89e9..0d04773b 100644 --- a/examples/react-server/vite.config.ts +++ b/examples/react-server/vite.config.ts @@ -1,6 +1,5 @@ import { defineConfig, - createNodeDevEnvironment, type PluginOption, type Plugin, createServerModuleRunner, @@ -10,10 +9,6 @@ import { createDebug, tinyassert, typedBoolean } from "@hiogawa/utils"; import { __global } from "./src/global"; import react from "@vitejs/plugin-react"; import { vitePluginSsrMiddleware } from "../react-ssr/vite.config"; -import { - vitePluginEnvironmentOptimizeDeps, - vitePluginFixJsxDEV, -} from "./vite-plugin-environment-optimize-deps"; const debug = createDebug("app"); @@ -27,10 +22,6 @@ export default defineConfig((env) => ({ preview: new URL("./dist/server/index.js", import.meta.url).toString(), }), vitePluginReactServer(), - vitePluginEnvironmentOptimizeDeps({ - name: "react-server", - }), - vitePluginFixJsxDEV(), vitePluginSilenceUseClientBuildWarning(), ], @@ -59,6 +50,11 @@ export default defineConfig((env) => ({ // [feedback] same as react-ssr build: env.isPreview ? { outDir: "dist/client" } : {}, + ssr: { + // [feedback] deps optimization platform per environment? + target: env.command === "serve" ? "webworker" : undefined, + }, + builder: { async buildEnvironments(builder, build) { await build(builder.environments["react-server"]!); @@ -87,7 +83,6 @@ function vitePluginReactServer(): PluginOption { conditions: ["react-server"], }, dev: { - createEnvironment: createNodeDevEnvironment, optimizeDeps: { include: [ "react", diff --git a/misc/vite-5.2.7.tgz b/misc/vite-5.2.7.tgz index 6265a3df..35aeff7f 100644 Binary files a/misc/vite-5.2.7.tgz and b/misc/vite-5.2.7.tgz differ diff --git a/package.json b/package.json index d8553659..fbcb3047 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "prettier": "^3.2.5", "tsx": "^4.7.1", "typescript": "^5.4.3", - "vite": "https://github.com/hi-ogawa/vite-environment-examples/raw/96d95bc538b7f53589db72f17e23e75b4e57e960/misc/vite-5.2.7.tgz" + "vite": "file:./misc/vite-5.2.7.tgz" }, "packageManager": "pnpm@8.15.5+sha256.4b4efa12490e5055d59b9b9fc9438b7d581a6b7af3b5675eb5c5f447cee1a589", "volta": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a2e39a7b..146bd507 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,7 +5,7 @@ settings: excludeLinksFromLockfile: false overrides: - vite: https://github.com/hi-ogawa/vite-environment-examples/raw/96d95bc538b7f53589db72f17e23e75b4e57e960/misc/vite-5.2.7.tgz + vite: file:./misc/vite-5.2.7.tgz importers: @@ -42,8 +42,8 @@ importers: specifier: ^5.4.3 version: 5.4.3 vite: - specifier: https://github.com/hi-ogawa/vite-environment-examples/raw/96d95bc538b7f53589db72f17e23e75b4e57e960/misc/vite-5.2.7.tgz - version: '@github.com/hi-ogawa/vite-environment-examples/raw/96d95bc538b7f53589db72f17e23e75b4e57e960/misc/vite-5.2.7.tgz(@types/node@20.11.30)' + specifier: file:/home/hiroshi/code/personal/vite-environment-examples/misc/vite-5.2.7.tgz + version: file:misc/vite-5.2.7.tgz(@types/node@20.11.30) examples/custom: dependencies: @@ -981,14 +981,14 @@ packages: resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: https://github.com/hi-ogawa/vite-environment-examples/raw/96d95bc538b7f53589db72f17e23e75b4e57e960/misc/vite-5.2.7.tgz + vite: file:/home/hiroshi/code/personal/vite-environment-examples/misc/vite-5.2.7.tgz dependencies: '@babel/core': 7.24.3 '@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.24.3) '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.3) '@types/babel__core': 7.20.5 react-refresh: 0.14.0 - vite: '@github.com/hi-ogawa/vite-environment-examples/raw/96d95bc538b7f53589db72f17e23e75b4e57e960/misc/vite-5.2.7.tgz(@types/node@20.11.30)' + vite: file:misc/vite-5.2.7.tgz(@types/node@20.11.30) transitivePeerDependencies: - supports-color dev: true @@ -1844,9 +1844,9 @@ packages: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true - '@github.com/hi-ogawa/vite-environment-examples/raw/96d95bc538b7f53589db72f17e23e75b4e57e960/misc/vite-5.2.7.tgz(@types/node@20.11.30)': - resolution: {tarball: https://github.com/hi-ogawa/vite-environment-examples/raw/96d95bc538b7f53589db72f17e23e75b4e57e960/misc/vite-5.2.7.tgz} - id: '@github.com/hi-ogawa/vite-environment-examples/raw/96d95bc538b7f53589db72f17e23e75b4e57e960/misc/vite-5.2.7.tgz' + file:misc/vite-5.2.7.tgz(@types/node@20.11.30): + resolution: {integrity: sha512-UjBUV6UFfcFSOSZUi8W7mSMNbF7hG8Wsx1ro9h5LprXrT2xpMlSNjKOE71pVJGfAmx+fwr6S6OXMDRo9arDgKg==, tarball: file:misc/vite-5.2.7.tgz} + id: file:misc/vite-5.2.7.tgz name: vite version: 5.2.7 engines: {node: ^18.0.0 || >=20.0.0}