-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Node.js standalone mode + support for astro preview (#5056)
* wip * Deprecate buildConfig and move to config.build * Implement the standalone server * Stay backwards compat * Add changesets * correctly merge URLs * Get config earlier * update node tests * Return the preview server * update remaining tests * swap usage and config ordering * Update packages/astro/src/@types/astro.ts Co-authored-by: Sarah Rainsberger <[email protected]> * Update .changeset/metal-pumas-walk.md Co-authored-by: Sarah Rainsberger <[email protected]> * Update .changeset/metal-pumas-walk.md Co-authored-by: Sarah Rainsberger <[email protected]> * Update .changeset/stupid-points-refuse.md Co-authored-by: Sarah Rainsberger <[email protected]> * Update .changeset/stupid-points-refuse.md Co-authored-by: Sarah Rainsberger <[email protected]> * Link to build.server config Co-authored-by: Fred K. Schott <[email protected]> Co-authored-by: Sarah Rainsberger <[email protected]>
- Loading branch information
1 parent
2b7fb84
commit e55af8a
Showing
34 changed files
with
1,094 additions
and
361 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
--- | ||
'astro': minor | ||
'@astrojs/node': minor | ||
--- | ||
|
||
# Adapter support for `astro preview` | ||
|
||
Adapters are now about to support the `astro preview` command via a new integration option. The Node.js adapter `@astrojs/node` is the first of the built-in adapters to gain support for this. What this means is that if you are using `@astrojs/node` you can new preview your SSR app by running: | ||
|
||
```shell | ||
npm run preview | ||
``` | ||
|
||
## Adapter API | ||
|
||
We will be updating the other first party Astro adapters to support preview over time. Adapters can opt-in to this feature by providing the `previewEntrypoint` via the `setAdapter` function in `astro:config:done` hook. The Node.js adapter's code looks like this: | ||
|
||
```diff | ||
export default function() { | ||
return { | ||
name: '@astrojs/node', | ||
hooks: { | ||
'astro:config:done': ({ setAdapter, config }) => { | ||
setAdapter({ | ||
name: '@astrojs/node', | ||
serverEntrypoint: '@astrojs/node/server.js', | ||
+ previewEntrypoint: '@astrojs/node/preview.js', | ||
exports: ['handler'], | ||
}); | ||
|
||
// more here | ||
} | ||
} | ||
}; | ||
} | ||
``` | ||
|
||
The `previewEntrypoint` is a module in the adapter's package that is a Node.js script. This script is run when `astro preview` is run and is charged with starting up the built server. See the Node.js implementation in `@astrojs/node` to see how that is implemented. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
--- | ||
'@astrojs/node': major | ||
--- | ||
|
||
# Standalone mode for the Node.js adapter | ||
|
||
New in `@astrojs/node` is support for __standalone mode__. With standalone mode you can start your production server without needing to write any server JavaScript yourself. The server starts simply by running the script like so: | ||
|
||
```shell | ||
node ./dist/server/entry.mjs | ||
``` | ||
|
||
To enable standalone mode, set the new `mode` to `'standalone'` option in your Astro config: | ||
|
||
```js | ||
import { defineConfig } from 'astro/config'; | ||
import nodejs from '@astrojs/node'; | ||
|
||
export default defineConfig({ | ||
output: 'server', | ||
adapter: nodejs({ | ||
mode: 'standalone' | ||
}) | ||
}); | ||
``` | ||
|
||
See the @astrojs/node documentation to learn all of the options available in standalone mode. | ||
|
||
## Breaking change | ||
|
||
This is a semver major change because the new `mode` option is required. Existing @astrojs/node users who are using their own HTTP server framework such as Express can upgrade by setting the `mode` option to `'middleware'` in order to build to a middleware mode, which is the same behavior and API as before. | ||
|
||
```js | ||
import { defineConfig } from 'astro/config'; | ||
import nodejs from '@astrojs/node'; | ||
|
||
export default defineConfig({ | ||
output: 'server', | ||
adapter: nodejs({ | ||
mode: 'middleware' | ||
}) | ||
}); | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
--- | ||
'astro': minor | ||
'@astrojs/cloudflare': minor | ||
'@astrojs/deno': minor | ||
'@astrojs/image': minor | ||
'@astrojs/netlify': minor | ||
'@astrojs/node': minor | ||
'@astrojs/vercel': minor | ||
--- | ||
|
||
# New build configuration | ||
|
||
The ability to customize SSR build configuration more granularly is now available in Astro. You can now customize the output folder for `server` (the server code for SSR), `client` (your client-side JavaScript and assets), and `serverEntry` (the name of the entrypoint server module). Here are the defaults: | ||
|
||
```js | ||
import { defineConfig } from 'astro/config'; | ||
|
||
export default defineConfig({ | ||
output: 'server', | ||
build: { | ||
server: './dist/server/', | ||
client: './dist/client/', | ||
serverEntry: 'entry.mjs', | ||
} | ||
}); | ||
``` | ||
|
||
These new configuration options are only supported in SSR mode and are ignored when building to SSG (a static site). | ||
|
||
## Integration hook change | ||
|
||
The integration hook `astro:build:start` includes a param `buildConfig` which includes all of these same options. You can continue to use this param in Astro 1.x, but it is deprecated in favor of the new `build.config` options. All of the built-in adapters have been updated to the new format. If you have an integration that depends on this param we suggest upgrading to do this instead: | ||
|
||
```js | ||
export default function myIntegration() { | ||
return { | ||
name: 'my-integration', | ||
hooks: { | ||
'astro:config:setup': ({ updateConfig }) => { | ||
updateConfig({ | ||
build: { | ||
server: '...' | ||
} | ||
}); | ||
} | ||
} | ||
} | ||
} | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.