prosource

package.json 내에서 환경 변수를 설정하는 방법은 무엇입니까?

probook 2023. 6. 12. 21:34
반응형

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 패키지 교차 환경을 사용하십시오.아주 쉽네요.윈도우즈, 리눅스 및 모든 환경에서 작동합니다.&&을 사용하여 다음 작업으로 이동하지 않습니다.환경을 설정하고 다음 작업을 시작하면 됩니다.여기 댓글하나에 있는 제안에 대해 @mikekider에게 공로를 돌립니다.

설명서에서:

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

글로벌 변수를 여러 개 설정하려면 연속적으로 지정한 다음 명령을 실행합니다.

궁극적으로 실행되는 명령어는 다음과 같습니다(spaen 사용).

webpack --config build/webpack.config.js

NODE_ENV합니다.

저는 단지 미래의 노드 탐험가들을 위해 여기에 제 2센트를 추가하고 싶었습니다. 14에서 "Ubuntu 14.04"NODE_ENV=test효과가 없었어요, 저는 사용해야 했어요.export NODE_ENV=test 후에NODE_ENV=test이상하게도 일을 시작했습니다.

를 사용해야 .set NODE_ENV=test그러나 교차 플랫폼 솔루션의 경우 교차 환경 라이브러리가 효과를 발휘하지 못하는 것으로 보이며, 이를 위해 라이브러리가 정말 필요합니까?

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

합니다. 되지 않는 에 합니다. 그렇지 않으면 Windows가 인식되지 않는 Windows에서 충돌합니다.export NODE_ENV뒷공간은 잘 혹시라도 제가 요.뒤에 오는 공간에 대해서는 잘 모르겠지만, 만약 제가 그것들도 제거했는지 확인하기 위해서입니다.

환경 변수를 제 가 많기 때문에 의 환경 합니다..env파일(소스 컨트롤에서 이 설정을 무시하십시오). 다음 에 그런다 (Linux에서) 사두추를 .export $(cat .env | xargs) && 응용 프로그램을 시작하기 전에 스크립트 명령을 실행합니다.

».env파일 이름:

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

»index.js:

console.log('Test', process.env.VAR_A, process.env.VAR_B);

»package.json:

{
  ...
  "scripts": {
    "start": "node index.js",

    "env-linux": "export $(cat .env | xargs) && env",
    "start-linux": "export $(cat .env | xargs) && npm start",

    "env-windows": "(for /F \"tokens=*\" %i in (.env) do set %i)",
    "start-windows": "(for /F \"tokens=*\" %i in (.env) do set %i) && npm start",

  }
  ...
}

유감스럽게도 스크립트에서 스크립트를 호출하여 환경 변수를 설정할 수 없습니다. 예를 들어"start-windows": "npm run env-windows && npm start"그래서 스크립트에 약간의 중복성이 있습니다.

는 env 변수를 할 수 있습니다.npm run env-linux또는npm run env-windows그리고 그들이 실행함으로써 당신의 앱으로 만들어지는지 테스트합니다.npm run start-linux또는npm run start-windows.

.YOURENV:

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

@루크의 대답은 거의 내가 필요로 하는 대답이었습니다!감사해요.

선택한 답변은 매우 간단하지만 오래되었기 때문에 스크립트를 실행하고 Luke의 답변에 대한 몇 가지 제한 사항을 수정할 때 .env 별도 파일에서 변수를 가져올 수 있는 대안을 제공하고자 합니다.사용해 보십시오.

.env 파일 :::

# This way, you CAN use comments in your .env files
NODE_PATH="src/"

# You can also have extra/empty lines in it
SASS_PATH="node_modules:src/styles"

그런 다음 패키지 json에서 변수를 설정하고 필요한 스크립트보다 먼저 실행하는 스크립트를 만듭니다.

꾸러미json :::

scripts: {
  "set-env": "export $(cat .env | grep \"^[^#;]\" |xargs)",
  "storybook": "npm run set-env && start-storybook -s public"
}

일부 관측치:

  • grep'ed cat 명령의 정규식은 주석과 빈 행을 지웁니다.

  • &&에 대해 "주의"할 필요가 없습니다.npm run set-env동일한 명령에서 변수를 설정하는 경우 필요한 값입니다.

  • 만약 당신이 실을 사용하고 있다면, 당신은 경고를 볼 수 있습니다, 당신은 그것을 바꿀 수 있습니다.yarn set-env또는 사용npm run set-env --scripts-prepend-node-path &&대신.

다양한 환경

다른 환경 변수를 사용할 수 있다는 것도 장점입니다.

scripts: {
  "set-env:production": "export $(cat .production.env | grep \"^[^#;]\" |xargs)",
  "set-env:development": "export $(cat .env | grep \"^[^#;]\" |xargs)",
}

키, 암호 또는 민감한/개인 데이터가 있을 때는 .env 파일을 git 저장소에 추가하지 마십시오!

업데이트: 이 솔루션은 npm RFC 21로 인해 npm v7에서 손상될 수 있습니다.

주의: 이 작업이 다음 작업과 함께 수행되는지 여부를 알 수 없습니다.yarn


npm (및 yarn)은 패키지로부터 많은 데이터를 전달합니다.json을 환경 변수로 스크립트에 추가합니다.사용하다npm run env그들 모두를 보기 위해.이는 https://docs.npmjs.com/misc/scripts#environment 에 문서화되어 있으며 다음과 같은 "확장" 스크립트에만 해당되지 않습니다.prepublish 하만실행스있습다니도트크립지된에 의해 되는 모든 .npm run.

코드 이한내코액예수할있습다니스세에드부)에 수 .process.env.npm_package_config_port그러나 스크립트를 실행하는 셸에서 이미 사용할 수 있으므로 다음과 같이 액세스할 수도 있습니다.$npm_...확장(확장 구문은 윈도우에서 작동하지 않을 수 있음).

"config" 섹션은 다음 용도로 사용됩니다.

  "name": "myproject",
  ...
  "config": {
    "port": "8010"
  },
  "scripts": {
    "start": "node server.js $npm_package_config_port",
    "test": "wait-on http://localhost:$npm_package_config_port/ && node test.js http://localhost:$npm_package_config_port/"
  } 

이러한 "config" 필드의 중요한 특성은 사용자가 package.json!을 수정하지 않고 재정의할 수 있다는 것입니다.

$ npm run start

> myproject@0.0.0 start /home/cben/mydir
> node server.js $npm_package_config_port

Serving on localhost:8010

$ npm config set myproject:port 8020
$ git diff package.json  # no change!
$ cat ~/.npmrc
myproject:port=8020

$ npm run start

> myproject@0.0.0 start /home/cben/mydir
> node server.js $npm_package_config_port

Serving on localhost:8020

npm 구성 및 yarn 구성 문서를 참조하십시오.
실이 읽는 것처럼 보입니다.~/.npmrc그렇게npm config set두 가지 모두에 영향을 미치지만,yarn config set에 씁니다.~/.yarnrc그래서 오직 실만이 그것을 볼 것입니다 :-(

대규모 환경 변수 집합의 경우 또는 재사용하려는 경우 사용할 수 있습니다.

추적으로그가, 그▁as..env파일은 direnv에서도 작동합니다.

./.env파일 이름:

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

./package.json:

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

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

"scripts": {
  "setAndStart": "set TMP=test&& node index.js",
  "otherScriptCmd": "echo %TMP%"
}

npm run aaa

출력:test

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

단일 환경 변수의 경우

 "scripts": {
    "start": "set NODE_ENV=production&& node server.js"
 }

다중 환경 변수의 경우

 "scripts": {
    "start": "set NODE_ENV=production&& set PORT=8000&& node server.js"
 }

때.NODE_ENV은 환경모든변수를devDependencies로 'production'에 있는 를 'package.json installnpm 파일을 실행할 때됩니다.다음을 사용하여 이 작업을 수행할 수도 있습니다.--production플래그:

npm install --production

설정용NODE_ENV은 이 중 것이든 할 수 있습니다.

방법 1: 세트NODE_ENV 노드

Windows:

set NODE_ENV=production

Linux, macOS or other unixsystem : 반템기시스::

export NODE_ENV=production

이렇게 하면 현재 bash 세션에 대해 NODE_ENV가 설정되므로 이 문 이후에 시작된 모든 앱은 NODE_ENV가 운영으로 설정됩니다.

방법 2: 세트NODE_ENV 앱의

NODE_ENV=production node app.js

이것은 설정될 것입니다.NODE_ENV현재 앱에만 해당됩니다.이것은 우리가 다른 환경에서 앱을 테스트하고 싶을 때 도움이 됩니다.

방법 3: 만들기.env파일링하여 사용합니다.

이것은 여기에 설명된 아이디어를 사용합니다.자세한 설명은 이 게시물을 참조하십시오.

기본적으로 .env 파일을 생성하고 일부 bash 스크립트를 실행하여 환경에 설정합니다.

env-cmd 패키지를 사용하여 .env 파일에 정의된 환경 변수를 로드하면 bash 스크립트를 작성할 수 있습니다.

env-cmd .env node app.js

방법 4: 사용cross-env package

이 패키지를 사용하면 모든 플랫폼에 대해 환경 변수를 한 가지 방식으로 설정할 수 있습니다.

npm과 함께 설치한 후에는 패키지의 배포 스크립트에 추가하기만 하면 됩니다.json은 다음과 같습니다.

"build:deploy": "cross-env NODE_ENV=production webpack"

히어로가 코드를 것을 되었는데, ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ--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;
}

패키지에서 환경 변수를 설정하는 더 나은 방법을 알고 있는 다른 사람의 답변을 수락하면 정말 감사하겠습니다.json 또는 init 스크립트 또는 다른 사람에 의해 앱 부트스트랩되는 것과 같은 것.

창에서 gitbash를 사용합니다.Git Bash는 명령을 cmd와 다르게 처리합니다.

대부분의 윈도우즈 명령 프롬프트는 NODE_ENV= production에서 환경 변수를 설정할 때 질식합니다(Windows에서는 네이티브 Bash를 사용하는 Bash는 예외임). 마찬가지로 창 명령과 POSIX 명령이 환경 변수를 활용하는 방식에도 차이가 있습니다. POSIX에서는 $ENV_VAR을 사용하고 창에서는 %ENV_VAR%를 사용합니다.교차 환경 문서

{
  ...
  "scripts": {
    "help": "tagove help",
    "start": "env NODE_ENV=production tagove start"
  }
  ...
}

dotenv 패키지를 사용하여 환경 변수를 선언합니다.

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

패키지에서 node.js 스크립트를 실행하고 있습니다.다중 환경 변수가 있는 json:

  1. 꾸러미json 파일:

    "scripts": {
        "do-nothing": "set NODE_ENV=prod4 && set LOCAL_RUN=true && node ./x.js",
 },

x.js 파일은 다음과 같습니다.

let env     = process.env.NODE_ENV;
let isLocal = process.env.LOCAL_RUN;

console.log("ENV"    , env);
console.log("isLocal", isLocal);

하기 쉬운 솔루션: 가장우고휴쉬기운솔루션하:package.json:

"scripts": {
    "serve": "export NODE_PRESERVE_SYMLINKS_MAIN=1 && vue-cli-service serve"
    },

windows를 만들다export.cmd그리고 그것을 당신의 어딘가에 놓습니다.%PATH%:

@echo off

set %*

다음과 같은 경우:

  • 현재 Windows를 사용하고 있습니다.
  • Gitbash가 설치되어 있어야 합니다.
  • 을 사용하고 싶지 set ENV할 수 있는 입니다.윈도우 개발 시스템에서만 실행할 수 있도록 하는 json;

envsetting 할 수 .package.jsonWindows/Linux/Mac 버전은 다음과 같습니다.

$ npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"

질문에 직접 답변하지는 않았지만 다른 답변 위에 아이디어를 공유하고 싶습니다.제가 알아낸 바에 따르면, 이들 각각은 플랫폼 간 독립성을 달성하기 위한 어느 정도의 복잡성을 제공할 것입니다.

제 시나리오에서는 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 수안됩니에서 ENV 하면 안 .package.json는 영이사는행동을 사용합니다.NODE_ENV 로드구옵 다있수의 수../configredis 구성 파일을 확인하고 NODE_ENV가 데이터베이스 옵션을 변경하는 데 사용하는 방법을 확인하십시오.NODE_ENV=test

예: 를 사용하여에도 다른 ENV 변여설정하하포(HTTP 있음수일트)경려도에서 .package.json를 들어, 예들어설, 을할정경우를 하면,PORT=1234.NODE_ENV=production관련 구성 파일에서 다음을 참조하십시오.

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

위에 문서화된 를 사용하는 것 외에도, 몇 가지 환경 변수를 설정하기 위해package.json이 포함된 를 사전 노드로 할 수 JS 실행이 포함된 경우 노드를 사전 요구로 설정할 수 있습니다.dotenv/config:

{
  scripts: {
    "eg:js": "node -r dotenv/config your-script.js",
    "eg:ts": "ts-node -r dotenv/config your-script.ts",
    "test":  "ts-node -r dotenv/config -C 'console.log(process.env.PATH)'",
  }
}

노드 에 이로인노인필요한이 .dotenv/config그것은 그 자체로 읽을 것입니다..env노드가 호출된 현재 작업 디렉터리의 파일입니다.

.env형식이 느슨하거나 자유형입니다.

# Comments are permitted
FOO=123
BAR=${FOO}
BAZ=Basingstoke Round About

#Blank lines are no problem

참고: 다중 환경 변수를 설정하려면 스크립트가 다음과 같이 되어야 합니다.

  "scripts": {
    "start": "set NODE_ENV=production&& set MONGO_USER=your_DB_USER_NAME&& set MONGO_PASSWORD=DB_PASSWORD&& set MONGO_DEFAULT_DATABASE=DB_NAME&& node app.js",
  },

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

반응형