You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
2.1 KiB
JavaScript

import common from "@rollup/plugin-commonjs";
import json from "@rollup/plugin-json";
import nodeResolve from "@rollup/plugin-node-resolve";
import { readFileSync, writeFileSync } from "fs";
import { dirname, join } from "path";
import { rollup } from "rollup";
import { fileURLToPath, pathToFileURL } from "url";
export default function () {
return {
name: "node",
start(config, { port }) {
process.env.PORT = port;
import(pathToFileURL(join(config.root, "dist", "server.js")).toString());
return `http://localhost:${process.env.PORT}`;
},
async build(config, builder) {
const ssrExternal = config?.ssr?.external || [];
const __dirname = dirname(fileURLToPath(import.meta.url));
if (!config.solidOptions.ssr) {
await builder.spaClient(join(config.root, "dist", "public"));
await builder.server(join(config.root, ".solid", "server"));
} else if (config.solidOptions.islands) {
await builder.islandsClient(join(config.root, "dist", "public"));
await builder.server(join(config.root, ".solid", "server"));
} else {
await builder.client(join(config.root, "dist", "public"));
await builder.server(join(config.root, ".solid", "server"));
}
let text = readFileSync(join(__dirname, "entry.js")).toString();
writeFileSync(join(config.root, ".solid", "server", "server.js"), text);
builder.debug(`bundling server with rollup`);
const bundle = await rollup({
input: join(config.root, ".solid", "server", "server.js"),
plugins: [
json(),
nodeResolve({
preferBuiltins: true,
exportConditions: ["node", "solid"]
}),
common({ strictRequires: true, ...config.build.commonjsOptions })
],
external: ["undici", "stream/web", ...ssrExternal]
});
// or write the bundle to disk
await bundle.write({ format: "esm", dir: join(config.root, "dist") });
// closes the bundle
await bundle.close();
builder.debug(`bundling server done`);
}
};
}