@redwoodjs/sdk
Version:
Build fast, server-driven webapps on Cloudflare with SSR, RSC, and realtime
75 lines (74 loc) • 2.4 kB
JavaScript
import { resolve } from "node:path";
import { build, mergeConfig } from "vite";
import { $ } from "../lib/$.mjs";
import { VENDOR_DIST_DIR, VENDOR_SRC_DIR } from "../lib/constants.mjs";
const __dirname = new URL(".", import.meta.url).pathname;
const MODE = process.env.NODE_ENV === "development" ? "development" : "production";
const configs = {
common: () => ({
mode: MODE,
plugins: [],
logLevel: process.env.VERBOSE ? "info" : "error",
build: {
emptyOutDir: false,
sourcemap: true,
minify: MODE === "production",
},
define: {
"process.env.NODE_ENV": JSON.stringify(MODE),
},
}),
reactServerInternals: () => mergeConfig(configs.common(), {
build: {
outDir: VENDOR_DIST_DIR,
lib: {
entry: resolve(VENDOR_SRC_DIR, "react-server-internals.js"),
name: "react-server-internals",
formats: ["es"],
fileName: "react-server-internals",
},
},
resolve: {
conditions: ["react-server"],
},
}),
react: () => mergeConfig(configs.common(), {
build: {
outDir: VENDOR_DIST_DIR,
lib: {
entry: resolve(VENDOR_SRC_DIR, "react.js"),
name: "react",
formats: ["es"],
fileName: "react",
},
},
resolve: {
alias: {
"react-server-internals": resolve(VENDOR_DIST_DIR, "react-server-internals.js"),
},
},
}),
reactDomServerEdge: () => mergeConfig(configs.common(), {
build: {
outDir: VENDOR_DIST_DIR,
lib: {
entry: resolve(VENDOR_SRC_DIR, "react-dom-server-edge.js"),
name: "react-dom-server-edge",
formats: ["es"],
fileName: "react-dom-server-edge",
},
rollupOptions: {
external: ["react"],
},
},
}),
};
export const buildVendorBundles = async () => {
await $ `pnpm clean:vendor`;
await build(configs.reactServerInternals());
await build(configs.react());
await build(configs.reactDomServerEdge());
};
if (import.meta.url === new URL(process.argv[1], import.meta.url).href) {
buildVendorBundles();
}