【发布时间】:2016-06-10 13:33:33
【问题描述】:
是否有带有 TypeScript 定义的“流程”变量的项目以使用 process.env.NODE_ENV?找不到任何地方。
【问题讨论】:
-
对我的开发环境没有任何作用,所以我只使用了npmjs.com/package/dotenv 包,现在它可以工作了。
标签: typescript
是否有带有 TypeScript 定义的“流程”变量的项目以使用 process.env.NODE_ENV?找不到任何地方。
【问题讨论】:
标签: typescript
'process' 变量的定义可以在默认的 node.js d.ts 中找到,从明确键入并添加到您的 typings.json 中,如下所示:
"node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts"
我认为特定的 NODE_ENV 变量没有任何定义。因为它只是一个约定(被 express link 广泛使用)并且 node.js 本身并不关心那个特定的环境变量。
【讨论】:
webpack-envDefinitelyTyped 搭配起来不会很好
节点 8 更新:
现在env 在DefinitelyTyped 中被声明为ProcessEnv。
env: ProcessEnv;
export interface ProcessEnv {
[key: string]: string | undefined;
}
TypeScript 2 支持 node.js 的 npm 包类型定义。它目前使用 DefinitivelyTyped node.d.ts。
npm install --save-dev @types/node
节点 8 前版本:
处理env is declared as any in DefinitelyTyped node.d.ts。
env: any;
【讨论】:
Property 'REDIS_SESSION_SECRET' is missing in type 'ProcessEnv' but required in type 'ProcessEnv'. [2741] 我的代码是const env: ProcessEnv = process.env
只需在使用前添加 process.env.NODE_ENV
declare var process : {
env: {
NODE_ENV: string
}
}
【讨论】:
@types/node)
使用来自通过 npm/yarn 确定类型的类型:
# Install the latest
npm install --save-dev @types/node
# or
yarn add @types/node --dev
# To install the right types for your version of node (e.g. 12 here)
npm install --save-dev @types/node@^12
yarn add @types/node@^12 --dev
在您的类型可用的情况下,对象process.env 应该在您的代码中可用。
process.env
您可以使用declaration merging 向process.env 添加新值。在你的项目中新建一个d.ts文件,然后添加:
declare global {
namespace NodeJS {
interface ProcessEnv {
NODE_ENV?: string
}
}
}
这会让你写process.env.NODE_ENV。我建议保留 ?除非您确认它已设置在库中的某个位置。
【讨论】:
如果你在 VSCode 中遇到这个错误,也许你只需要重新启动它。
【讨论】:
declare namespace NodeJS {
interface ProcessEnv {
[key: string]: string | undefined
NODE_ENV?: 'development' | 'production' | 'test'
}
}
把上面的代码放到你的文件global.d.ts
【讨论】:
如果您使用的是create-react-app your-app-test --template typescript
那么已经存在一个文件来设置你的环境变量。
文件名:react-app-env.d.ts 位于src 文件夹中。
然后您可以使用此模板在该文件中设置您的自定义 env 变量:
/// <reference types="react-scripts" />
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 {}
【讨论】: