Runtime Config
Nuxt.js supports
env
config to provide configuration via
process.env
. This is done by webpack's
DefinePlugin
.
This approach had two downsides:
process.env
we need to rebuild which is against
12factor
app design
You can learn more about why we are moving from @nuxtjs/dotenv to runtime config .
Runtime Config (2.13+)
Two new options added to
nuxt.config
to allow passing runtime configuration which is then accessible using context
$config
.
Config is added to Nuxt payload (
__NUXT__.config
) so there is no need to rebuild to update runtime configuration. SSR, SPA, and Static targets supported with an exception that for static target, a regenerate is necessary.
export default {
publicRuntimeConfig: {},
privateRuntimeConfig: {}
publicRuntimeConfig is available using $config in both server and client.
privateRuntimeConfig is only available on server using same $config (it overrides publicRuntimeConfig)
Usage
$config is available anywhere from context (including pages, store and plugins)
export default {
asyncData ({ $config: { baseURL } }) {
fetch(`${baseURL}/test`)
mounted() {
console.log(this.$config.testValue)
}
.env support
If you have .env file in project root directory, it will be automatically loaded using dotenv and is accessible via process.env.
process.env is updated so we can use it right inside nuxt.config for runtime config. Values are interpolated and expanded with an improved version of dotenv-expand.
.env file is also watched to reload during nuxt dev. You can customize the env path by using --dotenv <file> or disabling with --dotenv false.
Expand/Interpolation Support
Supported both for dotenv and runtime config.
Expand for runtime config happens only if there is already a key (see API_SECRET example).
Interpolation allows easy nesting env vars (see baseURL example).
.env:
BASE_URL=/api
PUBLIC_URL=https://nuxtjs.org
API_SECRET=1234
nuxt.config.js:
export default {
publicRuntimeConfig: {
baseURL: process.env.BASE_URL
privateRuntimeConfig: {
baseURL: '${PUBLIC_URL}${BASE_URL}',
API_SECRET: '${API_SECRET}' // similar to using process.env.API_SECRET
}
Note, it is possible to use a function for publicRuntimeConfig and privateRuntimeConfig but not recommended.
Caught a mistake or want to contribute to the documentation?
Edit this page on GitHub!