2

我正在尝试将 node.js 应用程序部署到与 webpack 捆绑的 heroku。由于heroku日志,我面临以下错误:

错误 R10(启动超时)-> Web 进程未能在启动后 60 秒内绑定到 $PORT

应用程序不使用固定端口进行侦听。

app.listen(process.env.PORT || 3000, () => {
  log(`App is running:  http://localhost:${process.env.PORT || 3000}`, 'info');
});

我也尝试使用'0.0.0.0':

app.listen(process.env.PORT || 3000, '0.0.0.0' () => {
  log(`App is running:  http://localhost:${process.env.PORT || 3000}`, 'info');
});

我注意到,如果我将 webpack.definePlugin 与解析的 dotenv 一起使用,我会遇到这个问题,但如果我不使用它,一切都很好。

我有以下用于 webpack.definePlugin 的 .env 文件:

const fs = require('fs');
const paths = require('./paths');

const defaultVars = {
  NODE_ENV: process.env.NODE_ENV || 'development'
};

const stringifyEnv = (obj) => ({
  'process.env': Object.keys(obj).reduce((env, key) => {
    env[key] = JSON.stringify(obj[key]);
    return env;
  }, {})
});

module.exports = () => {
  if (fs.existsSync(paths.dotenv)) {
    const dotenv = require('dotenv').config();
    const env = { ...dotenv.parsed, ...defaultVars };
    return stringifyEnv(env);
  }

  return stringifyEnv(defaultVars);
};

试图在 devDependencies 中列出 dotenv。

你能告诉我有什么问题吗?

4

1 回答 1

0

我设法通过明确传递一个端口使其工作。

档案

web: node build/server/server.js --port $PORT

服务器.js

const argv = require('yargs').argv;
...
app.listen(argv.port || process.env.PORT || 3000, () => {
  log(`App is running:  http://localhost:${argv.port || process.env.PORT || 3000}`, 'info');
});

但它仍然没有回答上面的问题。

于 2019-08-06T11:59:30.187 回答