在生产环境模式下运行node.js

h9a6wy2h  于 2023-01-01  发布在  Node.js
关注(0)|答案(3)|浏览(186)

我正在学习Node.js,这是我的第一个代码。
我使用下面的代码创建了一个名为server.js的文件
server.js

const express = require('express');
        const dotenv = require('dotenv');

        //load env vars
        dotenv.config({ path: './config/config.env'});

        const app = express();

        const PORT = process.env.PORT || 5000;

        app.listen(
            PORT,
            console.log(`Server running in ${process.env.NODE_ENV} mode on port ${PORT}`)
        );

我的package.json文件中有此部分
package.json

"scripts": {
            "start": "NODE_ENV=production node server",
            "dev": "nodemon server"
          },

下面是我的config.env文件的内容

NODE_ENV=development
        PORT=5000

当我运行npm run dev时,一切都很好,并且运行正常
当我运行npm start来运行生产时,我得到下面的错误。
'NODE_ENV'未被识别为内部或外部命令、可操作程序或批处理文件。
如何解决此问题?我需要运行npm start

bwntbbo3

bwntbbo31#

根据错误信息,您正在Windows中运行此程序。您需要使用Set来设置环境变量。

"scripts": {
            "start": "Set NODE_ENV=production&node server",
            "dev": "nodemon server"
          }

但是,以这种方式设置环境变量的安全性较低,并且依赖于平台。换句话说,任何访问服务器文件系统的攻击者都可以通过修改package.json来设置任何环境变量。此外,如果您决定稍后将生产迁移到Linux主机,启动脚本将再次中断。
因此,最好的做法是通过主机配置设置来设置环境变量,不同的云提供商提供了不同的方法。
另外,您可能根本不需要使用npm来运行脚本,您可以直接在shell中调用node server

relj7zay

relj7zay2#

解决此问题的简单方法:

npm安装--跨环境保存开发
“start”:“跨环境NODE_ENV=生产节点服务器”

这意味着您不必担心平台

阅读更多:https://www.npmjs.com/package/cross-env

gudnpqoy

gudnpqoy3#

对于Windows:

"scripts": {
  "start": "node server.js",
  "dev": "set NODE_ENV=DEVELOPMENT && node server",
  "prod": "set NODE_ENV=PRODUCTION && node server"
}

对于UNIX和其他操作系统:

"scripts": {
  "start": "node server.js",
  "dev": "export NODE_ENV=DEVELOPMENT && node server",
  "prod": "export NODE_ENV=PRODUCTION && node server"
}

相关问题