fix: remove entry-server handler copy in adapters

In certain cases the handler.js copy resulted in duplicate code in the
final project build. As example in the final build, dynamically imported
modules might import their dependencies from the original entry-server.js
instead of the handler.js copy, this would result in the following chain:

1. handler.js copied from entry-server.js (therefore has code of dep1,
   dep2, dep3)
2. handler.js dynamically imports
   SomeComponent.js
2. SomeComponent.js doesnt know about handler.js, imports dep2 from entry-server.js
3. entry-server.js has code for dep1, dep2, dep3
4. The final build includes dep1, dep2 and dep3 from handler.js and from
   entry-server.js

So by removing the handler.js copy and directly importing
entry-server.js we can avoid the duplicate dependency code.
fix-build-duplicate-code
Katja Lutz 1 year ago
parent ec6eecb133
commit e60ba647c6

@ -1,5 +1,5 @@
import manifest from "../../dist/public/route-manifest.json";
import handler from "./handler";
import handler from "./entry-server";
export const onRequestGet = async ({ request, next, env }) => {
// Handle static assets

@ -140,10 +140,6 @@ export default function (miniflareOptions) {
writeFileSync(join(config.root, "dist", "public", "_headers"), getHeadersFile(), "utf8");
copyFileSync(
join(config.root, ".solid", "server", `entry-server.js`),
join(config.root, ".solid", "server", "handler.js")
);
copyFileSync(join(__dirname, "entry.js"), join(config.root, ".solid", "server", "server.js"));
const bundle = await rollup({
input: join(config.root, ".solid", "server", "server.js"),

@ -1,7 +1,7 @@
import { getAssetFromKV, MethodNotAllowedError, NotFoundError } from "@cloudflare/kv-asset-handler";
import manifestJSON from "__STATIC_CONTENT_MANIFEST";
import manifest from "../../dist/public/route-manifest.json";
import handler from "./handler";
import handler from "./entry-server";
/**
* @example

@ -143,17 +143,13 @@ export default function (miniflareOptions = {}) {
await builder.server(join(config.root, ".solid", "server"));
}
copyFileSync(
join(config.root, ".solid", "server", `entry-server.js`),
join(config.root, ".solid", "server", "handler.js")
);
copyFileSync(join(__dirname, "entry.js"), join(config.root, ".solid", "server", "server.js"));
let durableObjects = Object.values(miniflareOptions?.durableObjects || {});
if (durableObjects.length > 0) {
let text = readFileSync(join(config.root, ".solid", "server", "server.js"), "utf8");
durableObjects.forEach(item => {
text += `\nexport { ${item} } from "./handler";`;
text += `\nexport { ${item} } from "./entry-server";`;
});
writeFileSync(join(config.root, ".solid", "server", "server.js"), text);
}

@ -1,6 +1,6 @@
import { lookup } from "https://deno.land/x/media_types/mod.ts";
import manifest from "../../dist/public/route-manifest.json";
import handler from "./handler";
import handler from "./entry-server";
import { serve } from "https://deno.land/std@0.139.0/http/server.ts";

@ -37,10 +37,6 @@ export default function () {
await builder.server(join(config.root, ".solid", "server"));
}
copyFileSync(
join(config.root, ".solid", "server", `entry-server.js`),
join(config.root, ".solid", "server", "handler.js")
);
copyFileSync(join(__dirname, "entry.js"), join(config.root, ".solid", "server", "server.js"));
const bundle = await rollup({
input: join(config.root, ".solid", "server", "server.js"),

@ -1,7 +1,7 @@
import { splitCookiesString } from "solid-start/node/fetch.js";
import "solid-start/node/globals.js";
import manifest from "../../netlify/route-manifest.json";
import handle from "./handler";
import handle from "./entry-server";
Response.redirect = function (url, status = 302) {
let response = new Response(null, { status, headers: { Location: url }, counter: 1 });

@ -29,10 +29,6 @@ export default function ({ edge } = {}) {
await builder.server(join(config.root, ".solid", "server"));
}
copyFileSync(
join(config.root, ".solid", "server", `entry-server.js`),
join(config.root, ".solid", "server", "handler.js")
);
copyFileSync(
join(__dirname, edge ? "entry-edge.js" : "entry.js"),
join(config.root, ".solid", "server", "index.js")

@ -3,7 +3,7 @@ import { createServer } from "solid-start-node/server.js";
import "solid-start/node/globals.js";
import { fileURLToPath } from "url";
import manifest from "../../dist/public/route-manifest.json";
import handler from "./handler.js";
import handler from "./entry-server.js";
const { PORT = 3000 } = process.env;

@ -1,7 +1,7 @@
import common from "@rollup/plugin-commonjs";
import json from "@rollup/plugin-json";
import nodeResolve from "@rollup/plugin-node-resolve";
import { copyFileSync, readFileSync, writeFileSync } from "fs";
import { readFileSync, writeFileSync } from "fs";
import { dirname, join } from "path";
import { rollup } from "rollup";
import { fileURLToPath, pathToFileURL } from "url";
@ -29,11 +29,6 @@ export default function () {
await builder.server(join(config.root, ".solid", "server"));
}
copyFileSync(
join(config.root, ".solid", "server", `entry-server.js`),
join(config.root, ".solid", "server", "handler.js")
);
let text = readFileSync(join(__dirname, "entry.js")).toString();
writeFileSync(join(config.root, ".solid", "server", "server.js"), text);

@ -1,7 +1,7 @@
import { createRequest } from "solid-start/node/fetch.js";
import "solid-start/node/globals.js";
import manifest from "../../dist/public/route-manifest.json";
import handler from "./handler.js";
import handler from "./entry-server.js";
const MAX_REDIRECTS = 10;
async function handleRequest(req) {

@ -27,10 +27,6 @@ export default function () {
const ssrExternal = config?.ssr?.external || [];
await builder.client(join(config.root, "dist", "public"));
await builder.server(join(config.root, ".solid", "server"));
copyFileSync(
join(config.root, ".solid", "server", `entry-server.js`),
join(config.root, ".solid", "server", "handler.js")
);
const pathToServer = join(config.root, ".solid", "server", "server.js");
copyFileSync(join(__dirname, "entry.js"), pathToServer);
const pathToDist = resolve(config.root, "dist", "public");

Loading…
Cancel
Save