77 */
88import { experimental , JsonObject , strings } from '@angular-devkit/core' ;
99import {
10- Rule ,
11- SchematicContext ,
12- SchematicsException ,
13- Tree ,
1410 apply ,
1511 chain ,
12+ externalSchematic ,
13+ filter ,
1614 mergeWith ,
15+ noop ,
16+ Rule ,
17+ SchematicContext ,
18+ SchematicsException ,
1719 template ,
20+ Tree ,
1821 url ,
19- noop ,
20- filter ,
21- externalSchematic ,
2222} from '@angular-devkit/schematics' ;
2323import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks' ;
2424import { getWorkspace , getWorkspacePath } from '@schematics/angular/utility/config' ;
2525import { Schema as UniversalOptions } from './schema' ;
26+ import {
27+ addPackageJsonDependency ,
28+ NodeDependencyType ,
29+ } from '@schematics/angular/utility/dependencies' ;
2630
2731
2832function getClientProject (
@@ -39,7 +43,36 @@ function getClientProject(
3943
4044function addDependenciesAndScripts ( options : UniversalOptions ) : Rule {
4145 return ( host : Tree ) => {
46+ addPackageJsonDependency ( host , {
47+ type : NodeDependencyType . Default ,
48+ name : '@nguniversal/express-engine' ,
49+ version : '0.0.0-PLACEHOLDER' ,
50+ } ) ;
51+ addPackageJsonDependency ( host , {
52+ type : NodeDependencyType . Default ,
53+ name : '@nguniversal/module-map-ngfactory-loader' ,
54+ version : '0.0.0-PLACEHOLDER' ,
55+ } ) ;
56+ addPackageJsonDependency ( host , {
57+ type : NodeDependencyType . Default ,
58+ name : 'express' ,
59+ version : 'EXPRESS_VERSION' ,
60+ } ) ;
61+
62+ if ( options . webpack ) {
63+ addPackageJsonDependency ( host , {
64+ type : NodeDependencyType . Dev ,
65+ name : 'ts-loader' ,
66+ version : '^5.2.0' ,
67+ } ) ;
68+ addPackageJsonDependency ( host , {
69+ type : NodeDependencyType . Dev ,
70+ name : 'webpack-cli' ,
71+ version : '^3.1.0' ,
72+ } ) ;
73+ }
4274
75+ const serverFileName = options . serverFileName . replace ( '.ts' , '' ) ;
4376 const pkgPath = '/package.json' ;
4477 const buffer = host . read ( pkgPath ) ;
4578 if ( buffer === null ) {
@@ -48,16 +81,13 @@ function addDependenciesAndScripts(options: UniversalOptions): Rule {
4881
4982 const pkg = JSON . parse ( buffer . toString ( ) ) ;
5083
51- pkg . dependencies [ '@nguniversal/express-engine' ] = '0.0.0-PLACEHOLDER' ;
52- pkg . dependencies [ '@nguniversal/module-map-ngfactory-loader' ] = '0.0.0-PLACEHOLDER' ;
53- pkg . dependencies [ 'express' ] = 'EXPRESS_VERSION' ;
54-
55- pkg . scripts [ 'serve:ssr' ] = 'node dist/server' ;
84+ pkg . scripts [ 'compile:server' ] = options . webpack ?
85+ 'webpack --config webpack.server.config.js --progress --colors' :
86+ `tsc -p ${ serverFileName } .tsconfig.json` ;
87+ pkg . scripts [ 'serve:ssr' ] = `node dist/${ serverFileName } ` ;
5688 pkg . scripts [ 'build:ssr' ] = 'npm run build:client-and-server-bundles && npm run compile:server' ;
5789 pkg . scripts [ 'build:client-and-server-bundles' ] =
5890 `ng build --prod && ng run ${ options . clientProject } :server:production` ;
59- pkg . scripts [ 'compile:server' ] =
60- `tsc -p ${ options . serverFileName . replace ( / \. t s $ / , '' ) } .tsconfig.json` ;
6191
6292 host . overwrite ( pkgPath , JSON . stringify ( pkg , null , 2 ) ) ;
6393
@@ -118,6 +148,8 @@ export default function (options: UniversalOptions): Rule {
118148
119149 const rootSource = apply ( url ( './files/root' ) , [
120150 options . skipServer ? filter ( path => ! path . startsWith ( '__serverFileName' ) ) : noop ( ) ,
151+ options . webpack ?
152+ filter ( path => ! path . includes ( 'tsconfig' ) ) : filter ( path => ! path . startsWith ( 'webpack' ) ) ,
121153 template ( {
122154 ...strings ,
123155 ...options as object ,
0 commit comments