在 Google Cloud App Engine 上部署 Angular 通用应用程序时出错
Error when deploying Angular Universal app on Google Cloud App Engine
当我在浏览器中 运行 gcloud app deploy in Cloud Shell 时,我一遍又一遍地收到错误 - 找不到模块 '/srv/server.js'。我在查看我的应用程序时也收到 500 服务器错误 URL。
我有一个基本的 Angular 应用程序,其中有一个延迟加载 path/component 仅用于测试。我安装了 Angular Universal,然后使用命令 ng build --prod && npm run build:ssr
在本地构建了我的应用程序,该命令将以下文件放入 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 控制台中的云 Shell 按钮登录到我的应用程序。
然后我单击了编辑器按钮,您可以在其中浏览文件并在浏览器中编写命令window。
在我的 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)
如有任何帮助,我们将不胜感激。
谢谢!
我希望在 App Engine Cloud URL 上看到我的 Angular 应用 运行ning。
你能尝试在你的 package.json 中点一个 main 吗?
这似乎是一个类似的问题,您也可以在此处查看如何执行此操作。 。
如果这不起作用,请post您是如何满足您的要求的,以便我们进一步查看。
希望这对您有所帮助。
更新:
也许这可以帮助您更好地理解问题。
First, Node looks for a package.json file and checks if it contains a main property. It will be used to point a file inside the package directory that will be the entry point. If main property does not exist, then Node tries in order index.js, index.json and index.node.
Index.js 是 Node 寻找的默认值。您没有 index.js。因此,您必须在 main 中指定您使用的是什么,以便它知道入口点。
如果 server.js 是启动服务器的文件,并且它在文件夹的根目录中,请尝试这样。
如果 server.js 在另一个文件夹中,请在主文件夹中尝试 /'folder'/server.js。
"main": "server.js",
"scripts": {
"start": "node server.js"
},
如果您在问题中提到的 main.js 文件上启动服务器,请将其指向那里。
我链接的问题包含某人的评论,说他们必须同时使用 start 和 main 来解决他们的问题,所以我会尝试两种方法。
告诉我。
问题的解决方案:
我们用了
"start": "node server.js" in the package.json
之后由于
Error: Failed to lookup view "index" in views directory
"/app/dist/browser"
我们不得不将文件夹结构重新安排如下。
dist
- browser
- server
server.js
app.yaml
package.json
当我在浏览器中 运行 gcloud app deploy in Cloud Shell 时,我一遍又一遍地收到错误 - 找不到模块 '/srv/server.js'。我在查看我的应用程序时也收到 500 服务器错误 URL。
我有一个基本的 Angular 应用程序,其中有一个延迟加载 path/component 仅用于测试。我安装了 Angular Universal,然后使用命令 ng build --prod && npm run build:ssr
在本地构建了我的应用程序,该命令将以下文件放入 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 控制台中的云 Shell 按钮登录到我的应用程序。
然后我单击了编辑器按钮,您可以在其中浏览文件并在浏览器中编写命令window。
在我的 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)
如有任何帮助,我们将不胜感激。
谢谢!
我希望在 App Engine Cloud URL 上看到我的 Angular 应用 运行ning。
你能尝试在你的 package.json 中点一个 main 吗?
这似乎是一个类似的问题,您也可以在此处查看如何执行此操作。
如果这不起作用,请post您是如何满足您的要求的,以便我们进一步查看。
希望这对您有所帮助。
更新:
也许这可以帮助您更好地理解问题。
First, Node looks for a package.json file and checks if it contains a main property. It will be used to point a file inside the package directory that will be the entry point. If main property does not exist, then Node tries in order index.js, index.json and index.node.
Index.js 是 Node 寻找的默认值。您没有 index.js。因此,您必须在 main 中指定您使用的是什么,以便它知道入口点。
如果 server.js 是启动服务器的文件,并且它在文件夹的根目录中,请尝试这样。
如果 server.js 在另一个文件夹中,请在主文件夹中尝试 /'folder'/server.js。
"main": "server.js",
"scripts": {
"start": "node server.js"
},
如果您在问题中提到的 main.js 文件上启动服务器,请将其指向那里。
我链接的问题包含某人的评论,说他们必须同时使用 start 和 main 来解决他们的问题,所以我会尝试两种方法。
告诉我。
问题的解决方案:
我们用了
"start": "node server.js" in the package.json
之后由于
Error: Failed to lookup view "index" in views directory "/app/dist/browser"
我们不得不将文件夹结构重新安排如下。
dist
- browser
- server
server.js
app.yaml
package.json