TypeScript에서의 process.env 사용
TypeScript에서 노드 환경 변수를 읽는 방법은 무엇입니까?
사용하는 경우process.env.NODE_ENV
다음 오류가 발생하였습니다.
Property 'NODE_ENV' does not exist on type 'ProcessEnv'
설치 완료@types/node
하지만 소용이 없어.
인스톨@types/node
당신의 프로젝트에서, 당신은 TypeScript에 정확히 어떤 변수가 존재하는지 말할 수 있습니다.process.env
:
environment.d.ts
declare global {
namespace NodeJS {
interface ProcessEnv {
GITHUB_AUTH_TOKEN: string;
NODE_ENV: 'development' | 'production';
PORT?: string;
PWD: string;
}
}
}
// If this file has no import/export statements (i.e. is a script)
// convert it into a module by adding an empty export statement.
export {}
사용방법:
process.env.GITHUB_AUTH_TOKEN; // $ExpectType string
이 메서드는 IntelliSense를 제공하며 문자열 리터럴 유형도 활용합니다.
주의: 위의 스니펫은 모듈 증설입니다.모듈 증강을 포함하는 파일은 (스크립트가 아닌) 모듈이어야 합니다.모듈과 스크립트의 차이점은 모듈에 적어도1개의 Import/export 스테이트먼트가 있다는 것입니다.
TypeScript에서 파일을 모듈로 취급하려면 Import 스테이트먼트를 1개 추가합니다.뭐든지 될 수 있어요.심지어.
export {}
할 거다.
노드 프로세스에서 어떤 환경변수를 사용할 수 있을지는 보증되지 않습니다.NODE_ENV
변수는 노드 자체에 내장된 것이 아니라 Express에 의해 보급된 규칙일 뿐입니다.따라서 유형 정의에 포함시키는 것은 의미가 없습니다.대신 다음과 같이 정의합니다.
export interface ProcessEnv {
[key: string]: string | undefined
}
그 말은 즉process.env
문자열을 다시 얻기 위해 문자열로 색인화할 수 있습니다(또는undefined
(변수가 설정되어 있지 않은 경우).오류를 수정하려면 인덱스 구문을 사용해야 합니다.
let env = process.env["NODE_ENV"];
또는 jcalz가 코멘트에서 지적했듯이 TypeScript 2.2 이후를 사용하는 경우 위에 정의된 것과 같은 인덱스 가능한 유형에 도트 구문을 사용하여 액세스할 수 있습니다.이 경우 코드는 그대로 작동합니다.
사용하기 전에 바로 추가process.env.NODE_ENV
다음 행:
declare var process : {
env: {
NODE_ENV: string
}
}
이 경우 유형 어설션을 사용할 수 있습니다.
경우에 따라서는 TypeScript보다 가치에 대해 더 잘 알게 될 수도 있습니다.일반적으로 이 문제는 일부 엔티티의 유형이 현재 유형보다 더 구체적일 수 있다는 것을 알고 있을 때 발생합니다.
타이프 어설션은 컴파일러에게 "나를 믿어, 내가 뭘 하고 있는지 알아."라고 말하는 방법입니다.유형 어설션은 다른 언어의 유형 캐스트와 비슷하지만 특별한 데이터 검사나 재구성을 수행하지 않습니다.런타임에 영향을 주지 않고 컴파일러에 의해만 사용됩니다.TypeScript는 프로그래머인 사용자가 필요한 특별한 검사를 수행했다고 가정합니다.
예
const nodeEnv: string = (process.env.NODE_ENV as string);
console.log(nodeEnv);
또는 env-var 등의 라이브러리가 이 특정 목적에 더 적합할 수 있습니다.
"node.displaces에 환경변수를 로드 및 삭제하기 위해 올바른 입력이 필요합니다."
. 1. 을 한다..env
# Contents of .env file
AUTHENTICATION_API_URL="http://localhost:4000/login"
GRAPHQL_API_URL="http://localhost:4000/graphql"
를 장착합니다. 로딩.env
들어가다process.env
dotenv
이 합니다.dotenv
에 특화된 것을 process.env
이렇게 하다, , 하다, 하다라는 파일을 .config.ts
안에서src/
다음과 같이 디렉토리와 정보를 입력합니다.
// Contents of src/config.ts
import {config as configDotenv} from 'dotenv'
import {resolve} from 'path'
switch(process.env.NODE_ENV) {
case "development":
console.log("Environment is 'development'")
configDotenv({
path: resolve(__dirname, "../.env.development")
})
break
case "test":
configDotenv({
path: resolve(__dirname, "../.env.test")
})
break
// Add 'staging' and 'production' cases here as well!
default:
throw new Error(`'NODE_ENV' ${process.env.NODE_ENV} is not handled!`)
}
를 들어 "를 /index.ts를 Import해야 합니다.「src/index.ts」는 「Import」라고 합니다. import './config'
(다른 모든 수입품보다 우선)
하고 3을 합니다. ENV 수 env env env env envIProcessEnv
몇 후를 추가하여 선언된 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "IProcessEnv
변수 합니다..env.*
아래 은 . 아래 내용도 파일 내에 저장될 수 있습니다.src/config.ts
// More content in config.ts
const throwIfNot = function<T, K extends keyof T>(obj: Partial<T>, prop: K, msg?: string): T[K] {
if(obj[prop] === undefined || obj[prop] === null){
throw new Error(msg || `Environment is missing variable ${prop}`)
} else {
return obj[prop] as T[K]
}
}
// Validate that we have our expected ENV variables defined!
['AUTHENTICATION_API_URL', 'GRAPHQL_API_URL'].forEach(v => {
throwIfNot(process.env, v)
})
export interface IProcessEnv {
AUTHENTICATION_API_URL: string
GRAPHQL_API_URL: string
}
declare global {
namespace NodeJS {
interface ProcessEnv extends IProcessEnv { }
}
}
이것에 의해, IntelliSense/tslint 타입의 적절한 체크와 함께, 다양한 환경에의 도입시에 어느 정도의 온전함을 얻을 수 있습니다.
이는 노드가 아닌 ReactJS 앱에서도 작동합니다.JS 서버 앱).스텝 (2)는 생략할 수 있습니다.이것은, 다음의 조작에 의해서 처리되기 때문입니다.create-react-app
.
최신 버전의 타이프스크립트로 실행한 후:
npm install --save @types/node
하면 .process.env
직접적으로.
console.log(process.env["NODE_ENV"])
를 설정했을 경우, 예상되는 결과가 표시됩니다.NODE_ENV
.
가 있었던 은, 내가 하고 싶은 에서 사용하려고 하는 입니다.process.env
수입합니다.dotenv
를 호출합니다.config()
ㅇㅇㅇㅇ를 붙이는 마세요. 리리 、 잊잊 、 「 」!
합니다..env
import dotenv from 'dotenv';
dotenv.config();
export const YOUR_ATTRIBUTE = process.env.YOUR_ATTRIBUTE!;
여기에서는 process.env 값을 문자열로 가져오거나 그렇지 않으면 오류를 발생시키는 짧은 함수를 보여 줍니다.
보다 강력한(그러나 보다 큰) 것에 대해서는, 여기 있는 다른 사람들은 env-var를 제안하고 있습니다.
/**
* Returns value stored in environment variable with the given `name`.
* Throws Error if no such variable or if variable undefined; thus ensuring type-safety.
* @param name - name of variable to fetch from this process's environment.
*/
export function env(name: string): string {
const value = process.env[name];
if (!value) {
throw new Error(`Missing: process.env['${name}'].`);
}
return value;
}
그런 다음 다음과 같은 코드를 작성할 수 있습니다.
let currentEnvironment: string;
currentEnvironment = env('NODE_ENV');
하면 왜 해야 하는지 수 에게 도움이 될 거예요.proccess.env
변수가 컴파일러를 울리고 있습니다.
@types/node 설치:
npm i @types/node
env를 문자열로 포함하는 경우 다음을 수행합니다.
process.env.YOUR_ENV ?? ''
이중 물음표를 사용하면 늘/정의되지 않은지 확인할 수 있습니다.
- @types/node 를 를 합니다.
npm i @types/node
"types": [ "node" ]
합니다.compilerSection
★★★★★★ 。
다음은 envalid를 사용한 솔루션입니다(Node.js에서 환경변수를 검증하고 액세스합니다).
import { str, cleanEnv } from 'envalid'
const env = cleanEnv(process.env, {
clientId: str(),
clientSecret: str(),
})
// and now the env is validated and no longer undefined
const clientId = env.clientId
process.env 라고 입력합니다.YOUR_VAR
예:
mongoose
.connect(String(process.env.MONGO_URL), {
useNewUrlParser: true,
useFindAndModify: false
})
.then(() => console.log('DB connected'))
.catch((err: any) => console.error(err));
이전 응답을 보완하고 이 문제를 해결한 후 @types/node를 설치해도 이 답변을 찾을 수 있었습니다.즉, 새로고침 창을 실행합니다.
의 tsconfig를 하고 있는 는, 가 있는 경우가 ."...다만, tscript 언어 서버가 이전 버전의 tsconfig를 계속 사용하고 있는 경우는, 타입 스크립트 언어 서버를 재기동할 필요가 있는 경우가 있습니다. Code에서 Code를 실행합니다.Ctrl+Shift+P
★★★★★★★★★★★★★★★★★」Reload Window
★★★★★★★★★★★★★★★★★」TypeScript: Restart TS server
능".""."".""."..."
node .env를 하는 가장 typscript "node process.env"를 하여 컴파일하는 입니다.tsc
합니다.ENV
var를 하십시오.) ( 저먼확 ( )tsconfig.ts
것, 의 이름입니다. 이 파일을 사용하고 .dist
와 「」로 합니다.index.js
②) :
cd my-typescriptproject
tsc
NODE_ENV=test node ./dist/index.js
주의: 웹 앱이 있고 웹 팩을 사용하는 경우.정의할 DefinePluginprocess.env
창문에 표시되는 입력은 다음과 같습니다.
declare namespace process {
let env: {
// this is optional, if you want to allow also
// other values than the ones listed below, they will have type
// string | undefined, which is the default
[key: string]: string
commit_hash: string
build_time: string
stage: string
version: string
// ... etc.
}
}
대한 이름을 Create App으로 .REACT_APP_
자세한 내용은 이쪽:https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables
global.d.ts와 같은 파일을 만듭니다.
declare global {
namespace NodeJS {
interface ProcessEnv {
SECRET: string;
}
}
}
export {};
타입 가드 기능을 사용할 수도 있습니다.이와 같이 반환 타입이 있습니다.
parameterName is string
예.
function isEnvVarSpecified(envVar: string | undefined): envVar is string {
if(envVar === undefined || envVar === null) {
return false;
}
if(typeof envVar !== 'string'){
return false;
}
return true;
}
이를 타입 가드라고 부를 수 있습니다.
function myFunc() {
if(!isEnvVarSpecified(process.env.SOME_ENV_VAR')){
throw new Error('process.env.SOME_ENV_VAR not found')
}
// From this point on the ts compiler won't complain about
// process.env.SOME_ENV_VAR being potentially undefined
}
이것을 간략화하기 위해 모듈을 작성했습니다.의존성이 없기 때문에 상당히 가볍습니다.하며, 「dotenv」를할 수 .process.env
env.from
을 사용하다
몇 가지 답변에서 이미 언급되어 있지만, 예를 들어 다음과 같습니다.
실/npm을 사용하여 설치합니다.
npm install env-var --save
그런 다음 변수를 읽습니다.
import * as env from 'env-var'
// Read NODE_ENV and verify that:
// 1) it is set using the required() function
// 2) it is either 'dev' or 'prod'
// 3) throw a runtime exception if conditions #1 or #2 fail
const environment = env.get('NODE_ENV').required().asEnum(['dev', 'prod'])
// Intellisense will suggest 'dev' or 'prod'
if (environment === 'dev') {
console.log('yep, this is dev')
} else {
console.log('looks like this is prod')
}
또는 다음 중 하나:
import { get } from 'env-var'
// Read the GitHub token. It could be undefined
const githubToken = get('GITHUB_TOKEN').asString()
// Read MAX_CONCURRENCY, or default to 5. Throw an error if it's
// not set to a positive integer value
const concurrencyLimit = get('MAX_CONCURRENCY').default(5).asIntPositive()
function callGitApi (token: string, concurrency: number) { /* implementation */ }
// TS Error: Argument of type 'string | undefined' is not assignable to
// parameter of type 'string'.
callGitApi(githubToken, concurrencyLimit)
언급URL : https://stackoverflow.com/questions/45194598/using-process-env-in-typescript
'source' 카테고리의 다른 글
WordPress에서 NoSQL 데이터베이스를 사용할 수 있습니까? (0) | 2023.03.01 |
---|---|
페이지를 찾을 수 없으므로 permalinks를 'Postname'으로 변경 (0) | 2023.03.01 |
WordPress 사용자 지정 게시 유형 부모/자녀 관계 (0) | 2023.03.01 |
다음/이전 링크를 통해 페이지 형제 보기 (0) | 2023.03.01 |
wordpress 또는 asp.net mvc에서 acme-module을 암호화합니다. (0) | 2023.03.01 |