Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Angular Universal module for Nest framework (node.js) 🌷

License

NotificationsYou must be signed in to change notification settings

nestjs/ng-universal

Repository files navigation

Nest Logo

A progressiveNode.js framework for building efficient and scalable server-side applications.

NPM VersionPackage LicenseNPM DownloadsCoverageDiscordBackers on Open CollectiveSponsors on Open Collective

Description

AngularUniversal module forNest.

Installation

Using the Angular CLI:

$ ng add @nestjs/ng-universal

Or manually:

$ npm i @nestjs/ng-universal

Example

See full examplehere.

Usage

If you have installed the module manually, you need to importAngularUniversalModule in your Nest application.

import{Module}from'@nestjs/common';import{join}from'path';import{AngularUniversalModule}from'@nestjs/ng-universal';@Module({imports:[AngularUniversalModule.forRoot({bootstrap:AppServerModule,viewsPath:join(process.cwd(),'dist/{APP_NAME}/browser')})]})exportclassApplicationModule{}

API Spec

TheforRoot() method takes an options object with a few useful properties.

PropertyTypeDescription
viewsPathstringThe directory where the module should look for client bundle (Angular app)
bootstrapFunctionAngular server module reference (AppServerModule).
templatePathstring?Path to index file (default:{viewsPaths}/index.html)
rootStaticPathstring?Static files root directory (default:*.*)
renderPathstring?Path to render Angular app (default:*)
extraProvidersStaticProvider[]?The platform level providers for the current render request
inlineCriticalCssboolean?Reduce render blocking requests by inlining critical CSS. (default: true)
cacheboolean? | object?Cache options, description below (default:true)
errorHandlerFunction?Callback to be called in case of a rendering error

Cache

PropertyTypeDescription
expiresInnumber?Cache expiration in milliseconds (default:60000)
storageCacheStorage?Interface for implementing custom cache storage (default: in memory)
keyGeneratorCacheKeyGenerator?Interface for implementing custom cache key generation logic (default: by url)
AngularUniversalModule.forRoot({bootstrap:AppServerModule,viewsPath:join(process.cwd(),'dist/{APP_NAME}/browser'),cache:{storage:newInMemoryCacheStorage(),expiresIn:DEFAULT_CACHE_EXPIRATION_TIME,keyGenerator:newCustomCacheKeyGenerator()}});

Example for CacheKeyGenerator:

exportclassCustomCacheKeyGeneratorimplementsCacheKeyGenerator{generateCacheKey(request:Request):string{constmd=newMobileDetect(request.headers['user-agent']);constisMobile=md.mobile() ?'mobile' :'desktop';return(request.hostname+request.originalUrl+isMobile).toLowerCase();}}

Request and Response Providers

This tool uses@nguniversal/express-engine and will properly provide access to the Express Request and Response objects in you Angular components. Note that tokens must be imported from the@nestjs/ng-universal/tokens, not@nguniversal/express-engine/tokens.

This is useful for things like setting the response code to 404 when your Angular router can't find a page (i.e.path: '**' in routing):

import{Response}from'express';import{Component,Inject,Optional,PLATFORM_ID}from'@angular/core';import{isPlatformServer}from'@angular/common';import{RESPONSE}from'@nestjs/ng-universal/tokens';@Component({selector:'my-not-found',templateUrl:'./not-found.component.html',styleUrls:['./not-found.component.scss']})exportclassNotFoundComponent{constructor(    @Inject(PLATFORM_ID)privatereadonlyplatformId:any,    @Optional()    @Inject(RESPONSE)res:Response){// `res` is the express response, only available on the serverif(isPlatformServer(this.platformId)){res.status(404);}}}

Custom Webpack

In some situations, it may be required to customize thewebpack build while using@nestjs/ng-universal, especially when additional dependencies are included (that rely on native Node.js code).

To add a customizablewebpack config to your project, it is recommended to install@angular-builders/custom-webpack in the project and to set your builders appropriately.

Example Custom Webpack

// webpack.config.tsimport{Configuration,IgnorePlugin}from'webpack'import{CustomWebpackBrowserSchema,TargetOptions}from'@angular-builders/custom-webpack'importnodeExternalsfrom'webpack-node-externals'exportdefault(config:Configuration_options:CustomWebpackBrowserSchema,targetOptions:TargetOptions)=>{if(targetOptions.target==='server'){config.resolve?.extensions?.push('.mjs','.graphql','.gql')config.module?.rules?.push({test:/\.mjs$/,include:/node_modules/,type:'javascript/auto'});config.externalsPresets={node:true}(config.externalsasArray<any>).push(nodeExternals({allowlist:[/^(?!(livereload|concurrently|fsevents)).*/]}));config.plugins?.push(newIgnorePlugin({checkResource:(resource:string)=>{constlazyImports=['@nestjs/microservices','@nestjs/microservices/microservices-module','@nestjs/websockets/socket-module','cache-manager','class-validator','class-transform',];if(!lazyImpots.includes(resource)){returnfalse;}try{require.resolve(resource)}catch(_err:any){returntrue;}returnfalse;}}));}returnconfig;};

Support

Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, pleaseread more here.

Stay in touch

License

Nest isMIT licensed.

About

Angular Universal module for Nest framework (node.js) 🌷

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors25


[8]ページ先頭

©2009-2025 Movatter.jp