diff --git a/packages/next/build/entries.ts b/packages/next/build/entries.ts index dc87eb2d9a255821203bd1f237973326ece67ded..4d6c942751af1ace19573d881046147d8a074a58 100644 --- a/packages/next/build/entries.ts +++ b/packages/next/build/entries.ts @@ -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) => { diff --git a/packages/next/build/webpack/loaders/next-serverless-loader.ts b/packages/next/build/webpack/loaders/next-serverless-loader.ts index b78825641936b9e19a325c81493ab108dfcad231..3cc4d959dcfb6aefe325eeb2953ec84a6705a750 100644 --- a/packages/next/build/webpack/loaders/next-serverless-loader.ts +++ b/packages/next/build/webpack/loaders/next-serverless-loader.ts @@ -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 diff --git a/test/integration/env-config/app/.env b/test/integration/env-config/app/.env index ea9c02f8cce6749844db7e1715ceb9eaf14af534..d50cde61838c9186e7a7a18ff3442b0efd50ed67 100644 --- a/test/integration/env-config/app/.env +++ b/test/integration/env-config/app/.env @@ -1,4 +1,4 @@ -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 diff --git a/test/integration/env-config/app/pages/api/all.js b/test/integration/env-config/app/pages/api/all.js index 61d66efb0e82556e5f84c6f7541a638000c5ca15..71c4968c8cc6cab3a45a57a9c23a6db843f4aa4f 100644 --- a/test/integration/env-config/app/pages/api/all.js +++ b/test/integration/env-config/app/pages/api/all.js @@ -18,6 +18,7 @@ const variables = [ 'ENV_FILE_EXPANDED', 'ENV_FILE_EXPANDED_CONCAT', 'ENV_FILE_EXPANDED_ESCAPED', + 'ENV_FILE_KEY_EXCLAMATION', ] const items = {} diff --git a/test/integration/env-config/app/pages/index.js b/test/integration/env-config/app/pages/index.js index c3e693267750cbdba998d42ae91bfde8972dd1eb..da92cea371dfa48a8c03f1b1c1fb6219818f4357 100644 --- a/test/integration/env-config/app/pages/index.js +++ b/test/integration/env-config/app/pages/index.js @@ -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() { diff --git a/test/integration/env-config/app/pages/some-ssg.js b/test/integration/env-config/app/pages/some-ssg.js index c3e693267750cbdba998d42ae91bfde8972dd1eb..da92cea371dfa48a8c03f1b1c1fb6219818f4357 100644 --- a/test/integration/env-config/app/pages/some-ssg.js +++ b/test/integration/env-config/app/pages/some-ssg.js @@ -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() { diff --git a/test/integration/env-config/app/pages/some-ssp.js b/test/integration/env-config/app/pages/some-ssp.js index 10cfebf896b21b3fbb426d2491200e7230989d8e..62db07bb4223ab547ac96cdd995d5f01fc0bde64 100644 --- a/test/integration/env-config/app/pages/some-ssp.js +++ b/test/integration/env-config/app/pages/some-ssp.js @@ -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() { diff --git a/test/integration/env-config/test/index.test.js b/test/integration/env-config/test/index.test.js index 2ae15211a88c88b7a8518cff95a271a5242daef7..3c3d7222fccafc93b541c50f5812679196d84abe 100644 --- a/test/integration/env-config/test/index.test.js +++ b/test/integration/env-config/test/index.test.js @@ -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 () => {