diff --git a/boilerplates/boilerplate-react-ts/package.json b/boilerplates/boilerplate-react-ts/package.json index b6c4c0010e2..985d62b251e 100644 --- a/boilerplates/boilerplate-react-ts/package.json +++ b/boilerplates/boilerplate-react-ts/package.json @@ -2,7 +2,7 @@ "scripts": { "dev": "npm run server:dev", "prod": "npm run build && npm run server:prod", - "build": "vite build", + "build": "vike build", "server": "node --loader ts-node/esm ./server/index.ts", "server:dev": "npm run server", "server:prod": "cross-env NODE_ENV=production npm run server" diff --git a/boilerplates/boilerplate-react/package.json b/boilerplates/boilerplate-react/package.json index 33f8daadae4..4560c6c347e 100644 --- a/boilerplates/boilerplate-react/package.json +++ b/boilerplates/boilerplate-react/package.json @@ -2,7 +2,7 @@ "scripts": { "dev": "npm run server:dev", "prod": "npm run build && npm run server:prod", - "build": "vite build", + "build": "vike build", "server:dev": "node ./server", "server:prod": "cross-env NODE_ENV=production node ./server" }, diff --git a/boilerplates/boilerplate-vue-ts/package.json b/boilerplates/boilerplate-vue-ts/package.json index 81b1b7c91df..68f01426f15 100644 --- a/boilerplates/boilerplate-vue-ts/package.json +++ b/boilerplates/boilerplate-vue-ts/package.json @@ -2,7 +2,7 @@ "scripts": { "dev": "npm run server:dev", "prod": "npm run build && npm run server:prod", - "build": "vite build", + "build": "vike build", "server": "node --loader ts-node/esm ./server/index.ts", "server:dev": "npm run server", "server:prod": "cross-env NODE_ENV=production npm run server" diff --git a/boilerplates/boilerplate-vue/package.json b/boilerplates/boilerplate-vue/package.json index 3854da713fc..82f75abbc0c 100644 --- a/boilerplates/boilerplate-vue/package.json +++ b/boilerplates/boilerplate-vue/package.json @@ -2,7 +2,7 @@ "scripts": { "dev": "npm run server:dev", "prod": "npm run build && npm run server:prod", - "build": "vite build", + "build": "vike build", "server:dev": "node ./server", "server:prod": "cross-env NODE_ENV=production node ./server" }, diff --git a/docs/components/static-host.tsx b/docs/components/static-host.tsx index 26eb8bdda7c..ad09f10d8de 100644 --- a/docs/components/static-host.tsx +++ b/docs/components/static-host.tsx @@ -40,7 +40,7 @@ function StaticHostDocStrategies({ name = 'the static host' }: { name?: string }

- The $ vite build command generates dist/client/ containing all static assets. + The $ vike build command generates dist/client/ containing all static assets.

@@ -53,7 +53,7 @@ function StaticHostDocOutro({ baseUrlAddendum }: { baseUrlAddendum?: React.JSX.E {' '} You can try out your production build locally with{' '} - $ vite preview + $ vike preview , or any other tool such as{' '} diff --git a/docs/headings.ts b/docs/headings.ts index 18f1580f6f6..8972032c90a 100644 --- a/docs/headings.ts +++ b/docs/headings.ts @@ -337,6 +337,16 @@ const headings = [ url: '/config', sectionTitles: ['`+` files'] }, + { + level: 2, + title: 'CLI', + url: '/cli' + }, + { + level: 2, + title: 'JavaScript API', + url: '/api' + }, { level: 2, title: 'Error Page', diff --git a/docs/headingsDetached.ts b/docs/headingsDetached.ts index 9347442024c..6c8ede8f9d5 100644 --- a/docs/headingsDetached.ts +++ b/docs/headingsDetached.ts @@ -321,6 +321,10 @@ const headingsDetached: HeadingDetachedDefinition[] = [ title: '`useClientRouter()`', url: '/useClientRouter' }, + { + title: 'CLI Migration', + url: '/migration/cli' + }, { title: 'Migration `0.4`', url: '/migration-0.4' diff --git a/docs/package.json b/docs/package.json index ff98071fc06..cee704f70d1 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,8 +1,8 @@ { "scripts": { - "dev": "vite dev", - "build": "vite build", - "preview": "vite build && vite preview", + "dev": "vike dev", + "build": "vike build", + "preview": "vike build && vike preview", "typecheck": "tsc --noEmit --watch" }, "dependencies": { diff --git a/docs/pages/NODE_ENV/+Page.mdx b/docs/pages/NODE_ENV/+Page.mdx index 340c0e5183a..0e7f3bf9187 100644 --- a/docs/pages/NODE_ENV/+Page.mdx +++ b/docs/pages/NODE_ENV/+Page.mdx @@ -14,7 +14,7 @@ In production (and staging): - Make sure `process.env.NODE_ENV` is a value different than `[undefined, 'development', 'dev', '']`. > Note that: > - Upon starting your server in production, make sure to set `process.env.NODE_ENV`. (E.g. `$ NODE_ENV='production' node server/index.js`.) - > - Upon building (`$ vite build`), Vite automatically sets `process.env.NODE_ENV` to `'production'`. + > - Upon building (`$ vike build`), Vite automatically sets `process.env.NODE_ENV` to `'production'`. > - Upon manually triggering pre-rendering (`$ vike prerender`), Vike automatically sets `process.env.NODE_ENV` to `'production'`. - If you use a server, make sure you don't add Vite's server middleware: it isn't needed in production and would unnecessarily bloat your production server. diff --git a/docs/pages/add/+Page.mdx b/docs/pages/add/+Page.mdx index 279db952f38..695b3605253 100644 --- a/docs/pages/add/+Page.mdx +++ b/docs/pages/add/+Page.mdx @@ -21,13 +21,28 @@ On a high-level, this is how you add Vike to your existing Vite app: - Example: -2. Either: +1. Use Vike's CLI instead of Vite's CLI. + ```json5 + // package.json + { + "scripts": { + "dev": "vite", // [!code --] + "dev": "vike dev", // [!code ++] + "build": "vite build", // [!code --] + "build": "vike build", // [!code ++] + "preview": "vite preview", // [!code --] + "preview": "vike preview", // [!code ++] + } + } + ``` + +1. Either: - Enable pre-rendering, or > See - add a Express.js/Hono/Fastify/... server (or add Vike's server middleware if you already have one). > Example: -3. Either: +1. Either: - Use , or - define `+onRenderClient.js` and `+onRenderHtml.js`. > Examples: @@ -36,7 +51,7 @@ On a high-level, this is how you add Vike to your existing Vite app: > - > - -4. Create your first `+Page.js` file. +1. Create your first `+Page.js` file. > Examples: > - > - diff --git a/docs/pages/api/+Page.mdx b/docs/pages/api/+Page.mdx new file mode 100644 index 00000000000..3170fd1909d --- /dev/null +++ b/docs/pages/api/+Page.mdx @@ -0,0 +1,70 @@ +import { Link } from '@brillout/docpress' + +```js +import { dev, build, preview, prerender } from 'vike/api' + +// Same as CLI `$ vike dev` +await dev() +console.log('Dev server is ready') + +// Same as CLI `$ vike build` +await build() +console.log('Build is done') + +// Same as CLI `$ vike preview` +await preview() +console.log('Preview server is ready') + +// Same as CLI `$ vike prerender` +await prerender() +console.log('Pre-rendering is done') +``` + +## Options + +All API functions have the option `{ viteConfig: { /*...*/ }}`. (It's the only option.) + +> We generally recommend to define your Vite settings in your `vite.config.js` file instead of using the `viteConfig` option. The API automatically loads your `vite.config.js` file (just like the CLI). + +If you want to define Vite settings outside of your app (typically when building your own framework) you can do this: + +```js +import { dev } from 'vike/api' + +await dev({ + viteConfig: { + // vite.config.js can live in node_modules/my-framework/src/vite.config.ts + configFile: './path/to/vite.config.js', + // The app's root can be somewhere completely else than vite.config.js + root: './path/to/app/' + // Some Vite settings overriding vite.config.js + /* ... */ + } +}) +console.log('Dev server is ready') +``` + +If you want to define your entire Vite config programmatically: + +```js +import { build } from 'vike/api' + +await build({ + viteConfig: { + // Don't load any vite.config.js + configFile: false, + // All Vite settings + /* ... */ + } +}) +console.log('Build is done') +``` + +See also: [Vite > JavaScript API > `InlineConfig`](https://vitejs.dev/guide/api-javascript.html#inlineconfig) + + +## See also + +- [Vite > JavaScript API](https://vite.dev/guide/api-javascript) +- +- diff --git a/docs/pages/build-your-own-framework/+Page.mdx b/docs/pages/build-your-own-framework/+Page.mdx index 191323c8a93..490df003c9b 100644 --- a/docs/pages/build-your-own-framework/+Page.mdx +++ b/docs/pages/build-your-own-framework/+Page.mdx @@ -1,4 +1,4 @@ -import { Warning, Link } from '@brillout/docpress' +import { Link } from '@brillout/docpress' Vike enables you to create your own framework tailored to your company's requirements. @@ -72,3 +72,7 @@ You can achieve that by progressively applying one or more of the following step - Add utilities to your framework, such as error tracking or analytics. Feel free to reach out to the Vike team if you have any questions, and sponsorship is welcome for a tight-knit collaboration. + +## See also + +- diff --git a/docs/pages/cli/+Page.mdx b/docs/pages/cli/+Page.mdx new file mode 100644 index 00000000000..39318e7ffc2 --- /dev/null +++ b/docs/pages/cli/+Page.mdx @@ -0,0 +1,28 @@ +import { Link } from '@brillout/docpress' + +Usage: +- `$ vike dev` Start development server. +- `$ vike build` Build for production. +- `$ vike preview` Start preview server using production build. +- `$ vike prerender` Pre-render pages. +- `$ vike -v` Print Vike's installed version. + +Vike's CLI doesn't have any options, instead: + - change your `vite.config.js` file, or + - use the `VITE_CONFIG` environment variable. + +For example: + +```bash +# Set Vite's server.host setting to true +$ VITE_CONFIG="{server:{host:true}}" vike dev + +# When running Vike's CLI over a package.json script +$ VITE_CONFIG="{build:{outDir:'build'}}" npm run build +``` + +> You can define `VITE_CONFIG` using JavaScript-like syntax, [JSON syntax](https://json.org/example.html), or [JSON5 syntax](https://json5.org/#example). (Vike uses [JSON5](https://json5.org) to parse `VITE_CONFIG`.) + +## See also + +- diff --git a/docs/pages/cloudflare-workers/+Page.mdx b/docs/pages/cloudflare-workers/+Page.mdx index 19ccd344b45..25d1c2c885f 100644 --- a/docs/pages/cloudflare-workers/+Page.mdx +++ b/docs/pages/cloudflare-workers/+Page.mdx @@ -23,7 +23,7 @@ We recommend using [Wrangler v2](https://github.com/cloudflare/wrangler2) (the v ## vite-plugin-cloudflare -You can also use [vite-plugin-cloudflare](https://github.com/Aslemammad/vite-plugin-cloudflare) which enables you to simply use `$ vite build` and `$ vite dev` to build and develop your worker code (including HMR support!). +You can also use [vite-plugin-cloudflare](https://github.com/Aslemammad/vite-plugin-cloudflare) which enables you to simply use `$ vike build` and `$ vike dev` to build and develop your worker code (including HMR support!). Example: [GitHub > `Aslemammad/vite-plugin-cloudflare` > `examples/vite-plugin-ssr/`](https://github.com/Aslemammad/vite-plugin-cloudflare/tree/main/examples/vite-plugin-ssr). diff --git a/docs/pages/disableAutoFullBuild/+Page.mdx b/docs/pages/disableAutoFullBuild/+Page.mdx index bf6794d24fd..3f6cf5c22b0 100644 --- a/docs/pages/disableAutoFullBuild/+Page.mdx +++ b/docs/pages/disableAutoFullBuild/+Page.mdx @@ -1,7 +1,13 @@ -import { Link } from '@brillout/docpress' +import { Link, Warning } from '@brillout/docpress' Disable the automatic chaining of build steps. + + This setting is deprecated and will soon be removed. (Because Vite will soon use one Rolldown build in replacement of two Rollup builds.) + + Consider instead. + + ```js // vite.config.js @@ -19,15 +25,15 @@ export default { } ``` -Running `$ vite build` executes three build steps: +Running `$ vike build` executes three build steps: 1. Client-side build (`dist/client/`). 1. Server-side build (`dist/server/`). 1. Pre-rendering (if ). When setting `disableAutoFullBuild` to `true` then only step `1` is executed. To run the full build, you then have to: - - Run `$ vite build`, to build the client-side (`dist/client/`). - - Run `$ vite build --ssr`, to build the server-side (`dist/server/`). + - Run `$ vike build`, to build the client-side (`dist/client/`). + - Run `$ vike build --ssr`, to build the server-side (`dist/server/`). - Run the pre-rendering programmatically, see . > If your goal is only to programmatically run pre-rendering then consider using prerender.disableAutoRun instead. diff --git a/docs/pages/docker/+Page.mdx b/docs/pages/docker/+Page.mdx index 013f872f9b8..ad360d02015 100644 --- a/docs/pages/docker/+Page.mdx +++ b/docs/pages/docker/+Page.mdx @@ -37,10 +37,10 @@ Check whether your Docker container has enough memory, and you may also need to // package.json { "scripts": { - "build": "vite build" // [!code --] + "build": "vike build" // [!code --] "// Increase Node.js memory size to 3GB": "", // [!code ++] "build": "NODE_OPTIONS=--max-old-space-size=3072 npm run build:vite", // [!code ++] - "build:vite": "vite build" // [!code ++] + "build:vite": "vike build" // [!code ++] } } ``` diff --git a/docs/pages/hapi/+Page.mdx b/docs/pages/hapi/+Page.mdx index 7cea70a576d..8b1101cae25 100644 --- a/docs/pages/hapi/+Page.mdx +++ b/docs/pages/hapi/+Page.mdx @@ -6,7 +6,7 @@ import { CommunityNote } from '../../components' We recommend the following setup. In development, we use *two* servers: - 1. We use Vite's development server (`$ vite`). (It automatically includes Vike). + 1. We use Vite's development server. (It automatically includes Vike's server middleware.) 1. We use our hapi server *without* Vite nor Vike. This means that in development, Vite is responsible for serving the entire frontend, while our hapi server is responsible only for serving the backend. diff --git a/docs/pages/migration/cli/+Page.mdx b/docs/pages/migration/cli/+Page.mdx new file mode 100644 index 00000000000..5200f6d0d53 --- /dev/null +++ b/docs/pages/migration/cli/+Page.mdx @@ -0,0 +1,33 @@ +import { Link } from '@brillout/docpress' + +Using the Vite CLI is deprecated starting from `vike@0.4.213`. + +> You can still use it, but you'll see following warning and support for Vite's CLI will be completely removed in the next major release. +> ``` +> 1:18:05 PM [vike][Warning] The Vite CLI is deprecated +> ``` + +Use the Vike CLI instead: + +```json5 +// package.json +{ + "scripts": { + "dev": "vite", // [!code --] + "dev": "vike dev", // [!code ++] + "build": "vite build", // [!code --] + "build": "vike build", // [!code ++] + "preview": "vite preview", // [!code --] + "preview": "vike preview", // [!code ++] + } +} +``` + +Vike's CLI doesn't have any option: use the `VITE_CONFIG` environment variable instead, see . + +We also recommend using Vike's JavaScript API instead of [Vite's JavaScript API](https://vite.dev/guide/api-javascript), as some features in the near future will only be available when using Vike's JavaScript API. + +## See also + +- +- diff --git a/docs/pages/onBeforePrerenderStart/+Page.mdx b/docs/pages/onBeforePrerenderStart/+Page.mdx index a26979678f2..6fcdd8d6c1d 100644 --- a/docs/pages/onBeforePrerenderStart/+Page.mdx +++ b/docs/pages/onBeforePrerenderStart/+Page.mdx @@ -41,12 +41,12 @@ async function onBeforePrerenderStart() { > If you don't have any parameterized route, > then you can pre-render your app without defining any `onBeforePrerenderStart()` hook. -> The `onBeforePrerenderStart()` hooks are called when you run $ vite build and, consequently, are never called in development. +> The `onBeforePrerenderStart()` hooks are called when you run $ vike build and, consequently, are never called in development. ## For bulk data fetching -If you have a high number of pages that are to be pre-rendered, then running the command $ vite build may become slow. +If you have a high number of pages that are to be pre-rendered, then running the command $ vike build may become slow. You can make pre-rendering significantly faster by providing the `pageContext` of pages in `onBeforePrerenderStart()` hooks. diff --git a/docs/pages/pre-rendering/+Page.mdx b/docs/pages/pre-rendering/+Page.mdx index 39e5c270027..e6adcafb9ce 100644 --- a/docs/pages/pre-rendering/+Page.mdx +++ b/docs/pages/pre-rendering/+Page.mdx @@ -4,7 +4,7 @@ import PreRenderDynamicRoutes from './PreRenderDynamicRoutes.mdx' ## What is pre-rendering? -Pre-rendering means to render the HTML of pages at build-time (when running `$ vite build`). +Pre-rendering means to render the HTML of pages at build-time (when running `$ vike build`). Without pre-rendering, the HTML of a page is rendered at request-time (when the user goes to that page). @@ -47,7 +47,7 @@ export default { List of options: . -Your pages' HTML will be rendered when you run `$ vite build` and the generated HTML files are available at `dist/client/`. +Your pages' HTML will be rendered when you run `$ vike build` and the generated HTML files are available at `dist/client/`. For a page with a parameterized route (e.g. `/movie/@movieId`), you have to use the `onBeforePrerenderStart()` hook in order to provide the list of URLs that are to be pre-rendered. The `onBeforePrerenderStart()` hook can also be used to accelerate the pre-rendering process. @@ -55,7 +55,7 @@ For a page with a parameterized route (e.g. `/movie/@movieId`), you have to use By default, all pages are pre-rendered. To pre-render only some pages, use the partial option} /> with prerender: false} />. -If you pre-render all your pages, then you can use Vite's CLI instead of a server (`$ vite dev` and `$ vite preview`). See linked examples below. +If you pre-render all your pages, then you can use Vike's CLI instead of a server (`$ vike dev` and `$ vike preview`). See linked examples below. You can programmatically invoke the pre-rendering process, see . @@ -63,19 +63,19 @@ React Example: - (see setting prerender option to `true`) - - - - (see Vite CLI usage) + - (see Vike CLI usage) Vue Example: - (see setting prerender option to `true`) - - - - (see Vite CLI usage) + - (see Vike CLI usage) ## SSG vs SSR The only difference between SSG and SSR is *when* the HTML is rendered: -- SSG: the HTML of pages is rendered at build-time (when calling `$ vite build`) +- SSG: the HTML of pages is rendered at build-time (when calling `$ vike build`) - SSR: the HTML of pages is rendered at request-time (when the user goes to that page) > The client-side code of pages is loaded and executed in the user's browser and is therefore always executed at request-time. diff --git a/docs/pages/prerender/+Page.mdx b/docs/pages/prerender/+Page.mdx index 5a699496e2c..323a5fb81c0 100644 --- a/docs/pages/prerender/+Page.mdx +++ b/docs/pages/prerender/+Page.mdx @@ -169,7 +169,7 @@ Set to `false` (or `1`) to disable concurrency. `boolean` (default: `false`) -When running `$ vite build`, Vike automatically triggers pre-rendering. (If you .) +When running `$ vike build`, Vike automatically triggers pre-rendering. (If you .) You can disable the automatic triggering: @@ -182,7 +182,7 @@ export default { plugins: [ vike({ prerender: { - // Stop `$ vite build` from initiating pre-rendering + // Stop `$ vike build` from initiating pre-rendering disableAutoRun: true } }) @@ -194,8 +194,6 @@ You can then manually trigger pre-rendering using: - - -See also . - ## See also diff --git a/docs/pages/renderPage/+Page.mdx b/docs/pages/renderPage/+Page.mdx index 73d4402a226..16d87ddb004 100644 --- a/docs/pages/renderPage/+Page.mdx +++ b/docs/pages/renderPage/+Page.mdx @@ -107,8 +107,8 @@ The `renderPage()` function doesn't depend on Node.js and you can use `renderPag ## Optional If you all your pages then you don't need to use `renderPage()`, because: - - Upon development, Vike automatically embeds itself into Vite's development server (`$ vite`/`$ vite dev`). - - Upon pre-rendering (`$ vite build`/`$ vike prerender`) Vike renders all your pages. + - Upon development (`$ vike dev`), Vike automatically embeds itself into Vite's development server. + - Upon pre-rendering (`$ vike build`/`$ vike prerender`), Vike automatically renders all your pages. But, if you use Server-Side Rendering (SSR) and you don't pre-render *all* your pages, then you need a production server and you need to use `renderPage()` in order to embed Vike into your server. See . diff --git a/docs/pages/settings/+Page.mdx b/docs/pages/settings/+Page.mdx index 96ae379c7f9..01fa0822fae 100644 --- a/docs/pages/settings/+Page.mdx +++ b/docs/pages/settings/+Page.mdx @@ -43,7 +43,6 @@ List of built-in settings. (You can create your own settings< - [**`passToClient`**](/passToClient): string[] Determines what `pageContext` values are sent to the client-side. - [**`clientRouting`**](/clientRouting): boolean Enable Client Routing. - [**`hydrationCanBeAborted`**](/hydrationCanBeAborted): boolean Whether your allows the hydration to be aborted. -- [**`disableAutoFullBuild`**](/disableAutoFullBuild): Disable automatic chaining of build steps. - [**`trailingSlash`**](/url-normalization): Whether URLs should end with a trailing slash. - [**`disableUrlNormalization`**](/url-normalization): Disable automatic URL normalization. - [**`reactStrictMode`**](/reactStrictMode): `vike-react` Whether to use React's ``. diff --git a/docs/pages/static-directory/+Page.mdx b/docs/pages/static-directory/+Page.mdx index 5445549b19e..bf46344b020 100644 --- a/docs/pages/static-directory/+Page.mdx +++ b/docs/pages/static-directory/+Page.mdx @@ -8,7 +8,7 @@ Official docs: [Vite - The `public/` Directory](https://vitejs.dev/guide/assets. ## `dist/client/` -After running `$ vite build`, all static assets live in `dist/client/`. +After running `$ vike build`, all static assets live in `dist/client/`. ```bash # The browser-side JavaScript bundle of our page `pages/hello-world/+Page.js` diff --git a/examples/auth/package.json b/examples/auth/package.json index 2c9ffe030d6..a6fefd38e51 100644 --- a/examples/auth/package.json +++ b/examples/auth/package.json @@ -2,7 +2,7 @@ "scripts": { "dev": "npm run server:dev", "prod": "npm run build && npm run server:prod", - "build": "vite build", + "build": "vike build", "server:dev": "node ./server", "server:prod": "cross-env NODE_ENV=production node ./server" }, diff --git a/examples/base-url-cdn/package.json b/examples/base-url-cdn/package.json index 404e0ac44c7..2b5c1b065c9 100644 --- a/examples/base-url-cdn/package.json +++ b/examples/base-url-cdn/package.json @@ -2,7 +2,7 @@ "scripts": { "start": "npm run build && npm run serve", "// Build": "", - "build": "vite build", + "build": "vike build", "// Server + CDN": "", "serve": "cross-env NODE_ENV=production concurrently \"npm run serve:cdn \" \"npm run serve:ssr\"", "serve:ssr": "node ./server/ssr", diff --git a/examples/base-url-server/package.json b/examples/base-url-server/package.json index 404e0ac44c7..2b5c1b065c9 100644 --- a/examples/base-url-server/package.json +++ b/examples/base-url-server/package.json @@ -2,7 +2,7 @@ "scripts": { "start": "npm run build && npm run serve", "// Build": "", - "build": "vite build", + "build": "vike build", "// Server + CDN": "", "serve": "cross-env NODE_ENV=production concurrently \"npm run serve:cdn \" \"npm run serve:ssr\"", "serve:ssr": "node ./server/ssr", diff --git a/examples/base-url/package.json b/examples/base-url/package.json index 9d3adf0b84c..6aec30ba12f 100644 --- a/examples/base-url/package.json +++ b/examples/base-url/package.json @@ -1,8 +1,8 @@ { "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite build && vite preview" + "dev": "vike dev", + "build": "vike build", + "preview": "vike build && vike preview" }, "dependencies": { "@vitejs/plugin-react": "^4.3.4", diff --git a/examples/cloudflare-workers-react-full/package.json b/examples/cloudflare-workers-react-full/package.json index 62896d44d6f..6e7ea330f60 100644 --- a/examples/cloudflare-workers-react-full/package.json +++ b/examples/cloudflare-workers-react-full/package.json @@ -1,8 +1,8 @@ { "scripts": { "dev": "node ./dev-server", - "preview": "vite build && wrangler dev", - "deploy": "vite build && wrangler publish" + "preview": "vike build && wrangler dev", + "deploy": "vike build && wrangler publish" }, "dependencies": { "@cloudflare/kv-asset-handler": "^0.2.0", diff --git a/examples/cloudflare-workers-react/package.json b/examples/cloudflare-workers-react/package.json index 8c5ba6a4c69..d4c20372ad6 100644 --- a/examples/cloudflare-workers-react/package.json +++ b/examples/cloudflare-workers-react/package.json @@ -1,8 +1,8 @@ { "scripts": { - "dev": "vite", - "preview": "vite build && wrangler dev", - "deploy": "vite build && wrangler publish" + "dev": "vike dev", + "preview": "vike build && wrangler dev", + "deploy": "vike build && wrangler publish" }, "dependencies": { "@cloudflare/kv-asset-handler": "^0.2.0", diff --git a/examples/cloudflare-workers-vue/package.json b/examples/cloudflare-workers-vue/package.json index ba2b6b1a8ee..2f8c0873c29 100644 --- a/examples/cloudflare-workers-vue/package.json +++ b/examples/cloudflare-workers-vue/package.json @@ -1,8 +1,8 @@ { "scripts": { - "dev": "vite", - "preview": "vite build && wrangler dev", - "deploy": "vite build && wrangler publish" + "dev": "vike dev", + "preview": "vike build && wrangler dev", + "deploy": "vike build && wrangler publish" }, "dependencies": { "@cloudflare/kv-asset-handler": "^0.3.2", diff --git a/examples/custom-preload/package.json b/examples/custom-preload/package.json index 9d3adf0b84c..6aec30ba12f 100644 --- a/examples/custom-preload/package.json +++ b/examples/custom-preload/package.json @@ -1,8 +1,8 @@ { "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite build && vite preview" + "dev": "vike dev", + "build": "vike build", + "preview": "vike build && vike preview" }, "dependencies": { "@vitejs/plugin-react": "^4.3.4", diff --git a/examples/file-structure-domain-driven/package.json b/examples/file-structure-domain-driven/package.json index 9d3adf0b84c..6aec30ba12f 100644 --- a/examples/file-structure-domain-driven/package.json +++ b/examples/file-structure-domain-driven/package.json @@ -1,8 +1,8 @@ { "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite build && vite preview" + "dev": "vike dev", + "build": "vike build", + "preview": "vike build && vike preview" }, "dependencies": { "@vitejs/plugin-react": "^4.3.4", diff --git a/examples/html-fragments/package.json b/examples/html-fragments/package.json index 303efc1980c..a94e555f16a 100644 --- a/examples/html-fragments/package.json +++ b/examples/html-fragments/package.json @@ -1,7 +1,7 @@ { "scripts": { - "dev": "vite dev", - "preview": "vite build && vite preview" + "dev": "vike dev", + "preview": "vike build && vike preview" }, "dependencies": { "typescript": "^4.6.4", diff --git a/examples/i18n/package.json b/examples/i18n/package.json index 9b0d8df559b..54c7a64e790 100644 --- a/examples/i18n/package.json +++ b/examples/i18n/package.json @@ -1,8 +1,8 @@ { "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite build && vite preview" + "dev": "vike dev", + "build": "vike build", + "preview": "vike build && vike preview" }, "dependencies": { "@vitejs/plugin-react": "^4.3.4", diff --git a/examples/path-aliases/package.json b/examples/path-aliases/package.json index fc5f658b184..2b6a803bad5 100644 --- a/examples/path-aliases/package.json +++ b/examples/path-aliases/package.json @@ -6,7 +6,7 @@ "dev": "npm run server:dev", "prod": "npm run build && npm run server:prod", "prod:static": "npm run build && npm run server:static", - "build": "vite build", + "build": "vike build", "server": "node ./server/index.js", "server:dev": "npm run server", "server:prod": "cross-env NODE_ENV=production npm run server", diff --git a/examples/react-full/package.json b/examples/react-full/package.json index 50d022b7bde..54748646f7f 100644 --- a/examples/react-full/package.json +++ b/examples/react-full/package.json @@ -1,8 +1,8 @@ { "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite build && vite preview" + "dev": "vike dev", + "build": "vike build", + "preview": "vike build && vike preview" }, "dependencies": { "@mdx-js/mdx": "^3.1.0", diff --git a/examples/react-minimal/package.json b/examples/react-minimal/package.json index 9d3adf0b84c..6aec30ba12f 100644 --- a/examples/react-minimal/package.json +++ b/examples/react-minimal/package.json @@ -1,8 +1,8 @@ { "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite build && vite preview" + "dev": "vike dev", + "build": "vike build", + "preview": "vike build && vike preview" }, "dependencies": { "@vitejs/plugin-react": "^4.3.4", diff --git a/examples/react-minimal/vite.config.js b/examples/react-minimal/vite.config.js index 243de2b67cf..f55c0544b80 100644 --- a/examples/react-minimal/vite.config.js +++ b/examples/react-minimal/vite.config.js @@ -1,6 +1,5 @@ import react from '@vitejs/plugin-react' -import vike from 'vike/plugin' export default { - plugins: [react(), vike()] + plugins: [react()] } diff --git a/examples/react-streaming/package.json b/examples/react-streaming/package.json index ace79e79727..cc69aa985ce 100644 --- a/examples/react-streaming/package.json +++ b/examples/react-streaming/package.json @@ -2,7 +2,7 @@ "scripts": { "dev": "npm run server:dev", "prod": "npm run build && npm run server:prod", - "build": "vite build", + "build": "vike build", "server:dev": "node ./server", "server:prod": "cross-env NODE_ENV=production node ./server" }, diff --git a/examples/render-modes/package.json b/examples/render-modes/package.json index d2588f07044..e116648fd55 100644 --- a/examples/render-modes/package.json +++ b/examples/render-modes/package.json @@ -2,7 +2,7 @@ "scripts": { "dev": "npm run server:dev", "prod": "npm run build && npm run server:prod", - "build": "vite build", + "build": "vike build", "server:dev": "node ./server", "server:prod": "cross-env NODE_ENV=production node ./server" }, diff --git a/examples/telefunc/package.json b/examples/telefunc/package.json index 561be7a6645..fdf900c8599 100644 --- a/examples/telefunc/package.json +++ b/examples/telefunc/package.json @@ -2,7 +2,7 @@ "scripts": { "dev": "npm run server:dev", "prod": "npm run build && npm run server:prod", - "build": "vite build", + "build": "vike build", "server:dev": "node ./server", "server:prod": "cross-env NODE_ENV=production node ./server" }, diff --git a/examples/vue-full/package.json b/examples/vue-full/package.json index 2d50524c0b2..5f976b78673 100644 --- a/examples/vue-full/package.json +++ b/examples/vue-full/package.json @@ -1,8 +1,8 @@ { "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite build && vite preview" + "dev": "vike dev", + "build": "vike build", + "preview": "vike build && vike preview" }, "dependencies": { "@types/node": "^20.13.0", diff --git a/examples/vue-minimal/package.json b/examples/vue-minimal/package.json index e838676a382..e56a11023db 100644 --- a/examples/vue-minimal/package.json +++ b/examples/vue-minimal/package.json @@ -1,8 +1,8 @@ { "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite build && vite preview" + "dev": "vike dev", + "build": "vike build", + "preview": "vike build && vike preview" }, "dependencies": { "@vitejs/plugin-vue": "^5.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c99ad892a29..5e76ca178b6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -232,7 +232,7 @@ importers: dependencies: '@brillout/docpress': specifier: ^0.10.17 - version: 0.10.17(@algolia/client-search@4.24.0)(@types/node@22.10.2)(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(acorn@8.12.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.27.3)(search-insights@2.17.3)(typescript@5.7.2)(vike@vike)(vite@6.0.6(@types/node@22.10.2)(terser@5.31.0)(tsx@4.19.2)) + version: 0.10.17(@algolia/client-search@4.24.0)(@types/node@22.10.2)(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.27.3)(search-insights@2.17.3)(typescript@5.7.2)(vike@vike)(vite@6.0.6(@types/node@22.10.2)(terser@5.31.0)(tsx@4.19.2)) '@types/node': specifier: ^22.10.2 version: 22.10.2 @@ -1695,6 +1695,9 @@ importers: fast-glob: specifier: ^3.0.0 version: 3.3.2 + json5: + specifier: ^2.0.0 + version: 2.2.3 semver: specifier: ^7.0.0 version: 7.6.2 @@ -7938,14 +7941,14 @@ snapshots: '@biomejs/cli-win32-x64@1.9.4': optional: true - '@brillout/docpress@0.10.17(@algolia/client-search@4.24.0)(@types/node@22.10.2)(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(acorn@8.12.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.27.3)(search-insights@2.17.3)(typescript@5.7.2)(vike@vike)(vite@6.0.6(@types/node@22.10.2)(terser@5.31.0)(tsx@4.19.2))': + '@brillout/docpress@0.10.17(@algolia/client-search@4.24.0)(@types/node@22.10.2)(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.27.3)(search-insights@2.17.3)(typescript@5.7.2)(vike@vike)(vite@6.0.6(@types/node@22.10.2)(terser@5.31.0)(tsx@4.19.2))': dependencies: '@brillout/picocolors': 1.0.15 '@docsearch/css': 3.8.0 '@docsearch/react': 3.6.1(@algolia/client-search@4.24.0)(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(search-insights@2.17.3) '@mdx-js/mdx': 3.0.1 '@mdx-js/react': 3.0.1(@types/react@19.0.2)(react@19.0.0) - '@mdx-js/rollup': 3.0.1(acorn@8.12.1)(rollup@4.27.3) + '@mdx-js/rollup': 3.0.1(rollup@4.27.3) '@shikijs/transformers': 1.2.0 '@types/node': 22.10.2 '@types/react': 19.0.2 @@ -8665,36 +8668,6 @@ snapshots: - acorn - supports-color - '@mdx-js/mdx@3.1.0(acorn@8.12.1)': - dependencies: - '@types/estree': 1.0.6 - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdx': 2.0.13 - collapse-white-space: 2.1.0 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - estree-util-scope: 1.0.0 - estree-walker: 3.0.3 - hast-util-to-jsx-runtime: 2.3.0 - markdown-extensions: 2.0.0 - recma-build-jsx: 1.0.0 - recma-jsx: 1.0.0(acorn@8.12.1) - recma-stringify: 1.0.0 - rehype-recma: 1.0.0 - remark-mdx: 3.0.1 - remark-parse: 11.0.0 - remark-rehype: 11.1.0 - source-map: 0.7.4 - unified: 11.0.4 - unist-util-position-from-estree: 2.0.0 - unist-util-stringify-position: 4.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.1 - transitivePeerDependencies: - - acorn - - supports-color - '@mdx-js/react@3.0.1(@types/react@19.0.2)(react@19.0.0)': dependencies: '@types/mdx': 2.0.13 @@ -8707,9 +8680,9 @@ snapshots: '@types/react': 19.0.1 react: 19.0.0 - '@mdx-js/rollup@3.0.1(acorn@8.12.1)(rollup@4.27.3)': + '@mdx-js/rollup@3.0.1(rollup@4.27.3)': dependencies: - '@mdx-js/mdx': 3.1.0(acorn@8.12.1) + '@mdx-js/mdx': 3.1.0(acorn@8.11.3) '@rollup/pluginutils': 5.1.4(rollup@4.27.3) rollup: 4.27.3 source-map: 0.7.4 @@ -9972,10 +9945,6 @@ snapshots: dependencies: acorn: 8.11.3 - acorn-jsx@5.3.2(acorn@8.12.1): - dependencies: - acorn: 8.12.1 - acorn-walk@8.3.2: {} acorn@8.11.3: {} @@ -12643,16 +12612,6 @@ snapshots: transitivePeerDependencies: - acorn - recma-jsx@1.0.0(acorn@8.12.1): - dependencies: - acorn-jsx: 5.3.2(acorn@8.12.1) - estree-util-to-js: 2.0.0 - recma-parse: 1.0.0 - recma-stringify: 1.0.0 - unified: 11.0.4 - transitivePeerDependencies: - - acorn - recma-parse@1.0.0: dependencies: '@types/estree': 1.0.6 diff --git a/test-deprecated-design/base-url/package.json b/test-deprecated-design/base-url/package.json index 9d3adf0b84c..cf27614f8af 100644 --- a/test-deprecated-design/base-url/package.json +++ b/test-deprecated-design/base-url/package.json @@ -1,6 +1,6 @@ { "scripts": { - "dev": "vite", + "dev": "vite dev", "build": "vite build", "preview": "vite build && vite preview" }, diff --git a/test-deprecated-design/cloudflare-workers-react/package.json b/test-deprecated-design/cloudflare-workers-react/package.json index 8c5ba6a4c69..78b12cf1bd9 100644 --- a/test-deprecated-design/cloudflare-workers-react/package.json +++ b/test-deprecated-design/cloudflare-workers-react/package.json @@ -1,6 +1,6 @@ { "scripts": { - "dev": "vite", + "dev": "vite dev", "preview": "vite build && wrangler dev", "deploy": "vite build && wrangler publish" }, diff --git a/test-deprecated-design/cloudflare-workers-vue/package.json b/test-deprecated-design/cloudflare-workers-vue/package.json index 4511c7f4f8c..5cde034bf96 100644 --- a/test-deprecated-design/cloudflare-workers-vue/package.json +++ b/test-deprecated-design/cloudflare-workers-vue/package.json @@ -1,6 +1,6 @@ { "scripts": { - "dev": "vite", + "dev": "vite dev", "preview": "vite build && wrangler dev", "deploy": "vite build && wrangler publish" }, diff --git a/test-deprecated-design/file-structure-domain-driven/package.json b/test-deprecated-design/file-structure-domain-driven/package.json index 9d3adf0b84c..cf27614f8af 100644 --- a/test-deprecated-design/file-structure-domain-driven/package.json +++ b/test-deprecated-design/file-structure-domain-driven/package.json @@ -1,6 +1,6 @@ { "scripts": { - "dev": "vite", + "dev": "vite dev", "build": "vite build", "preview": "vite build && vite preview" }, diff --git a/test-deprecated-design/i18n/package.json b/test-deprecated-design/i18n/package.json index bfaee7ae2a6..aa75ee15a1d 100644 --- a/test-deprecated-design/i18n/package.json +++ b/test-deprecated-design/i18n/package.json @@ -1,6 +1,6 @@ { "scripts": { - "dev": "vite", + "dev": "vite dev", "build": "vite build", "preview": "vite build && vite preview" }, diff --git a/test-deprecated-design/react/package.json b/test-deprecated-design/react/package.json index 9d3adf0b84c..cf27614f8af 100644 --- a/test-deprecated-design/react/package.json +++ b/test-deprecated-design/react/package.json @@ -1,6 +1,6 @@ { "scripts": { - "dev": "vite", + "dev": "vite dev", "build": "vite build", "preview": "vite build && vite preview" }, diff --git a/test-deprecated-design/render-modes/package.json b/test-deprecated-design/render-modes/package.json index 9d3adf0b84c..cf27614f8af 100644 --- a/test-deprecated-design/render-modes/package.json +++ b/test-deprecated-design/render-modes/package.json @@ -1,6 +1,6 @@ { "scripts": { - "dev": "vite", + "dev": "vite dev", "build": "vite build", "preview": "vite build && vite preview" }, diff --git a/test-deprecated-design/vue-full/package.json b/test-deprecated-design/vue-full/package.json index a532d1743a1..1517d8520c8 100644 --- a/test-deprecated-design/vue-full/package.json +++ b/test-deprecated-design/vue-full/package.json @@ -1,6 +1,6 @@ { "scripts": { - "dev": "vite", + "dev": "vite dev", "build": "vite build", "preview": "vite build && vite preview" }, diff --git a/test-deprecated-design/vue/package.json b/test-deprecated-design/vue/package.json index e838676a382..bd2c2a7eb3f 100644 --- a/test-deprecated-design/vue/package.json +++ b/test-deprecated-design/vue/package.json @@ -1,6 +1,6 @@ { "scripts": { - "dev": "vite", + "dev": "vite dev", "build": "vite build", "preview": "vite build && vite preview" }, diff --git a/test-e2e.config.mjs b/test-e2e.config.mjs index 7f0634d1aca..31b645bbe8f 100644 --- a/test-e2e.config.mjs +++ b/test-e2e.config.mjs @@ -53,6 +53,7 @@ function tolerateError({ logSource, logText }) { return ( // TODO/eventually: move everything to this array [ + "Vite's CLI is deprecated", // Error: [DocPress][Warning] prop `text` is deprecated 'prop `text` is deprecated', diff --git a/test/abort/package.json b/test/abort/package.json index f8f2a9f51d0..f6caa014dce 100644 --- a/test/abort/package.json +++ b/test/abort/package.json @@ -1,10 +1,10 @@ { "scripts": { - "dev": "vite", + "dev": "vike dev", "dev:server": "node server/", - "build": "vite build", - "preview": "vite build && vite preview", - "preview:server": "vite build && node server/" + "build": "vike build", + "preview": "vike build && vike preview", + "preview:server": "vike build && node server/" }, "dependencies": { "@types/react": "^18.2.15", diff --git a/test/assertFileEnv/package.json b/test/assertFileEnv/package.json index b9d0f94562d..f3442b129ce 100644 --- a/test/assertFileEnv/package.json +++ b/test/assertFileEnv/package.json @@ -1,7 +1,7 @@ { "scripts": { - "dev": "vite", - "build": "vite build" + "dev": "vike dev", + "build": "vike build" }, "dependencies": { "@types/react": "^18.0.8", diff --git a/test/cjs/package.json b/test/cjs/package.json index 6d5bb83e128..93875282288 100644 --- a/test/cjs/package.json +++ b/test/cjs/package.json @@ -2,7 +2,7 @@ "scripts": { "dev": "pnpm run server:dev", "prod": "pnpm run build && pnpm run server:prod", - "build": "vite build", + "build": "vike build", "server:dev": "node ./server", "server:prod": "cross-env NODE_ENV=production node ./server" }, diff --git a/test/disableAutoImporter/package.json b/test/disableAutoImporter/package.json index 9d3adf0b84c..6aec30ba12f 100644 --- a/test/disableAutoImporter/package.json +++ b/test/disableAutoImporter/package.json @@ -1,8 +1,8 @@ { "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite build && vite preview" + "dev": "vike dev", + "build": "vike build", + "preview": "vike build && vike preview" }, "dependencies": { "@vitejs/plugin-react": "^4.3.4", diff --git a/test/env/package.json b/test/env/package.json index 5fe054a72eb..e4382788658 100644 --- a/test/env/package.json +++ b/test/env/package.json @@ -1,7 +1,7 @@ { "scripts": { - "dev": "vite", - "build": "vite build" + "dev": "vike dev", + "build": "vike build" }, "dependencies": { "@vitejs/plugin-react": "^4.3.4", diff --git a/test/hook-override/package.json b/test/hook-override/package.json index 3beed045080..594eb92049e 100644 --- a/test/hook-override/package.json +++ b/test/hook-override/package.json @@ -1,8 +1,8 @@ { "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite build && vite preview" + "dev": "vike dev", + "build": "vike build", + "preview": "vike build && vike preview" }, "dependencies": { "@types/react": "^18.2.15", diff --git a/test/includeAssetsImportedByServer/package.json b/test/includeAssetsImportedByServer/package.json index 81c6bcac8a0..2d0fe9d1f3e 100644 --- a/test/includeAssetsImportedByServer/package.json +++ b/test/includeAssetsImportedByServer/package.json @@ -1,8 +1,8 @@ { "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite build && vite preview" + "dev": "vike dev", + "build": "vike build", + "preview": "vike build && vike preview" }, "dependencies": { "vite": "^6.0.5", diff --git a/test/middleware-config/package.json b/test/middleware-config/package.json index b14ab9ae20a..37f730d039e 100644 --- a/test/middleware-config/package.json +++ b/test/middleware-config/package.json @@ -1,7 +1,7 @@ { "scripts": { "dev": "tsx ./express-entry.ts", - "build": "vite build", + "build": "vike build", "preview": "cross-env NODE_ENV=production tsx ./express-entry.ts" }, "dependencies": { diff --git a/test/playground/package.json b/test/playground/package.json index 000f4da6a7b..ade7e0986a1 100644 --- a/test/playground/package.json +++ b/test/playground/package.json @@ -1,8 +1,8 @@ { "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite build && vite preview" + "dev": "vike dev", + "build": "vike build", + "preview": "vike build && vike preview" }, "dependencies": { "@types/react": "^18.2.45", diff --git a/test/require-shim/package.json b/test/require-shim/package.json index f687af78e58..c6f378e2253 100644 --- a/test/require-shim/package.json +++ b/test/require-shim/package.json @@ -1,7 +1,7 @@ { "scripts": { "prod": "pnpm run build && pnpm run server", - "build": "vite build", + "build": "vike build", "server": "cross-env NODE_ENV=production node ./server" }, "dependencies": { diff --git a/test/stream-vue-onServerPrefetch/package.json b/test/stream-vue-onServerPrefetch/package.json index 6423f6f9810..d6e6efb339b 100644 --- a/test/stream-vue-onServerPrefetch/package.json +++ b/test/stream-vue-onServerPrefetch/package.json @@ -1,7 +1,7 @@ { "scripts": { - "dev": "vite", - "preview": "vite build && vite preview" + "dev": "vike dev", + "preview": "vike build && vike preview" }, "dependencies": { "@vitejs/plugin-vue": "^5.2.1", diff --git a/test/vike-react/package.json b/test/vike-react/package.json index 1f1eefcdce4..6b593a3966c 100644 --- a/test/vike-react/package.json +++ b/test/vike-react/package.json @@ -1,8 +1,8 @@ { "scripts": { - "dev": "vite dev", - "build": "vite build", - "preview": "vite build && vite preview" + "dev": "vike dev", + "build": "vike build", + "preview": "vike build && vike preview" }, "dependencies": { "@types/react": "^19.0.1", diff --git a/test/vike-vue/package.json b/test/vike-vue/package.json index fe96faf7561..49b97d75271 100644 --- a/test/vike-vue/package.json +++ b/test/vike-vue/package.json @@ -1,8 +1,8 @@ { "scripts": { - "dev": "vite dev", - "build": "vite build", - "preview": "vite build && vite preview" + "dev": "vike dev", + "build": "vike build", + "preview": "vike build && vike preview" }, "dependencies": { "@types/node": "^22.1.0", diff --git a/test/webpack/package.json b/test/webpack/package.json index 32353d4e8b3..345204c42c9 100644 --- a/test/webpack/package.json +++ b/test/webpack/package.json @@ -1,8 +1,8 @@ { "scripts": { - "dev": "vite", + "dev": "vike dev", "build": "npm run build:vite && npm run build:webpack", - "build:vite": "vite build", + "build:vite": "vike build", "build:webpack": "cp server/main.mjs dist/server/main.mjs && webpack -c ./webpack.config.js && rimraf dist/server", "server:prod": "node dist/main.mjs", "preview": "npm run build && npm run server:prod" diff --git a/vike/api.js b/vike/api.js new file mode 100644 index 00000000000..3723713024b --- /dev/null +++ b/vike/api.js @@ -0,0 +1,3 @@ +// Some tools still need this as of January 2025 +export * from './dist/esm/node/api/index.js' +export { default } from './dist/esm/node/api/index.js' diff --git a/vike/node/api/APIOptions.ts b/vike/node/api/APIOptions.ts new file mode 100644 index 00000000000..47beb724528 --- /dev/null +++ b/vike/node/api/APIOptions.ts @@ -0,0 +1,12 @@ +export { APIOptions } + +import type { InlineConfig } from 'vite' + +type APIOptions = { + /** + * Vite config. + * + * https://vike.dev/api + */ + viteConfig?: InlineConfig +} diff --git a/vike/node/api/build.ts b/vike/node/api/build.ts new file mode 100644 index 00000000000..e33e7d81a54 --- /dev/null +++ b/vike/node/api/build.ts @@ -0,0 +1,33 @@ +export { build } + +import { enhanceViteConfig } from './enhanceViteConfig.js' +import { build as buildVite, type InlineConfig } from 'vite' +import type { APIOptions } from './APIOptions.js' + +async function build(options: APIOptions = {}) { + const { viteConfigEnhanced, configVike } = await enhanceViteConfig(options.viteConfig, 'build') + + // Build client-side + const outputClient = await buildVite(viteConfigEnhanced) + + // Build server-side + const outputServer = await buildVite(setSSR(viteConfigEnhanced)) + + // Pre-render + if (configVike.prerender && !configVike.prerender.disableAutoRun && configVike.disableAutoFullBuild !== 'prerender') { + const { runPrerenderFromAutoRun } = await import('../prerender/runPrerender.js') + await runPrerenderFromAutoRun(viteConfigEnhanced, true) + } + + return { outputClient, outputServer } +} + +function setSSR(viteConfig: InlineConfig): InlineConfig { + return { + ...viteConfig, + build: { + ...viteConfig.build, + ssr: true + } + } +} diff --git a/vike/node/api/dev.ts b/vike/node/api/dev.ts new file mode 100644 index 00000000000..f0315298f3d --- /dev/null +++ b/vike/node/api/dev.ts @@ -0,0 +1,11 @@ +export { dev } + +import { enhanceViteConfig } from './enhanceViteConfig.js' +import { createServer } from 'vite' +import type { APIOptions } from './APIOptions.js' + +async function dev(options: APIOptions = {}) { + const { viteConfigEnhanced } = await enhanceViteConfig(options.viteConfig, 'dev') + const server = await createServer(viteConfigEnhanced) + return server +} diff --git a/vike/node/api/enhanceViteConfig.ts b/vike/node/api/enhanceViteConfig.ts new file mode 100644 index 00000000000..36f70af3623 --- /dev/null +++ b/vike/node/api/enhanceViteConfig.ts @@ -0,0 +1,41 @@ +export { enhanceViteConfig } + +import type { InlineConfig } from 'vite' +import { resolveConfig } from 'vite' +import { getConfigVike } from '../shared/getConfigVike.js' +import { pluginName } from '../plugin/plugins/commonConfig/pluginName.js' + +async function enhanceViteConfig(viteConfig: InlineConfig = {}, command: 'build' | 'dev' | 'preview' | 'prerender') { + let viteConfigResolved = await resolveViteConfig(viteConfig, command) + let viteConfigEnhanced = viteConfig + + // Add vike to plugins if not present + if (!viteConfigResolved.plugins.some((p) => p.name === pluginName)) { + // Using a dynamic import because the script calling the Vike API may not live in the same place as vite.config.js, thus have vike/plugin may resolved to two different node_modules/vike directories + const { plugin: vikePlugin } = await import('../plugin/index.js') + viteConfigEnhanced = { + ...viteConfig, + plugins: [...(viteConfig.plugins ?? []), vikePlugin()] + } + viteConfigResolved = await resolveViteConfig(viteConfigEnhanced, command) + } + + const configVike = await getConfigVike(viteConfigResolved) + + // TODO: enable Vike extensions to add Vite plugins + + return { + viteConfigEnhanced, + configVike + } +} + +async function resolveViteConfig(viteConfig: InlineConfig, command: 'build' | 'dev' | 'preview' | 'prerender') { + return await resolveConfig( + viteConfig, + command === 'build' || command === 'prerender' ? 'build' : 'serve', + 'custom', + command === 'dev' ? 'development' : 'production', + command === 'preview' + ) +} diff --git a/vike/node/api/index.ts b/vike/node/api/index.ts new file mode 100644 index 00000000000..8dd0b900481 --- /dev/null +++ b/vike/node/api/index.ts @@ -0,0 +1,16 @@ +export { build_ as build } +export { dev_ as dev } +export { preview_ as preview } +export { prerender_ as prerender } + +import type { build } from './build.js' +import type { dev } from './dev.js' +import type { preview } from './preview.js' +import type { prerender } from './prerender.js' +import { assertIsNotBrowser } from '../../utils/assertIsNotBrowser.js' +assertIsNotBrowser() + +const build_: typeof build = async (...args) => (await import('./build.js')).build(...args) +const dev_: typeof dev = async (...args) => (await import('./dev.js')).dev(...args) +const preview_: typeof preview = async (...args) => (await import('./preview.js')).preview(...args) +const prerender_: typeof prerender = async (...args) => (await import('./prerender.js')).prerender(...args) diff --git a/vike/node/api/prerender.ts b/vike/node/api/prerender.ts new file mode 100644 index 00000000000..4b3bf95d177 --- /dev/null +++ b/vike/node/api/prerender.ts @@ -0,0 +1,10 @@ +export { prerender } + +import { runPrerenderFromAPI, type PrerenderOptions } from '../prerender/runPrerender.js' +import { enhanceViteConfig } from './enhanceViteConfig.js' + +async function prerender(options: PrerenderOptions = {}) { + const { viteConfigEnhanced } = await enhanceViteConfig(options.viteConfig, 'prerender') + options.viteConfig = viteConfigEnhanced + await runPrerenderFromAPI(options) +} diff --git a/vike/node/api/preview.ts b/vike/node/api/preview.ts new file mode 100644 index 00000000000..1f457079608 --- /dev/null +++ b/vike/node/api/preview.ts @@ -0,0 +1,11 @@ +export { preview } + +import { enhanceViteConfig } from './enhanceViteConfig.js' +import { preview as previewVite } from 'vite' +import type { APIOptions } from './APIOptions.js' + +async function preview(options: APIOptions = {}) { + const { viteConfigEnhanced } = await enhanceViteConfig(options.viteConfig, 'preview') + const server = await previewVite(viteConfigEnhanced) + return server +} diff --git a/vike/node/cli/bin-entry.js b/vike/node/cli/bin-entry.js deleted file mode 100755 index 85018024cf3..00000000000 --- a/vike/node/cli/bin-entry.js +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env node - -import '../../dist/esm/node/cli/bin.js' diff --git a/vike/node/cli/bin.js b/vike/node/cli/bin.js new file mode 100755 index 00000000000..ad82cb2b791 --- /dev/null +++ b/vike/node/cli/bin.js @@ -0,0 +1,3 @@ +#!/usr/bin/env node + +import '../../dist/esm/node/cli/entry.js' diff --git a/vike/node/cli/bin.ts b/vike/node/cli/bin.ts deleted file mode 100644 index f378af4ffcb..00000000000 --- a/vike/node/cli/bin.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { cac } from 'cac' -import { resolve } from 'path' -import { runPrerenderFromCLI, runPrerender_forceExit } from '../prerender/runPrerender.js' -import { projectInfo, assertUsage, assertWarning } from './utils.js' -import pc from '@brillout/picocolors' - -const cli = cac(projectInfo.projectName) - -cli - .command('prerender', 'Pre-render the HTML of your pages', { allowUnknownOptions: true }) - .option('--configFile ', '[string] Path to vite.config.js') - .action(async (options) => { - assertOptions() - const { partial, noExtraDir, base, parallel, outDir, configFile } = options - const root = options.root && resolve(options.root) - await runPrerenderFromCLI({ partial, noExtraDir, base, root, parallel, outDir, configFile }) - runPrerender_forceExit() - }) - -function assertOptions() { - // Using process.argv because cac convert names to camelCase - const rawOptions = process.argv.slice(3) - Object.values(rawOptions).forEach((option) => { - assertUsage( - !option.startsWith('--') || - [ - '--root', - '--partial', - '--noExtraDir', - '--clientRouter', - '--base', - '--parallel', - '--outDir', - '--configFile' - ].includes(option), - 'Unknown option: ' + option - ) - assertWarning( - false, - `You set ${pc.cyan(option)}, but passing options to ${pc.cyan( - '$ vike prerender' - )} is deprecated: use the config file instead. See https://vike.dev/command-prerender.`, - { onlyOnce: true } - ) - }) -} - -// Listen to unknown commands -cli.on('command:*', () => { - assertUsage(false, 'Unknown command: ' + cli.args.join(' ')) -}) - -cli.help() -cli.version(projectInfo.projectVersion) - -cli.parse(process.argv.length === 2 ? [...process.argv, '--help'] : process.argv) - -process.on('unhandledRejection', (rejectValue) => { - throw rejectValue -}) diff --git a/vike/node/cli/entry.ts b/vike/node/cli/entry.ts new file mode 100644 index 00000000000..590f29c32d7 --- /dev/null +++ b/vike/node/cli/entry.ts @@ -0,0 +1,80 @@ +import { projectInfo } from './utils.js' +import { dev, build, preview } from '../api/index.js' +import pc from '@brillout/picocolors' +import { parseCli } from './parseCli.js' + +cli() + +async function cli() { + const { command } = parseCli() + if (command === 'dev') { + await cmdDev() + } else if (command === 'build') { + await cmdBuild() + } else if (command === 'preview') { + await cmdPreview() + } else if (command === 'prerender') { + await cmdPrerender() + } +} + +async function cmdDev() { + const startTime = performance.now() + try { + const server = await dev() + + await server.listen() + const info = server.config.logger.info + const startupDurationString = pc.dim( + `ready in ${pc.reset(pc.bold(String(Math.ceil(performance.now() - startTime))))} ms` + ) + const hasExistingLogs = process.stdout.bytesWritten > 0 || process.stderr.bytesWritten > 0 + info( + ` ${pc.yellow(`${pc.bold(projectInfo.projectName)} v${projectInfo.projectVersion}`)} ${startupDurationString}\n`, + { + clear: !hasExistingLogs + } + ) + + server.printUrls() + server.bindCLIShortcuts({ print: true }) + } catch (err) { + console.error(pc.red(`Error while starting dev server:`)) + // Error comes from Vite; no need to use logErrorHint() + console.error(err) + process.exit(1) + } +} + +async function cmdBuild() { + try { + await build() + } catch (err) { + console.error(pc.red(`Error during build:`)) + // Error comes from Vite; no need to use logErrorHint() + console.error(err) + process.exit(1) + } +} + +async function cmdPreview() { + try { + const server = await preview() + server.printUrls() + server.bindCLIShortcuts({ print: true }) + } catch (err) { + console.error(pc.red(`Error while starting preview server:`)) + // Error comes from Vite; no need to use logErrorHint() + console.error(err) + process.exit(1) + } +} + +async function cmdPrerender() { + const { runPrerenderFromCLIPrerenderCommand } = await import('../prerender/runPrerender.js') + await runPrerenderFromCLIPrerenderCommand() +} + +process.on('unhandledRejection', (rejectValue) => { + throw rejectValue +}) diff --git a/vike/node/cli/index.ts b/vike/node/cli/index.ts index 006a344b8bf..12c9192ab56 100644 --- a/vike/node/cli/index.ts +++ b/vike/node/cli/index.ts @@ -1,12 +1,13 @@ // TODO/v1-release: remove this file -import { prerender as prerenderOriginal } from '../prerender/index.js' -import { assertWarning } from './utils.js' -export const prerender: typeof prerenderOriginal = (options) => { - assertWarning( - false, - "`import { prerender } from 'vike/cli'` is deprecated in favor of `import { prerender } from 'vike/prerender'``", - { onlyOnce: true, showStackTrace: true } - ) - return prerenderOriginal(options) -} +export { prerender } from '../api/prerender.js' + +import { assertWarning } from '../../utils/assert.js' +import pc from '@brillout/picocolors' +assertWarning( + false, + `${pc.cyan("import { prerender } from 'vike/cli'")} is deprecated in favor of ${pc.cyan( + "import { prerender } from 'vike/api'" + )}`, + { onlyOnce: true } +) diff --git a/vike/node/cli/parseCli.ts b/vike/node/cli/parseCli.ts new file mode 100644 index 00000000000..f4b00da9c0c --- /dev/null +++ b/vike/node/cli/parseCli.ts @@ -0,0 +1,75 @@ +export { parseCli } + +import pc from '@brillout/picocolors' +import { projectInfo, includes } from './utils.js' + +const commands = [ + { name: 'dev', desc: 'Start development server' }, + { name: 'build', desc: 'Build for production' }, + { name: 'preview', desc: 'Start preview server using production build' }, + { name: 'prerender', desc: 'Pre-render pages' } +] as const + +function parseCli() { + const command = (() => { + const firstArg = process.argv[2] + if (!firstArg) { + showHelp() + } + showHelpOrVersion(firstArg) + if ( + includes( + commands.map((c) => c.name), + firstArg + ) + ) + return firstArg + wrongUsage(`Unknown command ${pc.bold(firstArg)}`) + })() + + for (const arg of process.argv.slice(3)) { + showHelpOrVersion(arg) + wrongUsage(`Unknown option ${pc.bold(arg)}`) + } + + return { command } +} + +function showHelp(): never { + const TAB = ' '.repeat(3) + const nameMaxLength = Math.max(...commands.map((c) => c.name.length)) + console.log( + [ + `vike@${projectInfo.projectVersion}`, + '', + 'Usage:', + ...[...commands, { name: '-v', desc: "Print Vike's installed version" }].map( + (c) => + ` ${pc.dim('$')} ${pc.bold(`vike ${c.name}`)}${' '.repeat(nameMaxLength - c.name.length)}${TAB}${pc.dim(`# ${c.desc}`)}` + ), + '', + `More infos at ${pc.underline('https://vike.dev/cli')}` + ].join('\n') + ) + process.exit(1) +} + +function showHelpOrVersion(arg: string) { + if (arg === '--version' || arg === '-v' || arg === '--v') { + showVersion() + } + if (arg === '--help' || arg === '-h' || arg === '--h') { + showHelp() + } +} + +function showVersion(): never { + console.log(projectInfo.projectVersion) + process.exit(1) +} + +function wrongUsage(msg: string): never { + console.error(pc.red(msg)) + console.log() + showHelp() +} diff --git a/vike/node/cli/utils.ts b/vike/node/cli/utils.ts index f9df8c1d537..c90d91532a6 100644 --- a/vike/node/cli/utils.ts +++ b/vike/node/cli/utils.ts @@ -6,3 +6,4 @@ onLoad() export * from '../../utils/assert.js' export * from '../../utils/projectInfo.js' +export * from '../../utils/includes.js' diff --git a/vike/node/plugin/plugins/autoFullBuild.ts b/vike/node/plugin/plugins/autoFullBuild.ts index ffd4d656345..5533faab415 100644 --- a/vike/node/plugin/plugins/autoFullBuild.ts +++ b/vike/node/plugin/plugins/autoFullBuild.ts @@ -1,9 +1,11 @@ +// TODO/v1-release: remove this file + export { autoFullBuild } import { build } from 'vite' import type { InlineConfig, Plugin, ResolvedConfig } from 'vite' import { assertWarning } from '../utils.js' -import { runPrerenderFromAutoFullBuild, runPrerender_forceExit } from '../../prerender/runPrerender.js' +import { runPrerenderFromAutoRun, runPrerender_forceExit } from '../../prerender/runPrerender.js' import { getConfigVike } from '../../shared/getConfigVike.js' import type { ConfigVikeResolved } from '../../../shared/ConfigVike.js' import { isViteCliCall, getViteConfigFromCli } from '../shared/isViteCliCall.js' @@ -13,6 +15,10 @@ import { manifestTempFile } from './buildConfig.js' let forceExit = false +assertWarning(!isViteCliCall(), `Vite's CLI is deprecated ${pc.underline('https://vike.dev/migration/cli')}`, { + onlyOnce: true +}) + function autoFullBuild(): Plugin[] { let config: ResolvedConfig let configVike: ConfigVikeResolved @@ -97,7 +103,7 @@ async function triggerFullBuild( } if (configVike.prerender && !configVike.prerender.disableAutoRun && configVike.disableAutoFullBuild !== 'prerender') { - await runPrerenderFromAutoFullBuild({ viteConfig: configInline }) + await runPrerenderFromAutoRun(configInline, false) forceExit = true } } @@ -120,10 +126,6 @@ function abortViteBuildSsr(configVike: ConfigVikeResolved) { function isDisabled(configVike: ConfigVikeResolved): boolean { const { disableAutoFullBuild } = configVike if (disableAutoFullBuild === null || disableAutoFullBuild === 'prerender') { - // TODO/v1-release: remove autoFullBuild for both Vite's build() API and Vite's CLI - // - Tell users to use `$ vike build` instead of `$ vite build` - // - Remove the whole writeBundle() hook logic - // - make `$ vite build` only build the client-side return !isViteCliCall() } else { return disableAutoFullBuild diff --git a/vike/node/plugin/plugins/buildConfig.ts b/vike/node/plugin/plugins/buildConfig.ts index e82a1728cde..798edccbccf 100644 --- a/vike/node/plugin/plugins/buildConfig.ts +++ b/vike/node/plugin/plugins/buildConfig.ts @@ -79,16 +79,19 @@ function buildConfig(): Plugin[] { } } }, - config(config) { - assertNodeEnv_build() - isSsrBuild = viteIsSSR(config) - return { - build: { - outDir: resolveOutDir(config), - manifest: manifestTempFile, - copyPublicDir: !isSsrBuild - } - } satisfies UserConfig + config: { + order: 'post', + handler(config) { + assertNodeEnv_build() + isSsrBuild = viteIsSSR(config) + return { + build: { + outDir: resolveOutDir(config), + manifest: manifestTempFile, + copyPublicDir: !isSsrBuild + } + } satisfies UserConfig + } }, buildStart() { assertNodeEnv_build() diff --git a/vike/node/plugin/plugins/commonConfig.ts b/vike/node/plugin/plugins/commonConfig.ts index 666cfad6263..ded0d00071a 100644 --- a/vike/node/plugin/plugins/commonConfig.ts +++ b/vike/node/plugin/plugins/commonConfig.ts @@ -1,13 +1,14 @@ export { commonConfig } -import type { Plugin, ResolvedConfig, UserConfig } from 'vite' +import { mergeConfig, type Plugin, type ResolvedConfig, type UserConfig } from 'vite' import { assert, assertUsage, assertWarning, findPackageJson, isDocker } from '../utils.js' import { assertRollupInput } from './buildConfig.js' import { installRequireShim_setUserRootDir } from '@brillout/require-shim' import pc from '@brillout/picocolors' import path from 'path' import { assertResolveAlias } from './commonConfig/assertResolveAlias.js' -const pluginName = 'vike:commonConfig-1' +import { pluginName } from './commonConfig/pluginName.js' +import { getEnvVarObject } from '../shared/getEnvVarObject.js' function commonConfig(): Plugin[] { return [ @@ -33,15 +34,22 @@ function commonConfig(): Plugin[] { assertEsm(config.root) } }, - // Override Vite's default port without overriding the user config: { order: 'post', handler(configFromUser) { - const configFromVike: UserConfig = { server: {}, preview: {} } + // Change default port + let configFromVike: UserConfig = { server: {}, preview: {} } setDefault('port', 3000, configFromUser, configFromVike) + + // Set `--host` for Docker/Podman if (isDocker()) { setDefault('host', true, configFromUser, configFromVike) } + + // VITE_CONFIG + const configFromEnvVar = getEnvVarObject('VITE_CONFIG') + if (configFromEnvVar) configFromVike = mergeConfig(configFromEnvVar, configFromVike) + return configFromVike } } @@ -49,6 +57,7 @@ function commonConfig(): Plugin[] { ] } +// Override Vite's default value without overriding user settings function setDefault( setting: Setting, value: NonNullable[Setting], diff --git a/vike/node/plugin/plugins/commonConfig/pluginName.ts b/vike/node/plugin/plugins/commonConfig/pluginName.ts new file mode 100644 index 00000000000..bcf23415510 --- /dev/null +++ b/vike/node/plugin/plugins/commonConfig/pluginName.ts @@ -0,0 +1 @@ +export const pluginName = 'vike:commonConfig-1' diff --git a/vike/node/plugin/plugins/extractAssetsPlugin.ts b/vike/node/plugin/plugins/extractAssetsPlugin.ts index 9ff04955247..adb2221cd2f 100644 --- a/vike/node/plugin/plugins/extractAssetsPlugin.ts +++ b/vike/node/plugin/plugins/extractAssetsPlugin.ts @@ -3,7 +3,7 @@ // Workaround to make client-side bundles include the CSS imports living in server-side-only code. // - This is needed for HTML-only pages, and React Server Components. -// - We recommend using the debug flag to get an idea of how this plugin works: `$ DEBUG=vike:extractAssets pnpm exec vite build`. Then have a look at `dist/client/manifest.json` and see how `.page.server.js` entries have zero JavaScript but only CSS. +// - We recommend using the debug flag to get an idea of how this plugin works: `$ DEBUG=vike:extractAssets pnpm exec vike build`. Then have a look at `dist/client/manifest.json` and see how `.page.server.js` entries have zero JavaScript but only CSS. // - This appraoch supports import path aliases `vite.config.js#resolve.alias` https://vitejs.dev/config/#resolve-alias export { extractAssetsPlugin } diff --git a/vike/node/plugin/plugins/previewConfig.ts b/vike/node/plugin/plugins/previewConfig.ts index e6288bd538c..994b3550ebf 100644 --- a/vike/node/plugin/plugins/previewConfig.ts +++ b/vike/node/plugin/plugins/previewConfig.ts @@ -55,9 +55,9 @@ function previewConfig(): Plugin { ;[outDirRoot, outDirClient, outDirServer].forEach((outDirAny) => { assertUsage( fs.existsSync(outDirAny), - `Cannot run ${pc.cyan('$ vite preview')}: your app isn't built (the build directory ${pc.cyan( + `Cannot run ${pc.cyan('$ vike preview')}: your app isn't built (the build directory ${pc.cyan( outDirAny - )} is missing). Make sure to run ${pc.cyan('$ vite build')} before running ${pc.cyan('$ vite preview')}.` + )} is missing). Make sure to run ${pc.cyan('$ vike build')} before running ${pc.cyan('$ vike preview')}.` ) }) } diff --git a/vike/node/plugin/shared/getEnvVarObject.ts b/vike/node/plugin/shared/getEnvVarObject.ts new file mode 100644 index 00000000000..21448c67f61 --- /dev/null +++ b/vike/node/plugin/shared/getEnvVarObject.ts @@ -0,0 +1,31 @@ +export { getEnvVarObject } + +import pc from '@brillout/picocolors' +import { assertUsage, isObject } from '../utils.js' +import JSON5 from 'json5' + +function getEnvVarObject( + envVarName: 'VITE_CONFIG' + /* Let's eventually implement this for Vike's config as well + | 'VIKE_CONFIG' + */ +): null | Record { + const valueStr = process.env[envVarName] + if (!valueStr) return null + let value: unknown + try { + value = JSON5.parse(valueStr) + } catch (err) { + console.error(err) + assertUsage( + false, + `Cannot parse ${envVarName} (see error above) because it's set to the following which isn't a valid JSON5 string: ${pc.bold(valueStr)}` + ) + } + assertUsage(value, `${envVarName} should define an object but it's ${pc.bold(String(value))} instead.`) + assertUsage( + isObject(value), + `${envVarName} should define an object but it's set to the following which isn't an object: ${pc.bold(valueStr)}` + ) + return value +} diff --git a/vike/node/prerender/index.ts b/vike/node/prerender/index.ts index c6d487dd5fe..93a450231f7 100644 --- a/vike/node/prerender/index.ts +++ b/vike/node/prerender/index.ts @@ -1 +1,13 @@ -export { runPrerenderFromAPI as prerender } from './runPrerender.js' +// TODO/v1-release: remove this file + +export { prerender } from '../api/prerender.js' + +import { assertWarning } from '../../utils/assert.js' +import pc from '@brillout/picocolors' +assertWarning( + false, + `${pc.cyan("import { prerender } from 'vike/prerender'")} is deprecated in favor of ${pc.cyan( + "import { prerender } from 'vike/api'" + )}`, + { onlyOnce: true } +) diff --git a/vike/node/prerender/runPrerender.ts b/vike/node/prerender/runPrerender.ts index 5b3a77975c5..72b563f873c 100644 --- a/vike/node/prerender/runPrerender.ts +++ b/vike/node/prerender/runPrerender.ts @@ -1,6 +1,6 @@ export { runPrerenderFromAPI } -export { runPrerenderFromCLI } -export { runPrerenderFromAutoFullBuild } +export { runPrerenderFromCLIPrerenderCommand } +export { runPrerenderFromAutoRun } export { runPrerender_forceExit } export type { PrerenderOptions } @@ -73,6 +73,8 @@ import type { HookTimeout } from '../../shared/hooks/getHook.js' import { logErrorHint } from '../runtime/renderPage/logErrorHint.js' import { executeHook, isUserHookError } from '../../shared/hooks/executeHook.js' import { getConfigValueBuildTime } from '../../shared/page-configs/getConfigValueBuildTime.js' +import type { APIOptions } from '../api/APIOptions.js' +import { enhanceViteConfig } from '../api/enhanceViteConfig.js' type HtmlFile = { urlOriginal: string @@ -120,28 +122,9 @@ type PageContext = PageContextInitEnhanced & { _pageContextAlreadyProvidedByOnPrerenderHook?: true } & PageContextUrlInternal -type PrerenderOptions = { +type PrerenderOptions = APIOptions & { /** Initial `pageContext` values */ pageContextInit?: Record - /** - * The Vite config. - * - * This is optional and, if omitted, then Vite will automatically load your `vite.config.js`. - * - * We recommend to either omit this option or set it to `prerender({ viteConfig: { root }})`: the `vite.config.js` file living at `root` will be loaded. - * - * Alternatively you can: - * - Set `prerender({ viteConfig: { configFile: './path/to/vite.config.js' }})`. - * - Not load any `vite.config.js` file and, instead, use `prerender({ viteConfig: { configFile: false, ...myViteConfig }})` to programmatically define the entire Vite config. - * - * You can also load a `vite.config.js` file while overriding parts of the Vite config. - * - * See https://vitejs.dev/guide/api-javascript.html#inlineconfig for more information. - * - * @default { root: process.cwd() } - * - */ - viteConfig?: InlineConfig /** @experimental Don't use without having talked to a vike maintainer. */ onPagePrerender?: Function @@ -170,27 +153,31 @@ async function runPrerenderFromAPI(options: PrerenderOptions = {}): Promise { +async function runPrerenderFromCLIPrerenderCommand(): Promise { try { - await runPrerender(options, '$ vike prerender') + const { viteConfigEnhanced } = await enhanceViteConfig(undefined, 'prerender') + await runPrerender({ viteConfig: viteConfigEnhanced }, '$ vike prerender') } catch (err) { console.error(err) + // Error may come from user-land; we need to use logErrorHint() logErrorHint(err) process.exit(1) } + runPrerender_forceExit() } -async function runPrerenderFromAutoFullBuild(options: PrerenderOptions): Promise { +async function runPrerenderFromAutoRun(viteConfig: InlineConfig, forceExit: boolean): Promise { try { - await runPrerender(options, null) + await runPrerender({ viteConfig }) } catch (err) { console.error(err) logErrorHint(err) process.exit(1) } + if (forceExit) runPrerender_forceExit() } async function runPrerender( - options: PrerenderOptions, - manuallyTriggered: null | '$ vike prerender' | 'prerender()' + options: PrerenderOptions = {}, + standaloneTrigger?: '$ vike prerender' | 'prerender()' ): Promise { checkOutdatedOptions(options) setGlobalContext_isPrerendering() @@ -213,10 +200,10 @@ async function runPrerender( const { root } = viteConfig const prerenderConfig = configVike.prerender if (!prerenderConfig) { - assert(manuallyTriggered) + assert(standaloneTrigger) assertWarning( prerenderConfig, - `You're executing ${pc.cyan(manuallyTriggered)} but the config ${pc.cyan('prerender')} isn't set to true`, + `You're executing ${pc.cyan(standaloneTrigger)} but the config ${pc.cyan('prerender')} isn't set to true`, { onlyOnce: true } diff --git a/vike/node/runtime/globalContext.ts b/vike/node/runtime/globalContext.ts index 28c1987e057..0d070d58b2c 100644 --- a/vike/node/runtime/globalContext.ts +++ b/vike/node/runtime/globalContext.ts @@ -304,7 +304,7 @@ function assertBuildEntries(buildEntries: T | null, isPreRendering: boolean): const errMsg = [ `You are tyring to run`, isPreRendering ? 'pre-rendering' : 'the server for production', - `but your app isn't built yet. Run ${pc.cyan('$ vite build')} before `, + `but your app isn't built yet. Run ${pc.cyan('$ vike build')} before `, isPreRendering ? 'pre-rendering.' : 'running the server.' ].join(' ') assertUsage(buildEntries, errMsg) diff --git a/vike/package.json b/vike/package.json index f0aa477dca1..c94fe595533 100644 --- a/vike/package.json +++ b/vike/package.json @@ -42,6 +42,12 @@ "types": "./dist/esm/node/cli/index.d.ts", "default": "./dist/esm/node/cli/index.js" }, + "./api": { + "require": "./dist/cjs/node/api/index.js", + "node": "./dist/esm/node/api/index.js", + "types": "./dist/esm/node/api/index.d.ts", + "default": "./dist/esm/node/api/index.js" + }, "./prerender": { "require": "./dist/cjs/node/prerender/index.js", "node": "./dist/esm/node/prerender/index.js", @@ -131,6 +137,7 @@ "es-module-lexer": "^1.0.0", "esbuild": "^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0", "fast-glob": "^3.0.0", + "json5": "^2.0.0", "semver": "^7.0.0", "source-map-support": "^0.5.0" }, @@ -176,6 +183,9 @@ "cli": [ "./dist/esm/node/cli/index.d.ts" ], + "api": [ + "./dist/esm/node/api/index.d.ts" + ], "prerender": [ "./dist/esm/node/prerender/index.d.ts" ], @@ -206,11 +216,13 @@ "types": "./dist/esm/node/runtime/index-deprecated.d.ts", "type": "module", "bin": { - "vike": "./node/cli/bin-entry.js" + "vike": "./node/cli/bin.js" }, "files": [ + "./node/cli/bin.js", "./dist/", "./abort.js", + "./api.js", "./client.js", "./client/router.js", "./cli.js", @@ -220,7 +232,6 @@ "./__internal/loadImportBuild.js", "./__internal/setup.js", "./modifyUrl.js", - "./node/cli/bin-entry.js", "./plugin.js", "./prerender.js", "./RenderErrorPage.js", diff --git a/vike/shared/ConfigVike.ts b/vike/shared/ConfigVike.ts index 97bef86ee2a..8cb0ababd01 100644 --- a/vike/shared/ConfigVike.ts +++ b/vike/shared/ConfigVike.ts @@ -58,7 +58,7 @@ type ConfigVikeUserProvided = { */ partial?: boolean /** - * Disable the automatic initiation of the pre-rendering process when running `$ vite build`. + * Disable the automatic initiation of the pre-rendering process when running `$ vike build`. * * Use this if you want to programmatically initiate the pre-rendering process instead. * @@ -69,13 +69,8 @@ type ConfigVikeUserProvided = { disableAutoRun?: boolean } - /** - * Disable the automatic chaining of build steps. - * - * https://vike.dev/disableAutoFullBuild - * - * @default false - */ + // TODO/v1-release: remove + /** @deprecated See https://vike.dev/disableAutoFullBuild */ disableAutoFullBuild?: boolean | 'prerender' /** The Base URL of your server. diff --git a/vike/utils/assertNodeEnv.ts b/vike/utils/assertNodeEnv.ts index ae9538b11d9..051e9a0d59e 100644 --- a/vike/utils/assertNodeEnv.ts +++ b/vike/utils/assertNodeEnv.ts @@ -38,7 +38,7 @@ function assertNodeEnv_runtime(isViteDev: boolean) { const nodeEnvDesc = getNodeEnvDesc() // TODO: make it assertUsage() again once #1528 is implemented. const errMsg = `Running ${ - isViteDev ? pc.cyan('$ vite dev') : 'app in production' + isViteDev ? pc.cyan('$ vike dev') : 'app in production' } while the ${nodeEnvDesc} which is contradictory, see https://vike.dev/NODE_ENV` as const assertWarning(false, errMsg, { onlyOnce: true }) }