환경 변수에 대한 총결
준비 작업
환경 변수는 우리가 코드에서 처리하고 싶지 않은 변수로 우리가 쓴 코드가 실행 중인 환경과 연결될 수 있다.우리는 업무 중에 종종 환경 변수를 사용하지만, 특히 그 역할 영역 문제에 있어서는 그렇게 적절하지 않을 때가 많다.
가장 흔히 볼 수 있는 환경 변수의 설정은
.bash_profile
파일에서 export가 나오는 것입니다export AWS_SECRET_ACCESS_KEY=foo
export AWS_ACCESS_KEY_ID=bar
그리고 노드 프로그램(다른 프로그램에서 가져오는 방법이 있음)에서 직접 사용할 수 있습니다.
var secretAccessKey = process.env.AWS_SECRET_ACCESS_KEY;
var accessKeyId = process.env.AWS_ACCESS_KEY_ID;
이런 방식의 가장 큰 단점은 두 프로그램이 있으면 서로 다른accessKeyId와secretAccessKey가 필요하다는 것이다. 그러면 우리는 변수의 이름을 수정해야 한다. 예를 들어 접두사proA 를 붙여야 한다.accessKeyId 등 세 개, 심지어 더 많으면 이런 처리 방식은 우리가 원하는 것이 아닐 것이다
가장 이상적인 것은 모든 프로그램이 자신의 환경 변수 설정을 가지고 있다는 것이다. 다음은node,npm,webpack에서 환경 변수를 어떻게 사용하는지 살펴보자.
1. node에서 환경 변수 사용
우리가 흔히 볼 수 있는 방식은 이런 방식이다
NODE_ENV=production node index.js
이런 방식의 가장 큰 문제는 변수가 많아서 쓰기에 좀 길고 유지하기에 불편하다는 것이다.그래서 노드 프로그램을 쓰면 프로젝트 루트 디렉터리를 통해dotenv가 필요할 수도 있습니다.환경 변수를 유지하기 위한 env 파일
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
그리고 이렇게 사용할 수 있어요.
require('dotenv').config()
var db = require('db')
db.connect({
host: process.env.DB_HOST,
username: process.env.DB_USER,
password: process.env.DB_PASS
})
dotenv
preload 기능도 지원됩니다.코드에 이 문장require('dotenv').config()
을 남기고 싶지 않다는 것이다. 결벽증이 있는 사람에게는 참기 힘들기 때문에 노드의--require(-r) 옵션을 사용할 수 있다.node -r dotenv/config your_script.js
물론 웹 패키지의 프로젝트에서도dotenv를 사용할 수 있지만 가끔
webpack.DefinePlugin
만 기본적으로 사용할 수 있다2.npm에서 환경 변수 사용
npm가 환경 변수에 가장 많이 사용되는 것은 패키지입니다.json의scripts 모듈 중
위의 이 단락은 공식 문서에서 떼어낸 것이다. 바로 우리에게 패키지를 알려주는 것이다.json 파일의 키 값은 npm 로 설정됩니다package_예를 들어 패키지를 접두사로 하는 환경 변수.json 파일에 이런 단락
{"name":"foo", "version":"1.2.5"}
이 있으면 패키지 스크립트에서 $npm_package_name
변수를 사용할 수 있습니다. 그 값은 foo
입니다. 물론 js 코드에서도 사용할 수 있습니다process.env.npm_package_name
. , ,
예외가 있습니다.
config
모듈의 값은 npm_config_
접두사로 설정된 환경 변수로 위와 일치합니다.물론 만약 우리가 js 코드에서 패키지의 정보를 사용하기만 한다면, 리퀘스트를 통해 얻는 것이 더욱 편리할 것이다
const package = require('./package.json')
console.log(package.version)
{
scripts:{
"argv": "echo $npm_package_version",
"argv": "echo ${npm_package_version}",
}
}
우리는 또한 환경 변수를 설정할 수 있다. 우리가 흔히 보는 것은 바로 이렇다
// NODE_ENV , process.env.NODE_ENV
{
scripts:{
"build": "NODE_ENV=production webpack --config config/webpack/production.config.js"
}
}
물론 이것은 사실 모두 bash와 node의 지식 범주이다
3. 웹팩에서 환경 변수 사용
위의 node와 npm에서 설정한 환경 변수는 웹 패키지에서 모두 사용할 수 있지만 웹 패키지에서 우리는 DefinePlugin을 통해 정의하는 방식을 볼 수 있다
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: "production"
},
PRODUCTION: JSON.stringify(true),
RELEASE: JSON.stringify(process.env.RELEASE)
})
이런 정의 방식은 본질적으로 약간 유사하다
process.env.NODE_ENV = "production"
. 이런 js 코드가 직접 값을 부여하는 방식은 왜 유사한가. 왜냐하면 이것은 여전히 차이가 있기 때문이다. 차이점은build에서 나온 코드에서 process.env.NODE_ENV
가 직접 production
문자열로 바뀌는 것을 볼 수 있기 때문이다( : , AST
.환경 변수에 실제로 설정된 것이 아니기 때문에 우리는 환경 변수가 필요한 곳을 그것에 의존해서는 안 된다. 그렇지 않으면 효과가 없다4. 요약
사실 여기는 모두 node에 속하는 환경 변수에 속해야 한다. npm와 웹 패키지는 모두 node로 뛰기 때문에 node의 환경 변수의 설정 방식은 세 가지 모두 유효하다. 단지 npm와 웹 패키지 중 일부는 자신이 봉한 설정 방식이고 그 설정은 자신에게만 유효할 뿐이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.