IT story

package.json에서 환경 변수를 설정하는 방법

hot-time 2020. 4. 10. 08:20
반응형

package.json에서 환경 변수를 설정하는 방법


내부에서 일부 환경 변수를 설정 package.json하여 npm start유사한 명령 과 함께 사용하는 방법 은 무엇입니까?

여기 내가 현재 가지고있는 것이 있습니다 package.json:

{
  ...
  "scripts": {
    "help": "tagove help",
    "start": "tagove start"
  }
  ...
}

NODE_ENV시작 스크립트에서 환경 변수 (예 :)를 설정하고 명령 하나만으로 앱을 시작할 수 npm start있습니다.


스크립트 명령에서 환경 변수를 설정하십시오.

...
"scripts": {
  "start": "node app.js",
  "test": "NODE_ENV=test mocha --reporter spec"
},
...

그런 다음 process.env.NODE_ENV앱에서 사용 하십시오.

참고 : 이것은 Mac 및 Linux 전용 입니다. Windows의 경우 주석을 참조하십시오.


NPM 패키지 cross-env 만 사용하십시오 . 매우 쉽습니다. Windows, Linux 및 모든 환경에서 작동합니다. &&를 사용하여 다음 작업으로 이동하지 마십시오. 환경을 설정 한 후 다음 작업을 시작하면됩니다. 의견 중 하나에 대한 제안에 대해 @mikekidder 에게 감사드립니다 .

설명서에서 :

{
  "scripts": {
    "build": "cross-env NODE_ENV=production OTHERFLAG=myValue webpack --config build/webpack.config.js"
  }
}

여러 전역 변수를 설정하려면 연속적으로 변수를 지정하고 명령을 실행하십시오.

궁극적으로 (스폰을 사용하여) 실행되는 명령은 다음과 같습니다.

webpack --config build/webpack.config.js

NODE_ENV환경 변수 간 ENV 설정 될


미래의 노드 탐색기를 위해 여기에 2 센트를 추가하고 싶었습니다. 내 우분투 14.04에서 NODE_ENV=test작동하지 않았는데, export NODE_ENV=test후에도 NODE_ENV=test일하기 시작한 이상한 것을 사용해야 했습니다.

Windows에서 말했듯이 set NODE_ENV=test크로스 플랫폼 솔루션의 경우 크로스 환경 라이브러리가 트릭을 수행하지 않는 것처럼 보이므로 실제로이 작업을 수행하려면 라이브러리가 필요합니까?

export NODE_ENV=test || set NODE_ENV=test&& yadda yadda

그렇지 않으면 Windows가 인식 할 수없는 export NODE_ENV명령 인 : D 에서 충돌하므로 세로 막대가 필요합니다 . 후행 공간에 대해서는 몰랐지만 확실하게 제거했습니다.


여러 환경 변수로 작업하는 경우가 많기 때문에 별도의 .env파일 로 유지하는 것이 유용하다는 것을 알았습니다 (소스 제어에서이를 무시하십시오).

VAR_A=Hello World
VAR_B=format the .env file like this with new vars separated by a line break

그런 다음 export $(cat .env | xargs) &&스크립트 명령 앞에 추가 하십시오.

예:

{
  ...
  "scripts": {
    ...
    "start": "export $(cat .env | xargs) && echo do your thing here",
    "env": "export $(cat .env | xargs) && env",
    "env-windows": "export $(cat .env | xargs) && set"
  }
  ...
}

테스트를 위해 npm run env(linux) 또는 npm run env-windows(windows) 를 실행하여 env 변수를 볼 수 있습니다 .


다음을 교체하여 Windows에서 시도하십시오 YOURENV.

  {
    ...
     "scripts": {
       "help": "set NODE_ENV=YOURENV&& tagove help",
       "start": "set NODE_ENV=YOURENV&& tagove start"
     }
    ...
  }

갑자기 actionhero가 다음 코드를 사용하고 있음을 발견했습니다 --NODE_ENV=production. 시작 스크립트 명령 옵션을 전달하여 내 문제를 해결했습니다 .

if(argv['NODE_ENV'] != null){
  api.env = argv['NODE_ENV'];
} else if(process.env.NODE_ENV != null){
  api.env = process.env.NODE_ENV;
}

package.json 또는 init 스크립트 또는 다른 사람이 앱을 부트 스트랩하는 환경 변수를 설정하는 더 나은 방법을 알고있는 다른 사람의 답변을 받아 주셔서 감사합니다.


질문에 직접 대답하지는 않지만 다른 답변 위에 아이디어를 공유하고 싶습니다. 내가 얻은 것에서 크로스 플랫폼 독립성을 달성하기 위해 어느 정도의 복잡성을 제공 할 것입니다.

시나리오에서 원래 JWT 인증으로 서버를 보호할지 여부를 제어하는 ​​변수를 설정하려고했습니다 (개발 목적으로)

답변을 읽은 후 인증을 켜고 끄는 두 개의 다른 파일을 만들기로 결정했습니다.

  "scripts": {
    "dev": "nodemon --debug  index_auth.js",
    "devna": "nodemon --debug  index_no_auth.js",
  }

파일은 단순히 원래 index.js 파일을 호출하는 래퍼입니다 appbootstrapper.js.

//index_no_auth.js authentication turned off
const bootstrapper = require('./appbootstrapper');
bootstrapper(false);

//index_auth.js authentication turned on
const bootstrapper = require('./appbootstrapper');
bootstrapper(true);

class AppBootStrapper {

    init(useauth) {
        //real initialization
    }
}

아마도 이것은 다른 사람을 도울 수 있습니다


더 큰 환경 변수 세트를 사용하거나 재사용하려는 경우을 사용할 수 있습니다 env-cmd.

./.env 파일:

# This is a comment
ENV1=THANKS
ENV2=FOR ALL
ENV3=THE FISH

./package.json:

{
  "scripts": {
    "test": "env-cmd mocha -R spec"
  }
}

에 ENV 변수를 설정해서는 안됩니다 package.json. actionhero를 사용 NODE_ENV하여의 파일에서로드 된 구성 옵션을 변경할 수 있습니다 ./config. redis 구성 파일을 확인하고 NODE_ENV가 데이터베이스 옵션을 변경하는 데 어떻게 사용되는지 확인하십시오.NODE_ENV=test

다른 ENV 변수를 사용하여 항목 (아마도 HTTP 포트)을 설정하려는 경우 여전히에서 아무것도 변경할 필요가 없습니다 package.json. 예를 들어, PORT=1234ENV에서 설정하고 에서 HTTP 포트로 사용하려는 NODE_ENV=production경우 관련 구성 파일 IE에서 해당 포트를 참조하십시오.

# in config/servers/web.js
exports.production = { 
  servers: {
    web: function(api){
      return {
       port: process.env.PORT
      }
    }
  }
}

{
  ...
  "scripts": {
    "start": "ENV NODE_ENV=production someapp --options"
  }
  ...
}

이것은 Windows 콘솔 에서 작동합니다 .

"scripts": {
  "aaa": "set TMP=test && npm run bbb",
  "bbb": "echo %TMP%"
}

npm run aaa

산출: test

자세한 내용은 이 답변 을 참조하십시오.

참고 URL : https://stackoverflow.com/questions/25112510/how-to-set-environment-variables-from-within-package-json

반응형