Node.js 在Google云应用程序引擎上部署Angular Universal应用程序时出错

Node.js 在Google云应用程序引擎上部署Angular Universal应用程序时出错,node.js,google-app-engine,yaml,angular-universal,Node.js,Google App Engine,Yaml,Angular Universal,当我在浏览器中的Cloud Shell中运行gcloud app deploy时,我得到一个错误-一遍又一遍地找不到模块'/srv/server.js'。当我查看我的应用程序URL时,我还收到一个500服务器错误 我有一个基本的Angular应用程序,其中有一个延迟加载的路径/组件,仅用于测试。我安装了Angular Universal,然后使用命令ng build--prod&&npm run build:ssr在本地构建了我的应用程序,该命令将以下文件放在dist文件夹中: - browse

当我在浏览器中的Cloud Shell中运行gcloud app deploy时,我得到一个错误-一遍又一遍地找不到模块'/srv/server.js'。当我查看我的应用程序URL时,我还收到一个500服务器错误

我有一个基本的Angular应用程序,其中有一个延迟加载的路径/组件,仅用于测试。我安装了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上创建了一个基本应用程序,并通过单击我的应用程序引擎控制台中的Cloud Shell按钮登录到我的应用程序

然后我单击了编辑器按钮,您可以在浏览器窗口中浏览文件和编写命令

在我的app.yaml文件中,我有:

runtime: nodejs10
{
    "scripts": {
        "start": "node server.js"
    }
}
在我的package.json文件中,我有:

runtime: nodejs10
{
    "scripts": {
        "start": "node server.js"
    }
}
因此,在Cloud Shell中,我转到根目录,即所有文件所在的位置和app.yaml文件所在的位置,然后运行
gcloud app deploy

然后它将我的文件上传到存储桶,然后运行node server.js脚本。cloud 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吗

这似乎是一个类似的问题,您可以在这里看到如何做到这一点

如果这不起作用,请张贴你是如何做你的要求,这样我们可以有进一步的研究

希望这有帮助

更新:

也许这可以帮助你更好地理解这个问题

首先,节点查找package.json文件并检查它是否包含主属性。它将用于将文件指向程序包目录中的入口点。若main属性不存在,则节点将按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”:“node server.js”在package.json中

在那之后由于

错误:无法在视图目录中查找视图“索引” “/app/dist/browser”

我们必须将文件夹结构重新排列为以下内容

dist
- browser
- server
server.js
app.yaml
package.json

那么主要的而不是开始?比如:{“scripts”:{“main”:“node server.js”}}看看编辑@francdore,希望能有所帮助。我添加了“main”和我的package.json,现在看起来是这样的:
{“main”:“server.js”,“scripts”:{“start”:“node server.js”}
错误看起来有点不同,如下所示。我不确定为什么它找不到@angular/core,因为我在本地构建了这个项目,并将内容上传到dist文件夹中。错误:在Function.module中找不到模块“@angular/core”。_resolveFilename(internal/modules/cjs/loader.js:636:15)请发布完整的package.json以及原始问题中的所有依赖项(编辑它)。此外,您是否可以共享您的文件分发?您是否遵循任何教程来完成此操作?愿意分享吗?我想在我这边复制它,这样我就可以准确地告诉你你的问题在哪里-