未验证 提交 dd644945 编写于 作者: J JJ Kasper 提交者: GitHub

Fix encoding for env files in serverless mode (#14750)

This makes sure to base64 encode the `.env*` file contents before passing them in the URL for the serverless-loader since `!` is a special character in this case which can cause webpack to fail to build

Closes: https://github.com/vercel/next.js/issues/14749
上级 bfd1ecc3
......@@ -92,7 +92,10 @@ export function createEntrypoints(
})
: '',
previewProps: JSON.stringify(previewMode),
loadedEnvFiles: JSON.stringify(loadedEnvFiles),
// base64 encode to make sure contents don't break webpack URL loading
loadedEnvFiles: Buffer.from(JSON.stringify(loadedEnvFiles)).toString(
'base64'
),
}
Object.keys(pages).forEach((page) => {
......
......@@ -90,7 +90,7 @@ const nextServerlessLoader: loader.Loader = function () {
: ''
const envLoading = `
const { processEnv } = require('next/dist/lib/load-env-config')
processEnv(${loadedEnvFiles})
processEnv(${Buffer.from(loadedEnvFiles, 'base64').toString()})
`
const runtimeConfigImports = runtimeConfig
......
PROCESS_ENV_KEY=env
PROCESS_ENV_KEY="env"
ENV_FILE_KEY=env
ENV_FILE_LOCAL_OVERRIDE_TEST=env
ENV_FILE_DEVELOPMENT_OVERRIDE_TEST=env
......@@ -10,4 +10,5 @@ ENV_FILE_TEST_LOCAL_OVERRIDEOVERRIDE_TEST=env
NEXT_PUBLIC_TEST_DEST=another
ENV_FILE_EXPANDED=$ENV_FILE_KEY
ENV_FILE_EXPANDED_CONCAT=hello-${ENV_FILE_KEY}
ENV_FILE_EXPANDED_ESCAPED=\$ENV_FILE_KEY
\ No newline at end of file
ENV_FILE_EXPANDED_ESCAPED=\$ENV_FILE_KEY
ENV_FILE_KEY_EXCLAMATION="hello!"
\ No newline at end of file
......@@ -18,6 +18,7 @@ const variables = [
'ENV_FILE_EXPANDED',
'ENV_FILE_EXPANDED_CONCAT',
'ENV_FILE_EXPANDED_ESCAPED',
'ENV_FILE_KEY_EXCLAMATION',
]
const items = {}
......
......@@ -18,6 +18,7 @@ const variables = [
'ENV_FILE_EXPANDED',
'ENV_FILE_EXPANDED_CONCAT',
'ENV_FILE_EXPANDED_ESCAPED',
'ENV_FILE_KEY_EXCLAMATION',
]
export async function getStaticProps() {
......
......@@ -18,6 +18,7 @@ const variables = [
'ENV_FILE_EXPANDED',
'ENV_FILE_EXPANDED_CONCAT',
'ENV_FILE_EXPANDED_ESCAPED',
'ENV_FILE_KEY_EXCLAMATION',
]
export async function getStaticProps() {
......
......@@ -18,6 +18,7 @@ const variables = [
'ENV_FILE_EXPANDED',
'ENV_FILE_EXPANDED_CONCAT',
'ENV_FILE_EXPANDED_ESCAPED',
'ENV_FILE_KEY_EXCLAMATION',
]
export async function getServerSideProps() {
......
......@@ -50,6 +50,7 @@ const runTests = (mode = 'dev') => {
expect(data.ENV_FILE_EXPANDED).toBe('env')
expect(data.ENV_FILE_EXPANDED_CONCAT).toBe('hello-env')
expect(data.ENV_FILE_EXPANDED_ESCAPED).toBe('$ENV_FILE_KEY')
expect(data.ENV_FILE_KEY_EXCLAMATION).toBe('hello!')
}
it('should have process environment override .env', async () => {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册