https://github.com/koumoul-dev/nuxt-config-inject
Hackish way to obtain "build once - deploy many times" with nuxtjs
https://github.com/koumoul-dev/nuxt-config-inject
Last synced: 2 months ago
JSON representation
Hackish way to obtain "build once - deploy many times" with nuxtjs
- Host: GitHub
- URL: https://github.com/koumoul-dev/nuxt-config-inject
- Owner: koumoul-dev
- Created: 2020-01-28T10:36:54.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-01-05T05:56:00.000Z (almost 3 years ago)
- Last Synced: 2025-07-01T09:07:54.404Z (3 months ago)
- Language: JavaScript
- Size: 1.19 MB
- Stars: 11
- Watchers: 3
- Forks: 1
- Open Issues: 29
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# nuxt-config-inject
Hackish way to obtain "build once - deploy many times" with nuxtjs.
## Why
[Nuxt](https://fr.nuxtjs.org/) is neat, but it doesn't respect principles that we consider very important. We want to [store config in the environment](https://12factor.net/config), we want to build docker images meant to be used in as many environments as possible without additional build steps.
[This issue](https://github.com/nuxt/nuxt.js/issues/5100) shows that the problem is not easily solved. There are code solutions for parts of the problem: [nuxt-env](https://github.com/samtgarson/nuxt-env), monkey-patching router base, defining `__webpack_public_path__`, etc. But we keep hitting roadblocks, incompatibility with some modules, regressions at upgrades.
This module is an attempt to solve the problem in a more brute force way. At build time a pseudo-config is transformed so that all values contain easily recognizable placeholders. Then at runtime all the files in `.nuxt` directory are read and the placeholders are replaced with actual values from current environment. This solution is kinda ugly and it certainly has limitations, but early tests are encouraging.
## Usage
```js
// somewhere at the start of nuxt.config.jslet config = require('config') // or other way to fetch a config from the environment
if (process.env.NODE_ENV === 'production') {
const nuxtConfigInject = require('@koumoul/nuxt-config-inject')// take a config object and replace all values with placeholders that will be easy to find in built files afterwards
if (process.argv.slice(-1)[0] === 'build') config = nuxtConfigInject.prepare(config)// read all built files and replace config placeholders with actual values
else nuxtConfigInject.replace(config)
}
``````shell
DEBUG=nuxt-config-inject NODE_ENV=production nuxt build
DEBUG=nuxt-config-inject NODE_ENV=production nuxt start
```## Development
```
cd demo
DEBUG=nuxt-config-inject NODE_ENV=production npm run build
DEBUG=nuxt-config-inject NODE_ENV=production npm run start
```