Passing environment variables in npm-scripts

后端 未结 3 1629
说谎
说谎 2021-02-03 17:30

I have a package.json with following (simplified) content in the scripts key:

...
scripts: {
   \"start\": \"NODE_ENV=${NODE_ENV:=production} node start-app.js\"         


        
相关标签:
3条回答
  • 2021-02-03 18:16

    If you have small use cased, use better-npm-run. For small cases, it works fine. Somehow if you have a lot of commands and it hard manage. Try, batman-cli. Work well and handle lot of environment-dependent issues

    npm i -g batman-cli

    0 讨论(0)
  • 2021-02-03 18:17

    You have a few options:

    • better-npm-run,which can define an env for each command separately
    • Instead of a poststart script, you can concatenate commands for npm like so: "start": "NODE_ENV=${NODE_ENV:=production} node start-app.js && echo $NODE_ENV"
    • Use a process manager in production like pm2. pm2 lets you define environment specific json files with settings such as NODE_ENV. At our company, we successfully run all of our apps in different environments with pm2 (all the while having the same start command)
    0 讨论(0)
  • 2021-02-03 18:30

    this is how I did it, first you need to install two dev-dependencies

    https://www.npmjs.com/package/env-cmd this load your env var from your file

    https://www.npmjs.com/package/cross-env this use environment variable in script

    example scripts:

    "env-cmd ./.config/prod.env cross-env-shell \"docker volume create $DOCKER_VOLUME\""
    

    this load $DOCKER_VOLUME env var from prod.env

    update: starting from env-cmd version 10, you need specify -f flag if you want to use a custom env file path

    "env-cmd -f ./.config/prod.env cross-env-shell \"docker volume create $DOCKER_VOLUME\""
    
    0 讨论(0)
提交回复
热议问题