无法使用 @ngtools/webpack 创建 Angular 5 通用服务器应用程序应用程序包

Unable to create a Angular 5 Universal server application application bundle using @ngtools/webpack

我正在尝试使用 Angular 5 和没有 cli 的 WebPack 构建通用应用程序。

我遇到的问题是,我似乎无法让 express 应用程序正常工作,每次访问服务器时都会遇到此错误

Error: You must pass in a NgModule or NgModuleFactory to be bootstrapped
    at View.engine (/Volumes/Data/Users/mo/Desktop/ng5-universal-webpack/node_modules/@nguniversal/express-engine/src/main.js:34:23)
    at View.render (/Volumes/Data/Users/mo/Desktop/ng5-universal-webpack/node_modules/express/lib/view.js:135:8)
    at tryRender (/Volumes/Data/Users/mo/Desktop/ng5-universal-webpack/node_modules/express/lib/application.js:640:10)
    at Function.render (/Volumes/Data/Users/mo/Desktop/ng5-universal-webpack/node_modules/express/lib/application.js:592:3)
    at ServerResponse.render (/Volumes/Data/Users/mo/Desktop/ng5-universal-webpack/node_modules/express/lib/response.js:1008:7)
    at /Volumes/Data/Users/mo/Desktop/ng5-universal-webpack/dist/server.js:122:47
    at Layer.handle [as handle_request] (/Volumes/Data/Users/mo/Desktop/ng5-universal-webpack/node_modules/express/lib/router/layer.js:95:5)
    at next (/Volumes/Data/Users/mo/Desktop/ng5-universal-webpack/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/Volumes/Data/Users/mo/Desktop/ng5-universal-webpack/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Volumes/Data/Users/mo/Desktop/ng5-universal-webpack/node_modules/express/lib/router/layer.js:95:5)

我认为问题与 server.ts 使用的服务器应用程序包有关,因为如果我在控制台注销 AppServerModuleNgFactory,它会显示为未定义。

我已尝试使我的服务器配置尽可能接近 angular/universal-starter 存储库中 CLI 项目生成的配置,但它不会生成服务器配置的应用程序包可以使用

您可以在 https://github.com/mogusbi/ng5-universal-webpack 找到存储库。克隆 运行 npm start 并转到 localhost:4000

我最终弄清楚了为什么在深入研究 CLI 源代码的细节之后没有生成 ModuleNgFactories,这实际上只是因为 AngularCompilerPlugin 中有一个名为 [=11= 的未记录选项] - 它需要设置为 1 以生成服务器应用程序包,然后由 express 应用程序中的 ngExpressEngine 使用。

一旦你这样做了,一切都会如你所愿!

我希望在没有 CLI 的情况下无法使同构的东西工作的任何其他人发现这很有帮助

在src目录下创建main.server.ts文件,然后在main.server.ts文件中输入这段代码:

export { AppServerModule } from './app/app.server.module';