mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
Fix Runtime Config in next export
(#6258)
This commit is contained in:
parent
33b9ebc783
commit
bd249180c6
|
@ -7,7 +7,6 @@ import { resolve, join } from 'path'
|
|||
import { existsSync, readFileSync } from 'fs'
|
||||
import loadConfig from 'next-server/next-config'
|
||||
import { PHASE_EXPORT, SERVER_DIRECTORY, PAGES_MANIFEST, CONFIG_FILE, BUILD_ID_FILE, CLIENT_STATIC_FILES_PATH } from 'next-server/constants'
|
||||
import * as envConfig from 'next-server/config'
|
||||
import createProgress from 'tty-aware-progress'
|
||||
|
||||
export default async function (dir, options, configuration) {
|
||||
|
@ -98,11 +97,6 @@ export default async function (dir, options, configuration) {
|
|||
renderOpts.runtimeConfig = publicRuntimeConfig
|
||||
}
|
||||
|
||||
envConfig.setConfig({
|
||||
serverRuntimeConfig,
|
||||
publicRuntimeConfig
|
||||
})
|
||||
|
||||
// We need this for server rendering the Link component.
|
||||
global.__NEXT_DATA__ = {
|
||||
nextExport: true
|
||||
|
@ -138,6 +132,7 @@ export default async function (dir, options, configuration) {
|
|||
exportPathMap: chunk.pathMap,
|
||||
outDir,
|
||||
renderOpts,
|
||||
serverRuntimeConfig,
|
||||
concurrency
|
||||
})
|
||||
worker.on('message', ({ type, payload }) => {
|
||||
|
|
|
@ -8,6 +8,7 @@ const { renderToHTML } = require('next-server/dist/server/render')
|
|||
const { writeFile } = require('fs')
|
||||
const Sema = require('async-sema')
|
||||
const {loadComponents} = require('next-server/dist/server/load-components')
|
||||
const envConfig = require('next-server/config')
|
||||
|
||||
process.on(
|
||||
'message',
|
||||
|
@ -18,6 +19,7 @@ process.on(
|
|||
exportPathMap,
|
||||
outDir,
|
||||
renderOpts,
|
||||
serverRuntimeConfig,
|
||||
concurrency
|
||||
}) => {
|
||||
const sema = new Sema(concurrency, { capacity: exportPaths.length })
|
||||
|
@ -27,6 +29,10 @@ process.on(
|
|||
const { page, query = {} } = exportPathMap[path]
|
||||
const req = { url: path }
|
||||
const res = {}
|
||||
envConfig.setConfig({
|
||||
serverRuntimeConfig,
|
||||
publicRuntimeConfig: renderOpts.runtimeConfig
|
||||
})
|
||||
|
||||
let htmlFilename = `${path}${sep}index.html`
|
||||
if (extname(path) !== '') {
|
||||
|
|
|
@ -3,6 +3,12 @@ const {PHASE_DEVELOPMENT_SERVER} = require('next-server/constants')
|
|||
module.exports = (phase) => {
|
||||
return {
|
||||
distDir: phase === PHASE_DEVELOPMENT_SERVER ? '.next-dev' : '.next',
|
||||
publicRuntimeConfig: {
|
||||
foo: 'foo'
|
||||
},
|
||||
serverRuntimeConfig: {
|
||||
bar: 'bar'
|
||||
},
|
||||
exportPathMap: function () {
|
||||
return {
|
||||
'/': { page: '/' },
|
||||
|
|
|
@ -1,12 +1,20 @@
|
|||
import Link from 'next/link'
|
||||
import getConfig from 'next/config'
|
||||
const { publicRuntimeConfig, serverRuntimeConfig } = getConfig()
|
||||
|
||||
export default () => (
|
||||
const About = ({ bar }) => (
|
||||
<div id='about-page'>
|
||||
<div>
|
||||
<Link href='/'>
|
||||
<a>Go Back</a>
|
||||
</Link>
|
||||
</div>
|
||||
<p>This is the About page</p>
|
||||
<p>{`This is the About page ${publicRuntimeConfig.foo}${bar || ''}`}</p>
|
||||
</div>
|
||||
)
|
||||
|
||||
About.getInitialProps = async (ctx) => {
|
||||
return { bar: serverRuntimeConfig.bar }
|
||||
}
|
||||
|
||||
export default About
|
||||
|
|
|
@ -20,7 +20,7 @@ export default function (context) {
|
|||
.waitForElementByCss('#about-page')
|
||||
.elementByCss('#about-page p').text()
|
||||
|
||||
expect(text).toBe('This is the About page')
|
||||
expect(text).toBe('This is the About page foo')
|
||||
browser.close()
|
||||
})
|
||||
|
||||
|
@ -31,7 +31,7 @@ export default function (context) {
|
|||
.waitForElementByCss('#about-page')
|
||||
.elementByCss('#about-page p').text()
|
||||
|
||||
expect(text).toBe('This is the About page')
|
||||
expect(text).toBe('This is the About page foo')
|
||||
browser.close()
|
||||
})
|
||||
|
||||
|
|
|
@ -9,6 +9,11 @@ export default function (context) {
|
|||
expect(html).toMatch(/This is the home page/)
|
||||
})
|
||||
|
||||
it('should render the about page', async () => {
|
||||
const html = await renderViaHTTP(context.port, '/about')
|
||||
expect(html).toMatch(/This is the About page foobar/)
|
||||
})
|
||||
|
||||
it('should render links correctly', async () => {
|
||||
const html = await renderViaHTTP(context.port, '/')
|
||||
const $ = cheerio.load(html)
|
||||
|
|
Loading…
Reference in a new issue