diff --git a/.changeset/v2-remove-auto-globals-install.md b/.changeset/v2-remove-auto-globals-install.md new file mode 100644 index 00000000000..4bd8f9bdb4c --- /dev/null +++ b/.changeset/v2-remove-auto-globals-install.md @@ -0,0 +1,27 @@ +--- +"@remix-run/architect": major +"@remix-run/express": major +"@remix-run/netlify": major +"@remix-run/node": major +"@remix-run/serve": major +"@remix-run/vercel": major +--- + +For preparation of using Node's built in fetch implementation, installing the fetch globals is now a responsibility of the app server. If you are using `remix-serve`, nothing is required. If you are using your own app server, you will need to install the globals yourself. + +```js filename=server.js +import { installGlobals } from "@remix-run/node"; + +installGlobals(); +``` + +source-map-support is now a responsibility of the app server. If you are using `remix-serve`, nothing is required. If you are using your own app server, you will need to install [`source-map-support`](https://www.npmjs.com/package/source-map-support) yourself. + +```sh +npm i source-map-support +``` + +```js filename=server.js +import sourceMapSupport from "source-map-support"; +sourceMapSupport.install(); +``` diff --git a/docs/pages/v2.md b/docs/pages/v2.md index f0a10f08456..aa8cbcd2627 100644 --- a/docs/pages/v2.md +++ b/docs/pages/v2.md @@ -860,6 +860,29 @@ remix dev --manual -c 'node ./server.js' Check out the [manual mode guide][manual-mode] for more details. +## `installGlobals` + +For preparation of using Node's built in fetch implementation, installing the fetch globals is now a responsibility of the app server. If you are using `remix-serve`, nothing is required. If you are using your own app server, you will need to install the globals yourself. + +```js filename=server.js +import { installGlobals } from "@remix-run/node"; + +installGlobals(); +``` + +## `source-map-support` + +Source map support is now a responsibility of the app server. If you are using `remix-serve`, nothing is required. If you are using your own app server, you will need to install [`source-map-support`](https://www.npmjs.com/package/source-map-support) yourself. + +```sh +npm i source-map-support +``` + +```js filename=server.js +import sourceMapSupport from "source-map-support"; +sourceMapSupport.install(); +``` + [future-flags]: ./api-development-strategy [remix-config]: ../file-conventions/remix-config [flat-routes]: https://github.com/remix-run/remix/discussions/4482 diff --git a/integration/helpers/create-fixture.ts b/integration/helpers/create-fixture.ts index 3c2e31ed9ca..510d5c48297 100644 --- a/integration/helpers/create-fixture.ts +++ b/integration/helpers/create-fixture.ts @@ -11,9 +11,14 @@ import type { JsonObject } from "type-fest"; import type { AppConfig } from "@remix-run/dev"; import { ServerMode } from "@remix-run/server-runtime/mode"; +// @ts-ignore import type { ServerBuild } from "../../build/node_modules/@remix-run/server-runtime"; +// @ts-ignore import { createRequestHandler } from "../../build/node_modules/@remix-run/server-runtime"; +// @ts-ignore import { createRequestHandler as createExpressHandler } from "../../build/node_modules/@remix-run/express"; +// @ts-ignore +import { installGlobals } from "../../build/node_modules/@remix-run/node"; const TMP_DIR = path.join(process.cwd(), ".tmp", "integration"); @@ -37,6 +42,7 @@ export function json(value: JsonObject) { } export async function createFixture(init: FixtureInit, mode?: ServerMode) { + installGlobals(); let projectDir = await createFixtureProject(init, mode); let buildPath = path.resolve(projectDir, "build"); let app: ServerBuild = await import(buildPath); diff --git a/integration/hmr-log-test.ts b/integration/hmr-log-test.ts index 7a469ad5dde..eca69ffc157 100644 --- a/integration/hmr-log-test.ts +++ b/integration/hmr-log-test.ts @@ -50,7 +50,9 @@ let fixture = (options: { appPort: number; devPort: number }): FixtureInit => ({ let path = require("node:path"); let express = require("express"); let { createRequestHandler } = require("@remix-run/express"); - let { logDevReady } = require("@remix-run/node"); + let { logDevReady, installGlobals } = require("@remix-run/node"); + + installGlobals(); const app = express(); app.use(express.static("public", { immutable: true, maxAge: "1y" })); diff --git a/integration/hmr-test.ts b/integration/hmr-test.ts index 5e42f1f7dad..69231d25384 100644 --- a/integration/hmr-test.ts +++ b/integration/hmr-test.ts @@ -51,7 +51,9 @@ let fixture = (options: { appPort: number; devPort: number }): FixtureInit => ({ let path = require("node:path"); let express = require("express"); let { createRequestHandler } = require("@remix-run/express"); - let { broadcastDevReady } = require("@remix-run/node"); + let { broadcastDevReady, installGlobals } = require("@remix-run/node"); + + installGlobals(); const app = express(); app.use(express.static("public", { immutable: true, maxAge: "1y" })); diff --git a/packages/remix-architect/globals.ts b/packages/remix-architect/globals.ts deleted file mode 100644 index 917305ac938..00000000000 --- a/packages/remix-architect/globals.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { installGlobals } from "@remix-run/node"; -installGlobals(); diff --git a/packages/remix-architect/index.ts b/packages/remix-architect/index.ts index 92b76da294d..c66f26f5676 100644 --- a/packages/remix-architect/index.ts +++ b/packages/remix-architect/index.ts @@ -1,5 +1,3 @@ -import "./globals"; - export { createArcTableSessionStorage } from "./sessions/arcTableSessionStorage"; export type { GetLoadContextFunction, RequestHandler } from "./server"; diff --git a/packages/remix-express/globals.ts b/packages/remix-express/globals.ts deleted file mode 100644 index 917305ac938..00000000000 --- a/packages/remix-express/globals.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { installGlobals } from "@remix-run/node"; -installGlobals(); diff --git a/packages/remix-express/index.ts b/packages/remix-express/index.ts index fb640bf4799..8d8383f2cf3 100644 --- a/packages/remix-express/index.ts +++ b/packages/remix-express/index.ts @@ -1,4 +1,2 @@ -import "./globals"; - export type { GetLoadContextFunction, RequestHandler } from "./server"; export { createRequestHandler } from "./server"; diff --git a/packages/remix-netlify/globals.ts b/packages/remix-netlify/globals.ts deleted file mode 100644 index 917305ac938..00000000000 --- a/packages/remix-netlify/globals.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { installGlobals } from "@remix-run/node"; -installGlobals(); diff --git a/packages/remix-netlify/index.ts b/packages/remix-netlify/index.ts index fb640bf4799..8d8383f2cf3 100644 --- a/packages/remix-netlify/index.ts +++ b/packages/remix-netlify/index.ts @@ -1,4 +1,2 @@ -import "./globals"; - export type { GetLoadContextFunction, RequestHandler } from "./server"; export { createRequestHandler } from "./server"; diff --git a/packages/remix-node/index.ts b/packages/remix-node/index.ts index f9d6e2cf204..7e0544c06b2 100644 --- a/packages/remix-node/index.ts +++ b/packages/remix-node/index.ts @@ -1,7 +1,3 @@ -import sourceMapSupport from "source-map-support"; - -sourceMapSupport.install(); - export { AbortController } from "abort-controller"; export type { diff --git a/packages/remix-serve/cli.ts b/packages/remix-serve/cli.ts index 87519e5e2e0..2c5973e4bc6 100644 --- a/packages/remix-serve/cli.ts +++ b/packages/remix-serve/cli.ts @@ -1,10 +1,14 @@ import "./env"; import path from "node:path"; import os from "node:os"; -import { broadcastDevReady } from "@remix-run/node"; +import { broadcastDevReady, installGlobals } from "@remix-run/node"; +import sourceMapSupport from "source-map-support"; import { createApp } from "./index"; +sourceMapSupport.install(); +installGlobals(); + let port = process.env.PORT ? Number(process.env.PORT) : 3000; if (Number.isNaN(port)) port = 3000; diff --git a/packages/remix-serve/package.json b/packages/remix-serve/package.json index 6d6ddf3afab..769b43588c7 100644 --- a/packages/remix-serve/package.json +++ b/packages/remix-serve/package.json @@ -21,12 +21,14 @@ "@remix-run/node": "1.19.1", "compression": "^1.7.4", "express": "^4.17.1", - "morgan": "^1.10.0" + "morgan": "^1.10.0", + "source-map-support": "^0.5.21" }, "devDependencies": { "@types/compression": "^1.7.0", "@types/express": "^4.17.9", - "@types/morgan": "^1.9.2" + "@types/morgan": "^1.9.2", + "@types/source-map-support": "^0.5.6" }, "engines": { "node": ">=18.0.0" diff --git a/packages/remix-vercel/globals.ts b/packages/remix-vercel/globals.ts deleted file mode 100644 index 917305ac938..00000000000 --- a/packages/remix-vercel/globals.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { installGlobals } from "@remix-run/node"; -installGlobals(); diff --git a/packages/remix-vercel/index.ts b/packages/remix-vercel/index.ts index 74cbdf5c001..b6e4eedca7d 100644 --- a/packages/remix-vercel/index.ts +++ b/packages/remix-vercel/index.ts @@ -1,5 +1,3 @@ -import "./globals"; - const alreadyWarned: Record = {}; const warnOnce = (message: string, key = message) => { if (!alreadyWarned[key]) { diff --git a/templates/arc/package.json b/templates/arc/package.json index 6631cbc42be..b5a51a96fd0 100644 --- a/templates/arc/package.json +++ b/templates/arc/package.json @@ -16,7 +16,8 @@ "cross-env": "^7.0.3", "isbot": "^3.6.8", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "source-map-support": "^0.5.21" }, "devDependencies": { "@architect/architect": "^10.12.1", @@ -24,6 +25,7 @@ "@remix-run/eslint-config": "*", "@types/react": "^18.0.35", "@types/react-dom": "^18.0.11", + "@types/source-map-support": "^0.5.6", "eslint": "^8.38.0", "typescript": "^5.1.0" }, diff --git a/templates/arc/server.ts b/templates/arc/server.ts index f182b6fd2dd..dee2e3177cf 100644 --- a/templates/arc/server.ts +++ b/templates/arc/server.ts @@ -1,7 +1,9 @@ import { createRequestHandler } from "@remix-run/architect"; import * as build from "@remix-run/dev/server-build"; import { installGlobals } from "@remix-run/node"; +import sourceMapSupport from "source-map-support"; +sourceMapSupport.install(); installGlobals(); export const handler = createRequestHandler({ diff --git a/templates/express/package.json b/templates/express/package.json index bd3af0d8637..720e45b591c 100644 --- a/templates/express/package.json +++ b/templates/express/package.json @@ -19,7 +19,8 @@ "isbot": "^3.6.8", "morgan": "^1.10.0", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "source-map-support": "^0.5.21" }, "devDependencies": { "@remix-run/dev": "*", @@ -29,6 +30,7 @@ "@types/morgan": "^1.9.4", "@types/react": "^18.0.35", "@types/react-dom": "^18.0.11", + "@types/source-map-support": "^0.5.6", "chokidar": "^3.5.3", "eslint": "^8.38.0", "typescript": "^5.1.0" diff --git a/templates/express/server.js b/templates/express/server.js index 10b59924ea4..3c8f90a8423 100644 --- a/templates/express/server.js +++ b/templates/express/server.js @@ -6,7 +6,9 @@ import chokidar from "chokidar"; import compression from "compression"; import express from "express"; import morgan from "morgan"; +import sourceMapSupport from "source-map-support"; +sourceMapSupport.install(); installGlobals(); const BUILD_PATH = "./build/index.js"; diff --git a/templates/netlify/package.json b/templates/netlify/package.json index 4a219a3cab6..0819fb1084b 100644 --- a/templates/netlify/package.json +++ b/templates/netlify/package.json @@ -16,7 +16,8 @@ "cross-env": "^7.0.3", "isbot": "^3.6.8", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "source-map-support": "^0.5.21" }, "devDependencies": { "@remix-run/dev": "*", @@ -24,6 +25,7 @@ "@remix-run/serve": "*", "@types/react": "^18.0.35", "@types/react-dom": "^18.0.11", + "@types/source-map-support": "^0.5.6", "eslint": "^8.38.0", "typescript": "^5.1.0" }, diff --git a/templates/netlify/server.ts b/templates/netlify/server.ts index c6e862f8245..9b0e4bd08dd 100644 --- a/templates/netlify/server.ts +++ b/templates/netlify/server.ts @@ -1,7 +1,9 @@ import * as build from "@remix-run/dev/server-build"; import { createRequestHandler } from "@remix-run/netlify"; import { installGlobals } from "@remix-run/node"; +import sourceMapSupport from "source-map-support"; +sourceMapSupport.install(); installGlobals(); export const handler = createRequestHandler({ diff --git a/yarn.lock b/yarn.lock index 945440a79f3..76967795821 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3398,10 +3398,10 @@ resolved "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz" integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== -"@types/source-map-support@^0.5.4": - version "0.5.4" - resolved "https://registry.npmjs.org/@types/source-map-support/-/source-map-support-0.5.4.tgz" - integrity sha512-9zGujX1sOPg32XLyfgEB/0G9ZnrjthL/Iv1ZfuAjj8LEilHZEpQSQs1scpRXPhHzGYgWiLz9ldF1cI8JhL+yMw== +"@types/source-map-support@^0.5.4", "@types/source-map-support@^0.5.6": + version "0.5.6" + resolved "https://registry.npmjs.org/@types/source-map-support/-/source-map-support-0.5.6.tgz#aa4a8c98ec73a1f1f30a813573a9b2154a6eb39a" + integrity sha512-b2nJ9YyXmkhGaa2b8VLM0kJ04xxwNyijcq12/kDoomCt43qbHBeK2SLNJ9iJmETaAj+bKUT05PQUu3Q66GvLhQ== dependencies: source-map "^0.6.0"