node.js - 在heroku上部署Nodejs+Express+React+Webpack应用
问题描述
我已经使用 node js、express、webpack、react 和 socket io 制作了一个 web 应用程序,我想将它部署在 heroku 上。当我尝试它时,我可以访问该网站,但它向我显示一条错误消息:
不能获取 /
这是我的配置:
"scripts": {
"start": "npm run dev",
"build": "webpack --mode production",
"client": "webpack-dev-server --mode development --devtool inline-source-map --hot",
"server": "nodemon src/server/index.js",
"dev": "concurrently \"npm run server\" \"npm run client\"",
"heroku-postbuild": "NPM_CONFIG_PRODUCTION=false npm install && npm run build"
}
启动脚本是node src/server/index.js
在我更改它之前,因为我运行npm run dev
以在本地启动我的应用程序。
这是我的存储库: http: //git.kamal-allali.fr/kamal/prog_web_5a
这是heroku链接:https ://fast-earth-60949.herokuapp.com
这是heroku日志:
2018-11-05T21:42:44.984679+00:00 app[web.1]: 1建于:11/05/2018 9:42:44 PM
2018-11-05T21:42:44.984681+00:00 app[web.1]: 1 资产
大小块块名称2018-11-05T21:42:44.984683+00:00 app[web.1]: 1 bundle.js 7.42 MiB main [emitted] main
2018-11-05T21:42:44.984685+00:00 app[web.1]: 1 favicon.ico 40.4 KiB [发出]
2018-11-05T21:42:44.984686+00:00 app[web.1]: 1 index.html 717 bytes [发出]
2018-11-05T21:42:44.984688+00:00 app[web.1]: 1入口点 main = bundle.js
2018-11-05T21:42:44.984710+00:00 app[web.1]: 1 [./node_modules/loglevel/lib/loglevel.js] 7.68 KiB {main} [内置]
2018-11-05T21:42:44.984712+00:00 app[web.1]: 1 [./node_modules/react-dom/index.js] 1.33 KiB {main} [内置]
2018-11-05T21:42:44.984713+00:00 app[web.1]: 1 [./node_modules/react/index.js] 190 字节 {main} [内置] 2018-11-05T21:42:44.984715+ 00:00 app[web.1]: 1 [./node_modules/url/url.js] 22.8 KiB {main} [内置]
2018-11-05T21:42:44.984718+00:00 app[web.1]: 1 [./node_modules/webpack-dev-server/client/index.js? http://localhost:3000] (webpack)-dev-server/client? http://localhost:3000 7.78 KiB {main} [内置]
2018-11-05T21:42:44.984720+00:00 app[web.1]: 1 [./node_modules/webpack-dev-server/client/overlay.js] (webpack)-dev-server/client/overlay. js 3.58 KiB {main} [内置]
2018-11-05T21:42:44.984723+00:00 app[web.1]: 1 [0] multi (webpack)-dev-server/client?http://localhost:3000 (webpack)/hot/dev-server.js ./src/client/index.js 52 字节 {main} [内置]
2018-11-05T21:42:44.984724+00:00 app[web.1]: 1 [./node_modules/webpack-dev-server/client/socket.js] (webpack)-dev-server/client/socket. js 1.05 KiB {main} [内置]
2018-11-05T21:42:44.984726+00:00 app[web.1]: 1 [./node_modules/webpack-dev-server/node_modules/strip-ansi/index.js] (webpack)-dev-server/ node_modules/strip-ansi/index.js 161 字节 {main} [内置]
2018-11-05T21:42:44.984728+00:00 app[web.1]: 1 [./node_modules/webpack/hot sync ^./log$] (webpack)/hot sync nonrecursive ^./log$ 170 bytes {main} [内置]
2018-11-05T21:42:44.984730+00:00 app[web.1]: 1 [./node_modules/webpack/hot/dev-server.js] (webpack)/hot/dev-server.js 1.61 KiB {主要} [内置]
2018-11-05T21:42:44.984732+00:00 app[web.1]: 1 [./node_modules/webpack/hot/emitter.js] (webpack)/hot/emitter.js 75 字节 {main} [内置]
2018-11-05T21:42:44.984733+00:00 app[web.1]: 1 [./node_modules/webpack/hot/log-apply-result.js] (webpack)/hot/log-apply-result. js 1.27 KiB {main} [内置]
2018-11-05T21:42:44.984735+00:00 app[web.1]: 1 [./src/client/Layout.js] 4.33 KiB {main} [内置]
2018-11-05T21:42:44.984736+00:00 app[web.1]: 1 [./src/client/index.js] 205 字节 {main} [内置]
2018-11-05T21:42:44.984738+00:00 app[web.1]: 1 + 349 个隐藏模块
2018-11-05T21:42:44.984740+00:00 app[web.1]: 1个子 html-webpack-plugin 用于“index.html”:
2018-11-05T21:42:44.984742+00:00 应用 [web.1]: 1 1 资产
2018-11-05T21:42:44.984743+00:00 app[web.1]: 1 入口点未定义 = index.html
2018-11-05T21:42:44.984745+00:00 app[web.1]: 1
[./node_modules/html-webpack-plugin/lib/loader.js!./public/index.html] 828 字节 {0 } [内置]2018-11-05T21:42:44.984746+00:00 app[web.1]: 1
[./node_modules/lodash/lodash.js] 527 KiB {0} [内置]2018-11-05T21:42:44.984748+ 00:00 app[web.1]: 1
[./node_modules/webpack/buildin/global.js] (webpack)/buildin/global.js 489 字节 {0} [内置]2018-11-05T21:42:44.984749+00:00 app[web.1]: 1
[./node_modules/webpack/buildin/module.js] (webpack)/buildin/module.js 497 字节 {0} [内置]2018-11-05T21:42:44.984751+00:00 app[web.1]: 1ℹ「wdm」:编译成功。
2018-11-05T22:16:20.551630+00:00 heroku[web.1]:空闲
2018-11-05T22:16:20.552092+00:00 heroku[web.1]:状态从上变为下
2018-11-05T22:16:21.411951+00:00 heroku[web.1]:使用 SIGTERM 停止所有进程
2018-11-05T22:16:21.808625+00:00 heroku[web.1]:进程以状态 143 退出
2018-11-06T08:35:42.000000+00:00 app[api]:构建由用户 kamal.allali@outlook.fr
2018-11-06T08:36:36.888512+00:00 heroku[web.1]:状态从下降到开始
2018-11-06T08:36:36.713630+00:00 app[api]:由用户 kamal.allali@outlook.fr 部署 d62783d3
2018-11-06T08:36:36.713630+00:00 app[api]:由用户 kamal.allali@outlook.fr 创建的版本 v12
2018-11-06T08:36:40.000000+00:00 app[api]:构建成功
2018-11-06T08:36:42.010068+00:00 heroku[web.1]:使用命令启动进程
npm start
2018-11-06T08:36:45.324322+00:00 应用[web.1]:
2018-11-06T08:36:45.324353+00:00 app[web.1]: > projet-web-5a@1.0.0 开始 /app
2018-11-06T08:36:45.324355+00:00 应用 [web.1]: > npm 运行开发
2018-11-06T08:36:45.324356+00:00 应用[web.1]:
2018-11-06T08:36:45.753063+00:00 应用[web.1]:
2018-11-06T08:36:45.753112+00:00 app[web.1]: > projet-web-5a@1.0.0 dev /app
2018-11-06T08:36:45.753114+00:00 app[web.1]: > 同时“npm 运行服务器”“npm 运行客户端”
2018-11-06T08:36:45.753116+00:00 应用[web.1]:
2018-11-06T08:36:47.147860+00:00 应用 [web.1]: 1
2018-11-06T08:36:47.147877+00:00 app[web.1]: 1 > projet-web-5a@1.0.0 客户端/app
2018-11-06T08:36:47.147879+00:00 app[web.1]: 1 > webpack-dev-server --mode development --devtool inline-source-map --hot
2018-11-06T08:36:47.147881+00:00 应用 [web.1]: 1
2018-11-06T08:36:47.172481+00:00 应用 [web.1]: [0]
2018-11-06T08:36:47.172485+00:00 app[web.1]: [0] > projet-web-5a@1.0.0 服务器/app
2018-11-06T08:36:47.172487+00:00 应用 [web.1]: [0] > nodemon src/server/index.js
2018-11-06T08:36:47.172488+00:00 应用 [web.1]: [0]
2018-11-06T08:36:47.672353+00:00 应用 [web.1]: [0] [nodemon] 1.18.4
2018-11-06T08:36:47.673281+00:00 app[web.1]:[0][nodemon]随时重启,输入
rs
2018-11-06T08:36:47.673747+00:00 app[web.1]: [0] [nodemon] 观看:/app/src/server/**/*
2018-11-06T08:36:47.674424+00:00 app[web.1]: [0] [nodemon] 开始
node src/server/index.js
2018-11-06T08:36:47.963706+00:00 app[web.1]:[0] 监听端口 45437
2018-11-06T08:36:48.299567+00:00 heroku[web.1]:状态从开始变为向上
2018-11-06T08:36:48.679674+00:00 app[web.1]: 1 clean-webpack-plugin: /app/dist 已被删除。
2018-11-06T08:36:48.905698+00:00 app[web.1]: 1 ℹ 「wds」: 项目在http://localhost:3000/运行
2018-11-06T08:36:48.906031+00:00 app[web.1]: 1 ℹ 「wds」:webpack 输出来自 /
2018-11-06T08:36:48.956210+00:00 app[web.1]: 1 ⚠ 「wds」:无法打开浏览器。如果您在无头环境中运行,请不要使用 --open 标志
2018-11-06T08:36:55.276089+00:00 heroku[路由器]: at=info method=GET path="/" host=fast-earth-60949.herokuapp.com request_id=2474b83b-65ce-43b4-a54f- 6851d5f55a7c fwd="78.112.168.129" dyno=web.1 连接=0ms 服务=9ms 状态=404 字节=360 协议=https
2018-11-06T08:36:57.303048+00:00 app[web.1]: 1 ℹ 「wdm」: 哈希: 6de9947fac0c16b70883
2018-11-06T08:36:57.303058+00:00 应用程序 [web.1]:1版本:webpack 4.19.1
2018-11-06T08:36:57.303061+00:00 app[web.1]: 1时间: 8512ms
2018-11-06T08:36:57.303063+00:00 app[web.1]: 1建于:11/06/2018 8:36:57 AM
2018-11-06T08:36:57.303066+00:00 app[web.1]: 1 资产
大小块块名称2018-11-06T08:36:57.303069+00:00 app[web.1]: 1 bundle.js 7.42 MiB main [emitted] main
2018-11-06T08:36:57.303071+00:00 app[web.1]: 1 favicon.ico 40.4 KiB [发出]
2018-11-06T08:36:57.303073+00:00 app[web.1]: 1 index.html 717 bytes [发出]
2018-11-06T08:36:57.303074+00:00 app[web.1]: 1入口点 main = bundle.js
2018-11-06T08:36:57.303077+00:00 app[web.1]: 1 [./node_modules/loglevel/lib/loglevel.js] 7.68 KiB {main} [内置]
2018-11-06T08:36:57.303078+00:00 app[web.1]: 1 [./node_modules/react-dom/index.js] 1.33 KiB {main} [内置]
2018-11-06T08:36:57.303080+00:00 app[web.1]: 1 [./node_modules/react/index.js] 190 字节 {main} [内置] 2018-11-06T08:36:57.303082+ 00:00 app[web.1]: 1 [./node_modules/url/url.js] 22.8 KiB {main} [内置]
2018-11-06T08:36:57.303084+00:00 app[web.1]: 1 [./node_modules/webpack-dev-server/client/index.js? http://localhost:3000] (webpack)-dev-server/client? http://localhost:3000 7.78 KiB {main} [内置]
2018-11-06T08:36:57.303087+00:00 app[web.1]: 1 [./node_modules/webpack-dev-server/client/overlay.js] (webpack)-dev-server/client/overlay. js 3.58 KiB {main} [内置]
2018-11-06T08:36:57.303090+00:00 app[web.1]: 1 [0] multi (webpack)-dev-server/client?http://localhost:3000 (webpack)/hot/dev-server.js ./src/client/index.js 52 字节 {main} [内置]
2018-11-06T08:36:57.303091+00:00 app[web.1]: 1 [./node_modules/webpack-dev-server/client/socket.js] (webpack)-dev-server/client/socket. js 1.05 KiB {main} [内置]
2018-11-06T08:36:57.303093+00:00 app[web.1]: 1 [./node_modules/webpack-dev-server/node_modules/strip-ansi/index.js] (webpack)-dev-server/ node_modules/strip-ansi/index.js 161 字节 {main} [内置]
2018-11-06T08:36:57.303095+00:00 app[web.1]: 1 [./node_modules/webpack/hot sync ^./log$] (webpack)/hot sync nonrecursive ^./log$ 170 bytes {main} [内置]
2018-11-06T08:36:57.303099+00:00 app[web.1]: 1 [./node_modules/webpack/hot/dev-server.js] (webpack)/hot/dev-server.js 1.61 KiB {主要} [内置]
2018-11-06T08:36:57.303100+00:00 app[web.1]: 1 [./node_modules/webpack/hot/emitter.js] (webpack)/hot/emitter.js 75 字节 {main} [内置]
2018-11-06T08:36:57.303102+00:00 app[web.1]: 1 [./node_modules/webpack/hot/log-apply-result.js] (webpack)/hot/log-apply-result. js 1.27 KiB {main} [内置]
2018-11-06T08:36:57.303104+00:00 app[web.1]: 1 [./src/client/Layout.js] 4.33 KiB {main} [内置]
2018-11-06T08:36:57.303106+00:00 app[web.1]: 1 [./src/client/index.js] 205 字节 {main} [内置]
2018-11-06T08:36:57.303108+00:00 app[web.1]: 1 + 349 个隐藏模块
2018-11-06T08:36:57.303109+00:00 app[web.1]: 1个子 html-webpack-plugin 用于“index.html”:
2018-11-06T08:36:57.303111+00:00 应用 [web.1]: 1 1 资产
2018-11-06T08:36:57.303113+00:00 app[web.1]: 1 入口点未定义 = index.html
2018-11-06T08:36:57.303115+00:00 app[web.1]: 1
[./node_modules/html-webpack-plugin/lib/loader.js!./public/index.html] 828 字节 {0 } [内置]2018-11-06T08:36:57.303116+00:00 app[web.1]: 1
[./node_modules/lodash/lodash.js] 527 KiB {0} [内置]2018-11-06T08:36:57.303118+ 00:00 app[web.1]: 1
[./node_modules/webpack/buildin/global.js] (webpack)/buildin/global.js 489 字节 {0} [内置]2018-11-06T08:36:57.303119+00:00 app[web.1]: 1
[./node_modules/webpack/buildin/module.js] (webpack)/buildin/module.js 497 字节 {0} [内置]2018-11-06T08:36:57.303457+00:00 app[web.1]: 1ℹ「wdm」:编译成功。
解决方案
您需要将节点版本添加到您的package.json
.
例子:
"engines": {
"node": "10.11.0"
}
我在评论中回答了,但这不是最好的方法,所以我会在这里编辑。
由于您正在尝试提供静态内容,请尝试使用静态中间件。
消除
app.get('*', (req,res) =>{
res.sendFile(path.join(__dirname,'../../public/index.html'));
});
并添加
app.use(express.static(path.join(__dirname,'../../public')));
第二次编辑。
您需要构建项目并提供文件夹,通常是 dist 或 build 文件夹。
为此,您有两种选择,一种是在将更改发布到 heroku 之前构建项目,但这可能会有点乏味。
另一种选择是执行安装后脚本,以便在 heroku 执行 npm install 后构建项目,并使用最新更改创建 dist 或 build 文件夹。
"postinstall": "npm run build"
如果您不希望每次执行 npm install 时都运行脚本,您可以在 heroku 中使用 if-env 和环境变量。
"postinstall": "if-env NODE_ENV=production && npm run build"
一旦您知道在构建时正在创建哪个文件夹,请更改下一行。
app.use(express.static(path.join(__dirname,'path to the folder with the prod build')));
推荐阅读
- ruby-on-rails - 我可以用 number_of_days.days.ago.to_date 替换 (Date.current - created_at.to_date).to_i <= number_of_days 吗?这是个好主意吗?
- android - 刚刚添加了新片段,但它在 android studio 中显示为灰色?
- node.js - at=错误代码=H10 desc="应用程序崩溃"方法=获取路径="/"
- python - 温度换算表
- c# - 玩家跳到平台边缘后滑下平台
- elasticsearch - elasticsearch - 一秒的刷新间隔
- python - 模拟依赖
- mysql - MySql:WHERE NOT EXISTS(跳过重复项)与 group by
- python - 循环遍历唯一值以比较 Pandas 中的组
- python-3.x - 如何在 xgboost 中从最佳迭代中保存模型?