Skip to content

Commit e3b56da

Browse files
committed
fix: tolerate import { prerender } from 'vike/api' in production (fix #3094)
1 parent cb654e0 commit e3b56da

5 files changed

Lines changed: 16 additions & 4 deletions

File tree

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import '../../utils/trackLogs.js' // should be loaded ASAP
2+
3+
import { assertIsNotBrowser } from '../../utils/assertIsNotBrowser.js'
4+
5+
assertEnvApiDevAndProd()
6+
7+
function assertEnvApiDevAndProd() {
8+
assertIsNotBrowser()
9+
/* It's expected that users programmtically trigger the pre-rendering process in production (it's a common technique), we therefore tolerate `import { prerender } from 'vike/api'` in production. This means that, in this case, we tolerate the `vite` package to be loaded in production (we usually prevent users to do that).
10+
assertIsNotProductionRuntime()
11+
*/
12+
}

packages/vike/src/node/api/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import type { build } from './build.js'
77
import type { dev } from './dev.js'
88
import type { preview } from './preview.js'
99
import type { prerender } from './prerender.js'
10-
import './assertEnvApiDev.js'
10+
import './assertEnvApiDevAndProd.js'
1111

1212
const build_: typeof build = async (...args) => (await import('./build.js')).build(...args)
1313
const dev_: typeof dev = async (...args) => (await import('./dev.js')).dev(...args)

packages/vike/src/node/api/prepareViteApiCall.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import type { ApiOptions, ApiOperation } from './types.js'
44
import { clearContextVikeApiOperation, setContextVikeApiOperation } from '../../shared-server-node/api-context.js'
55
import { clearGlobalContext } from '../../server/runtime/globalContext.js'
66
import { resolveViteConfigFromUser } from './resolveViteConfigFromUser.js'
7-
import './assertEnvApiDev.js'
7+
import './assertEnvApiDevAndProd.js'
88

99
async function prepareViteApiCall(options: ApiOptions, operation: ApiOperation) {
1010
clear()

packages/vike/src/node/api/prerender.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { runPrerenderFromAPI } from '../prerender/runPrerenderEntry.js'
44
import type { PrerenderOptions } from '../prerender/runPrerender.js'
55
import { prepareViteApiCall } from './prepareViteApiCall.js'
66
import type { ResolvedConfig } from 'vite'
7-
import './assertEnvApiDev.js'
7+
import './assertEnvApiDevAndProd.js'
88

99
/**
1010
* Programmatically trigger `$ vike prerender`

packages/vike/src/node/api/resolveViteConfigFromUser.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import { getEnvVarObject } from '../vite/shared/getEnvVarObject.js'
2424
import { getVikeApiOperation, isVikeCliOrApi } from '../../shared-server-node/api-context.js'
2525
import { getViteCommandFromCli } from '../vite/shared/isViteCli.js'
2626
import type { Config } from '../../types/index.js'
27-
import './assertEnvApiDev.js'
27+
import './assertEnvApiDevAndProd.js'
2828

2929
const globalObject = getGlobalObject<{ root?: string; isOnlyResolvingUserConfig?: boolean }>(
3030
'api/prepareViteApiCall.ts',

0 commit comments

Comments
 (0)