node.js - 在 Google Cloud App Engine 上部署 Angular Universal 应用程序时出错
问题描述
当我在浏览器的 Cloud Shell 中运行 gcloud app deploy 时,我收到一个错误 - 一遍又一遍地找不到模块“/srv/server.js”。当我查看我的应用程序 URL 时,我也会收到 500 服务器错误。
我有一个基本的 Angular 应用程序,其中包含一个延迟加载的路径/组件,仅用于测试。ng build --prod && npm run build:ssr
我安装了 Angular Universal,然后使用将以下文件放在 dist 文件夹中的命令在本地构建了我的应用程序:
- browser
- all the usual Angular files like index.html etc etc
- server
- main.js
- app.yaml
- package.json
- prerender.js
- server.js
我在 Google App Engine 上创建了一个基本应用程序,并通过单击 App Engine 控制台中的 Cloud Shell 按钮登录到我的应用程序。
然后我单击了编辑器按钮,您可以在其中浏览文件并在浏览器窗口中编写命令。
在我的 app.yaml 文件中,我有:
runtime: nodejs10
在我的 package.json 文件中,我有:
{
"scripts": {
"start": "node server.js"
}
}
因此,在 Cloud Shell 中,我转到根目录是我所有文件所在的位置以及我的 app.yaml 文件所在的位置,然后运行gcloud app deploy
.
然后它将我的文件上传到存储桶,然后运行节点 server.js 脚本。云 shell 控制台中没有任何反应,但是当我查看错误日志gcloud app logs tail -s default
并转到我的应用程序 URL 时,它显示 500 服务器错误并记录错误:一遍又一遍地找不到模块“/srv/server.js”。
internal/modules/cjs/loader.js:638
Error: Cannot find module '/srv/server.js' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15) at Function.Module._load (internal/modules/cjs/loader.js:562:25) at Function.Module.runMain (internal/modules/cjs/loader.js:831:12) at startup (internal/bootstrap/node.js:283:19) at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
任何帮助将不胜感激。
谢谢!
我希望看到我的 Angular 应用在 App Engine Cloud URL 上运行。
解决方案
您可以尝试在 package.json 中指向 main 吗?
这似乎是一个类似的问题,您也可以在这里看到如何做到这一点。链接。
如果这不起作用,请发布您的要求,以便我们进一步了解。
希望这可以帮助。
更新:
也许这可以帮助您更好地理解问题。
首先,Node 查找 package.json 文件并检查它是否包含 main 属性。它将用于指向包目录中的一个文件,该文件将成为入口点。如果 main 属性不存在,则 Node 依次尝试 index.js、index.json 和 index.node。
Index.js 是 Node 查找的默认文件。您没有 index.js。因此,您必须主要指定您使用的是什么,以便它知道入口点。
如果 server.js 是启动服务器的文件,并且它位于文件夹的根目录中,请像这样尝试。
如果 server.js 在另一个文件夹中,请尝试 /'folder'/server.js 在主文件夹中。
"main": "server.js",
"scripts": {
"start": "node server.js"
},
如果您在问题中提到的 main.js 文件上启动服务器,请将其指向那里。
我链接的问题包含有人说他们必须同时使用 start 和 main 来解决他们的问题,所以我会尝试两种方式。
让我知道。
问题的解决方案:
我们用了
“start”:package.json 中的“node server.js”
之后由于
错误:无法在视图目录“/app/dist/browser”中查找视图“索引”
我们不得不将文件夹结构重新排列为以下内容。
dist
- browser
- server
server.js
app.yaml
package.json
推荐阅读
- jenkins - 如何触发分支内的Jenkins作业特定文件夹
- sql - MS Access:如何找到所有字段的最大长度?
- flutter - 如何在继续之前等待实际建立 ble 连接
- html - CSS 中完美的矩形 DIV 包装器
- flutter - 在 DateTime.parse() 中允许空字符串
- python - 如何在熊猫数据框列中找到与 O(logn) 中的输入值 x 最接近的 k 个值?
- bash - 读取输入参数并使用 xargs 传递给 sed
- r - seq.int(rx[1L], rx[2L], length.out = nb) 中的 Pheatmap 错误
- c++ - 存储 Lua 函数以供以后在 C++ 中使用
- java - 重启后 Spring 数据休息资源不一致地“发现”