我的服务器文件中未定义process.env.NODE_ENV

时间:2020-03-06 03:55:03

标签: javascript node.js reactjs

我在开发时是否必须自行设置process.env.NODE_ENV?当我拥有构建文件夹时,节点是否不会将.env设置为生产,而在本地环境中时节点是否将其设置为开发?我印象中很多图书馆都将其用作优化工具

例如在我的app.js文件中,console.log代码显示为未定义

console.log(process.env.NODE_ENV)

const express = require('express');
const app = express();
const mongoose = require('mongoose');
const postsRouter = require('./routes/Post_Route');
const path = require("path")


// parse body on every request //
app.use(express.json());
app.use(express.urlencoded({ extended: false }));

//Routes
app.use('/api/posts', postsRouter);



// Serve up static assets (usually on heroku)
if (process.env.NODE_ENV === 'production') {
    app.use(express.static(path.join(__dirname, 'client', 'build')));
    }

console.log(process.env.NODE_ENV)

if (process.env.NODE_ENV === 'production') {

    console.log(`Mongoose is in  production === ${process.env.NODE_ENV}  mongo uri is ${process.env.MONGO_URI_PROD}`)
    // connect DB

当我在.env文件中设置NODE.ENV时,我将其视为开发中,是否要在开发中手动进行设置,然后在heroku中将NODE_ENV设置为生产中?

6 个答案:

答案 0 :(得分:1)

在package.json中

{
  ...
  "scripts": {
    "start": "NODE_ENV=production node ./app"
  }
  ...
}

答案 1 :(得分:1)

足够遗憾的是。没有像“ node script.js --production”这样的命令。相反,只需在Linux系统export NODE_ENV=production上运行此命令,这将为您带来好处。另外,您可以将启动命令更改为NODE_ENV=production node script.js,这将使您可以进行生产测试。

答案 2 :(得分:0)

NODE_ENV=production node script.js应该可以工作。

但是在Windows上不起作用。因此,我建议使用cross-env之类的程序包使其在所有平台上均可工作。

{
  "scripts: {
    "start": "cross-env NODE_ENV=production node script.js"
  }
}

答案 3 :(得分:0)

您还可以使用DefinePlugin在Webpack配置中对其进行设置。在Windows上也可以使用

plugins: [
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': '"production"',
    }),
  ],

答案 4 :(得分:-1)

您需要在服务器中定义环境变量。如果您使用的是Linux,请使用printenv进行检查。如果变量不在列表中,则需要定义

答案 5 :(得分:-1)

我认为我会说npm install dotenv

文档位于https://www.npmjs.com/package/dotenv

然后将其导入您的输入脚本文件中 import dotenv from "dotenv" 并且尽早调用dotenv.config(),这会将所有变量加载到.env文件中。