前端analysis | What,Why,Who,When,Where,How

《Node》- 话说process.env的那些事儿.md

2020-04-13

node环境变量

  • process 是node的全局变量,类似浏览器的window
  • env 是process的一个属性

process.env的用法

修改启动端口

1
2
3
4
5
6
const http = require('http');
const port = process.env.PORT || 3000;
const server = http.createServer((req, res) => res.send('Ahoy!'));
server.listen(port,() => {
console.log(`server start at ${port}`);
});

dotenv

1
npm install dotenv --save
  • 项目根路径添加,.env 文件

    1
    PORT=3009
  • 解析.env文件,存放到process.env中

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    console.log('No value for PORT yet:', process.env.PORT);
    if (process.env.NODE_ENV !== 'production') {
    require('dotenv').config(); # 这一步不可以省略
    }
    const http = require('http');
    console.log('Now the value for PORT is:', process.env.PORT);
    const port = process.env.PORT || 3000;
    const server = http.createServer((req, res) => res.send('HELLO!'));
    server.listen(port,() => {
    console.log(`server start at ${port}`);
    });

  • 如果env不放在根路径下,怎么办?

  • 很明显,配置没有生效

  • 怎么才能生效?
    config配置path,指定到具体路径即可

dotenv预加载

  • 不需要再开始引入 require(‘dotenv’).config()
    1
    node -r dotenv/config example.js dotenv_config_path=<yourpath>/config/.env

不同环境如何创建文件

  • 推荐写法
    1
    2
    3
    4
    .env
    .env.dev
    .env.test
    .env.prod
  • 不同环境的,fs读取覆盖生效
    1
    2
    3
    4
    5
    6
    const fs = require('fs')
    const dotenv = require('dotenv')
    const envConfig = dotenv.parse(fs.readFileSync('.env.test'))
    for (const k in envConfig) {
    process.env[k] = envConfig[k]
    }

更多推荐

使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏