Search code examples
webpacknetlify

Set environment variable for build in Netlify


I'm trying to set an environment variable for an API key that I don't want in my code. My source javascript looks something like this :

.get(`http://api-url-and-parameters&api-key=${process.env.API_KEY}`)

I'm using webpack and the package dotenv-webpack https://www.npmjs.com/package/dotenv-webpack to set API_KEY in a gitignored .env file and it's all running fine on my local. I'd like to also be able to set that variable when deploying through Netlify, I've tried adding it through to GUI to the 'build environment variables', and also to set it directly in the build command, but without success.

Any idea what might be the issue ?


Solution

  • WARNING: If this is a secret key, you will not want to expose this environment variable value in any bundle that gets returned to the client. It should only be used by your build scripts to be used to create your content during build.

    Issue

    dotenv-webpack expects there to be a .env file to load in your variables during the webpack build of your bundle. When the repository is checked out by Netlify, the .env does not exist because for good reason it is in .gitignore.

    Solution

    Store your API_KEY in the Netlify build environment variables and build the .env using a script prior to running the build command.

    scripts/create-env.js

    const fs = require('fs')
    fs.writeFileSync('./.env', `API_KEY=${process.env.API_KEY}\n`)
    

    Run the script as part of your build

    node ./scripts/create-env.js && <your_existing_webpack_build_command>

    Caveats & Recommendations

    • Do not use this method with a public facing repository [open] because any PR or branch deploy could create a simple script into your code to expose the API_KEY
    • The example script above is for simplicity so, make any script you use be able to error out with a code other than 0 so if the script fails the deploy will fail.