在升级nestjs之后,我得到以下错误TypeError: provideModuleMap is not a function。使用nestjs在angular中进行服务器端渲染(ssr),并结合angular universal来渲染ssr。
正确工作依赖项:

"@nestjs/common": "^6.3.1",
"@nestjs/core": "^6.3.1",
"@nestjs/ng-universal": "^1.2.0",
"@nestjs/platform-express": "^6.3.1"

更新的依赖项导致错误:
"@nestjs/common": "^6.5.2",
"@nestjs/core": "^6.5.2",
"@nestjs/ng-universal": "^2.0.0",
"@nestjs/platform-express": "^6.5.2"

nguniversal依赖项(它们不会更改):
"@nguniversal/common": "^8.1.1",
"@nguniversal/express-engine": "^8.1.1",
"@nguniversal/module-map-ngfactory-loader": "^8.1.1",
"express": "^4.17.1",

使用角度8.2.0。其他文件(app.server.module.ts等)应该没问题,因为ssr使用ssr工作得非常好。完整错误日志:
TypeError: provideModuleMap is not a function
    at View.app.engine (C:\users\myapp\node_modules\@nestjs\ng-universal\dist\utils\setup-universal.utils.js:23:17)
    at View.render (C:\users\myapp\node_modules\express\lib\view.js:135:8)
    at tryRender (C:\users\myapp\node_modules\express\lib\application.js:640:10)
    at Function.render (C:\users\myapp\node_modules\express\lib\application.js:592:3)
    at ServerResponse.render (C:\users\myapp\node_modules\express\lib\response.js:1012:7)
    at app.get (C:\users\myapp\node_modules\@nestjs\ng-universal\dist\angular-universal.module.js:60:66)
    at Layer.handle [as handle_request] (C:\users\myapp\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\users\myapp\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\users\myapp\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\users\myapp\node_modules\express\lib\router\layer.js:95:5)

最佳答案

我在Nest Repo中找不到任何文档,但在查看AngularUniversalModule的选项界面时,我尝试了以下操作:

import { Module } from '@nestjs/common';
import { AngularUniversalModule, applyDomino } from '@nestjs/ng-universal';
import { join, resolve } from 'path';
import { ngExpressEngine } from '@nguniversal/express-engine';
import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader';

const config = require('config');

// Path to server bundle in dist
const { AppServerModuleNgFactory, LAZY_MODULE_MAP } = require('../../../../dist/server/main');

applyDomino(global, join(resolve(), `${config.Http.distDir}/client/index.html`));

@Module({
    imports: [
        AngularUniversalModule.forRoot({
            // Path to client code in dist
            viewsPath: join(resolve(), `${config.Http.distDir}/client`),
            bundle: {
                AppServerModuleNgFactory,
                LAZY_MODULE_MAP,
                provideModuleMap,
                ngExpressEngine
            }
        })
    ],
})
export class CoreModule
{
}

关于angular - TypeError:ProvideModuleMap不是函数〜NestJS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57431624/

10-13 08:03