@remix-run/serve
Advanced tools
Comparing version 0.0.0-nightly-49e8da1-20230823 to 0.0.0-nightly-4a957276b-20240918
278
CHANGELOG.md
# `@remix-run/serve` | ||
## 2.12.0 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/node@2.12.0` | ||
- `@remix-run/express@2.12.0` | ||
## 2.11.2 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/node@2.11.2` | ||
- `@remix-run/express@2.11.2` | ||
## 2.11.1 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/node@2.11.1` | ||
- `@remix-run/express@2.11.1` | ||
## 2.11.0 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/node@2.11.0` | ||
- `@remix-run/express@2.11.0` | ||
## 2.10.3 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/express@2.10.3` | ||
- `@remix-run/node@2.10.3` | ||
## 2.10.2 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/node@2.10.2` | ||
- `@remix-run/express@2.10.2` | ||
## 2.10.1 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/express@2.10.1` | ||
- `@remix-run/node@2.10.1` | ||
## 2.10.0 | ||
### Patch Changes | ||
- Upgrade `express` dependency to `^4.19.2` ([#9184](https://github.com/remix-run/remix/pull/9184)) | ||
- Updated dependencies: | ||
- `@remix-run/express@2.10.0` | ||
- `@remix-run/node@2.10.0` | ||
## 2.9.2 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/node@2.9.2` | ||
- `@remix-run/express@2.9.2` | ||
## 2.9.1 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/express@2.9.1` | ||
- `@remix-run/node@2.9.1` | ||
## 2.9.0 | ||
### Minor Changes | ||
- Put `undici` fetch polyfill behind a new `installGlobals({ nativeFetch: true })` parameter ([#9198](https://github.com/remix-run/remix/pull/9198)) | ||
- `remix-serve` will default to using `undici` for the fetch polyfill if `future.unstable_singleFetch` is enabled because the single fetch implementation relies on the `undici` polyfill | ||
- Any users opting into Single Fetch and managing their own polyfill will need to pass the flag to `installGlobals` on their own to avoid runtime errors with Single Fetch | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/node@2.9.0` | ||
- `@remix-run/express@2.9.0` | ||
## 2.8.1 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/express@2.8.1` | ||
- `@remix-run/node@2.8.1` | ||
## 2.8.0 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/express@2.8.0` | ||
- `@remix-run/node@2.8.0` | ||
## 2.7.2 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/express@2.7.2` | ||
- `@remix-run/node@2.7.2` | ||
## 2.7.1 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/express@2.7.1` | ||
- `@remix-run/node@2.7.1` | ||
## 2.7.0 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/express@2.7.0` | ||
- `@remix-run/node@2.7.0` | ||
## 2.6.0 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/node@2.6.0` | ||
- `@remix-run/express@2.6.0` | ||
## 2.5.1 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/express@2.5.1` | ||
- `@remix-run/node@2.5.1` | ||
## 2.5.0 | ||
### Patch Changes | ||
- Don't try to load sourcemaps if they don't exist on disk ([#8446](https://github.com/remix-run/remix/pull/8446)) | ||
- Updated dependencies: | ||
- `@remix-run/node@2.5.0` | ||
- `@remix-run/express@2.5.0` | ||
## 2.4.1 | ||
### Patch Changes | ||
- Use node `fileURLToPath` to convert source map URL to path ([#8321](https://github.com/remix-run/remix/pull/8321)) | ||
- Updated dependencies: | ||
- `@remix-run/node@2.4.1` | ||
- `@remix-run/express@2.4.1` | ||
## 2.4.0 | ||
### Patch Changes | ||
- Fix source map loading when file has `?t=timestamp` suffix (rebuilds) ([#8174](https://github.com/remix-run/remix/pull/8174)) | ||
- Updated dependencies: | ||
- `@remix-run/node@2.4.0` | ||
- `@remix-run/express@2.4.0` | ||
## 2.3.1 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/express@2.3.1` | ||
- `@remix-run/node@2.3.1` | ||
## 2.3.0 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/express@2.3.0` | ||
- `@remix-run/node@2.3.0` | ||
## 2.2.0 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/express@2.2.0` | ||
- `@remix-run/node@2.2.0` | ||
## 2.1.0 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `@remix-run/express@2.1.0` | ||
- `@remix-run/node@2.1.0` | ||
## 2.0.1 | ||
### Patch Changes | ||
- Fix HMR for CJS projects using `remix-serve` and manual mode (`remix dev --manual`) ([#7487](https://github.com/remix-run/remix/pull/7487)) | ||
- By explicitly busting the `require` cache, `remix-serve` now correctly re-imports new server changes in CJS | ||
- ESM projects were already working correctly and are not affected by this. | ||
- Fix error caused by partially written server build ([#7470](https://github.com/remix-run/remix/pull/7470)) | ||
- Previously, it was possible to trigger a reimport of the app server code before the new server build had completely been written. Reimporting the partially written server build caused issues related to `build.assets` being undefined and crashing when reading `build.assets.version` | ||
- Updated dependencies: | ||
- `@remix-run/node@2.0.1` | ||
- `@remix-run/express@2.0.1` | ||
## 2.0.0 | ||
### Major Changes | ||
- `remix-serve` now picks an open port if 3000 is taken ([#7278](https://github.com/remix-run/remix/pull/7278)) | ||
- If `PORT` env var is set, `remix-serve` will use that port | ||
- Otherwise, `remix-serve` picks an open port (3000 unless that is already taken) | ||
- Integrate manual mode in `remix-serve` ([#7231](https://github.com/remix-run/remix/pull/7231)) | ||
- Remove undocumented `createApp` Node API ([#7229](https://github.com/remix-run/remix/pull/7229)) | ||
- `remix-serve` is a CLI, not a library | ||
- Require Node >=18.0.0 ([#6939](https://github.com/remix-run/remix/pull/6939)) | ||
- Promote the `future.v2_dev` flag in `remix.config.js` to a root level `dev` config ([#7002](https://github.com/remix-run/remix/pull/7002)) | ||
- Default to `serverModuleFormat: "esm"` and update `remix-serve` to use dynamic import to support ESM and CJS build outputs ([#6949](https://github.com/remix-run/remix/pull/6949)) | ||
- Preserve dynamic imports in `remix-serve` for external bundle ([#7173](https://github.com/remix-run/remix/pull/7173)) | ||
- For preparation of using Node's built in fetch implementation, installing the fetch globals is now a responsibility of the app server ([#7009](https://github.com/remix-run/remix/pull/7009)) | ||
- 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 ([#7009](https://github.com/remix-run/remix/pull/7009)) | ||
- 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(); | ||
``` | ||
### Patch Changes | ||
- Update `remix-serve` usage error message to support ESM projects ([#7400](https://github.com/remix-run/remix/pull/7400)) | ||
- Updated dependencies: | ||
- `@remix-run/node@2.0.0` | ||
- `@remix-run/express@2.0.0` | ||
## 1.19.3 | ||
@@ -4,0 +282,0 @@ |
109
dist/cli.js
#!/usr/bin/env node | ||
/** | ||
* @remix-run/serve v0.0.0-nightly-49e8da1-20230823 | ||
* @remix-run/serve v0.0.0-nightly-4a957276b-20240918 | ||
* | ||
@@ -15,7 +15,9 @@ * Copyright (c) Remix Software Inc. | ||
require('@remix-run/node/install'); | ||
var fs = require('node:fs'); | ||
var os = require('node:os'); | ||
var path = require('node:path'); | ||
var os = require('node:os'); | ||
var url = require('node:url'); | ||
var node = require('@remix-run/node'); | ||
var express$1 = require('@remix-run/express'); | ||
var chokidar = require('chokidar'); | ||
var compression = require('compression'); | ||
@@ -25,8 +27,11 @@ var express = require('express'); | ||
var sourceMapSupport = require('source-map-support'); | ||
var getPort = require('get-port'); | ||
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } | ||
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs); | ||
var os__default = /*#__PURE__*/_interopDefaultLegacy(os); | ||
var path__default = /*#__PURE__*/_interopDefaultLegacy(path); | ||
var os__default = /*#__PURE__*/_interopDefaultLegacy(os); | ||
var url__default = /*#__PURE__*/_interopDefaultLegacy(url); | ||
var chokidar__default = /*#__PURE__*/_interopDefaultLegacy(chokidar); | ||
var compression__default = /*#__PURE__*/_interopDefaultLegacy(compression); | ||
@@ -36,18 +41,79 @@ var express__default = /*#__PURE__*/_interopDefaultLegacy(express); | ||
var sourceMapSupport__default = /*#__PURE__*/_interopDefaultLegacy(sourceMapSupport); | ||
var getPort__default = /*#__PURE__*/_interopDefaultLegacy(getPort); | ||
process.env.NODE_ENV = process.env.NODE_ENV ?? "production"; | ||
sourceMapSupport__default["default"].install(); | ||
node.installGlobals(); | ||
sourceMapSupport__default["default"].install({ | ||
retrieveSourceMap: function (source) { | ||
let match = source.startsWith("file://"); | ||
if (match) { | ||
let filePath = url__default["default"].fileURLToPath(source); | ||
let sourceMapPath = `${filePath}.map`; | ||
if (fs__default["default"].existsSync(sourceMapPath)) { | ||
return { | ||
url: source, | ||
map: fs__default["default"].readFileSync(sourceMapPath, "utf8") | ||
}; | ||
} | ||
} | ||
return null; | ||
} | ||
}); | ||
run(); | ||
function parseNumber(raw) { | ||
if (raw === undefined) return undefined; | ||
let maybe = Number(raw); | ||
if (Number.isNaN(maybe)) return undefined; | ||
return maybe; | ||
} | ||
async function run() { | ||
let port = process.env.PORT ? Number(process.env.PORT) : 3000; | ||
if (Number.isNaN(port)) port = 3000; | ||
let port = parseNumber(process.env.PORT) ?? (await getPort__default["default"]({ | ||
port: 3000 | ||
})); | ||
let buildPathArg = process.argv[2]; | ||
if (!buildPathArg) { | ||
console.error(` | ||
Usage: remix-serve <build-dir>`); | ||
Usage: remix-serve <server-build-path> - e.g. remix-serve build/index.js`); | ||
process.exit(1); | ||
} | ||
let buildPath = url__default["default"].pathToFileURL(path__default["default"].resolve(process.cwd(), buildPathArg)).href; | ||
let build = await import(buildPath); | ||
let buildPath = path__default["default"].resolve(buildPathArg); | ||
let versionPath = path__default["default"].resolve(buildPath, "..", "version.txt"); | ||
async function reimportServer() { | ||
Object.keys(require.cache).forEach(key => { | ||
if (key.startsWith(buildPath)) { | ||
delete require.cache[key]; | ||
} | ||
}); | ||
let stat = fs__default["default"].statSync(buildPath); | ||
// use a timestamp query parameter to bust the import cache | ||
return import(url__default["default"].pathToFileURL(buildPath).href + "?t=" + stat.mtimeMs); | ||
} | ||
function createDevRequestHandler(initialBuild) { | ||
let build = initialBuild; | ||
async function handleServerUpdate() { | ||
// 1. re-import the server build | ||
build = await reimportServer(); | ||
// 2. tell Remix that this app server is now up-to-date and ready | ||
node.broadcastDevReady(build); | ||
} | ||
chokidar__default["default"].watch(versionPath, { | ||
ignoreInitial: true | ||
}).on("add", handleServerUpdate).on("change", handleServerUpdate); | ||
// wrap request handler to make sure its recreated with the latest build for every request | ||
return async (req, res, next) => { | ||
try { | ||
return express$1.createRequestHandler({ | ||
build, | ||
mode: "development" | ||
})(req, res, next); | ||
} catch (error) { | ||
next(error); | ||
} | ||
}; | ||
} | ||
let build = await reimportServer(); | ||
node.installGlobals({ | ||
nativeFetch: build.future.unstable_singleFetch | ||
}); | ||
let onListen = () => { | ||
@@ -57,5 +123,5 @@ var _Object$values$flat$f; | ||
if (!address) { | ||
console.log(`Remix App Server started at http://localhost:${port}`); | ||
console.log(`[remix-serve] http://localhost:${port}`); | ||
} else { | ||
console.log(`Remix App Server started at http://localhost:${port} (http://${address}:${port})`); | ||
console.log(`[remix-serve] http://localhost:${port} (http://${address}:${port})`); | ||
} | ||
@@ -77,17 +143,6 @@ if (process.env.NODE_ENV === "development") { | ||
app.use(morgan__default["default"]("tiny")); | ||
let requestHandler; | ||
app.all("*", async (req, res, next) => { | ||
try { | ||
if (!requestHandler) { | ||
let build = await import(buildPath); | ||
requestHandler = express$1.createRequestHandler({ | ||
build, | ||
mode: process.env.NODE_ENV | ||
}); | ||
} | ||
return await requestHandler(req, res, next); | ||
} catch (error) { | ||
next(error); | ||
} | ||
}); | ||
app.all("*", process.env.NODE_ENV === "development" ? createDevRequestHandler(build) : express$1.createRequestHandler({ | ||
build, | ||
mode: process.env.NODE_ENV | ||
})); | ||
let server = process.env.HOST ? app.listen(port, process.env.HOST, onListen) : app.listen(port, onListen); | ||
@@ -94,0 +149,0 @@ ["SIGTERM", "SIGINT"].forEach(signal => { |
MIT License | ||
Copyright (c) Remix Software Inc. 2020-2021 | ||
Copyright (c) Shopify Inc. 2022-2023 | ||
Copyright (c) Shopify Inc. 2022-2024 | ||
@@ -6,0 +6,0 @@ Permission is hereby granted, free of charge, to any person obtaining a copy |
{ | ||
"name": "@remix-run/serve", | ||
"version": "0.0.0-nightly-49e8da1-20230823", | ||
"version": "0.0.0-nightly-4a957276b-20240918", | ||
"description": "Production application server for Remix", | ||
@@ -18,6 +18,8 @@ "bugs": { | ||
"dependencies": { | ||
"@remix-run/express": "0.0.0-nightly-49e8da1-20230823", | ||
"@remix-run/node": "0.0.0-nightly-49e8da1-20230823", | ||
"@remix-run/express": "0.0.0-nightly-4a957276b-20240918", | ||
"@remix-run/node": "0.0.0-nightly-4a957276b-20240918", | ||
"chokidar": "^3.5.3", | ||
"compression": "^1.7.4", | ||
"express": "^4.17.1", | ||
"express": "^4.19.2", | ||
"get-port": "5.1.1", | ||
"morgan": "^1.10.0", | ||
@@ -40,3 +42,6 @@ "source-map-support": "^0.5.21" | ||
"README.md" | ||
] | ||
} | ||
], | ||
"scripts": { | ||
"tsc": "tsc" | ||
} | ||
} |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
143
0
21217
8
6
+ Addedchokidar@^3.5.3
+ Addedget-port@5.1.1
+ Added@remix-run/express@0.0.0-nightly-4a957276b-20240918(transitive)
+ Added@remix-run/node@0.0.0-nightly-4a957276b-20240918(transitive)
+ Added@remix-run/router@1.19.2(transitive)
+ Added@remix-run/server-runtime@0.0.0-nightly-4a957276b-20240918(transitive)
+ Added@types/cookie@0.6.0(transitive)
+ Addedanymatch@3.1.3(transitive)
+ Addedbinary-extensions@2.3.0(transitive)
+ Addedbraces@3.0.3(transitive)
+ Addedchokidar@3.6.0(transitive)
+ Addedcookie@0.6.0(transitive)
+ Addedfill-range@7.1.1(transitive)
+ Addedfsevents@2.3.3(transitive)
+ Addedget-port@5.1.1(transitive)
+ Addedglob-parent@5.1.2(transitive)
+ Addedis-binary-path@2.1.0(transitive)
+ Addedis-extglob@2.1.1(transitive)
+ Addedis-glob@4.0.3(transitive)
+ Addedis-number@7.0.0(transitive)
+ Addednormalize-path@3.0.0(transitive)
+ Addedpicomatch@2.3.1(transitive)
+ Addedreaddirp@3.6.0(transitive)
+ Addedto-regex-range@5.0.1(transitive)
+ Addedturbo-stream@2.4.0(transitive)
+ Addedundici@6.21.1(transitive)
- Removed@remix-run/express@0.0.0-nightly-49e8da1-20230823(transitive)
- Removed@remix-run/node@0.0.0-nightly-49e8da1-20230823(transitive)
- Removed@remix-run/router@0.0.0-experimental-4286521e(transitive)
- Removed@remix-run/server-runtime@0.0.0-nightly-49e8da1-20230823(transitive)
- Removed@types/cookie@0.4.1(transitive)
- Removedcookie@0.4.2(transitive)
- Removedtype-fest@4.35.0(transitive)
Updatedexpress@^4.19.2