diff --git a/constants.d.ts b/constants.d.ts index 4f5db0b8..9b99f9f3 100644 --- a/constants.d.ts +++ b/constants.d.ts @@ -22,9 +22,7 @@ export declare const MY_VENDOR_DLLS: any[]; export declare const MY_CLIENT_PLUGINS: any[]; export declare const MY_CLIENT_PRODUCTION_PLUGINS: any[]; export declare const MY_CLIENT_RULES: any[]; -export declare const MY_SERVER_RULES: any[]; export declare const MY_TEST_PLUGINS: any[]; export declare const MY_TEST_RULES: any[]; -export declare const MY_SERVER_INCLUDE_CLIENT_PACKAGES: any[]; export declare const EXCLUDE_SOURCE_MAPS: any[]; \ No newline at end of file diff --git a/constants.js b/constants.js index 8c604131..fea83b90 100644 --- a/constants.js +++ b/constants.js @@ -82,10 +82,6 @@ exports.MY_CLIENT_RULES = [ // use this to import your own rules for Client webpack config. ] -exports.MY_SERVER_RULES = [ - // use this to import your own rules for Universal Server webpack config. -] - exports.MY_TEST_RULES = [ // use this to import your own rules for Test webpack config. ] @@ -93,7 +89,3 @@ exports.MY_TEST_RULES = [ exports.MY_TEST_PLUGINS = [ // use this to import your own Test webpack config plugins. ] - -exports.MY_SERVER_INCLUDE_CLIENT_PACKAGES = [ - // include these client packages so we can transform their source with webpack loaders -] \ No newline at end of file diff --git a/package.json b/package.json index c3601361..799a5f92 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-webpack2-starter", - "version": "2.1.0", + "version": "3.0.0", "description": "Angular and Webpack 2 Starter", "author": "Qdouble ", "repository": { @@ -13,7 +13,7 @@ "webdev": "webpack-dev-server", "webdev:hmr": "npm run webdev -- --inline --hot", "webpack": "webpack", - "ngc": "./node_modules/.bin/ngc -p tsconfig.aot.json", + "ngc": "./node_modules/.bin/ngc -p src/tsconfig.server.aot.json", "webdriver-manager": "webdriver-manager", "webdriver:update": "npm run webdriver-manager update", "webdriver:start": "npm run webdriver-manager start", @@ -21,10 +21,10 @@ "pree2e:only": "npm run webdriver:update -- --standalone", "e2e": "npm run sass && npm-run-all -p -r e2e:server e2e:only", "e2e:testall": "npm run e2e:jit && npm run e2e:aot && npm run e2e:universal && npm run e2e:universal:aot", - "e2e:aot": "npm run compile:e2e && npm run e2e", + "e2e:aot": "npm run build:aot:prod:e2e && npm run e2e", "e2e:jit": "npm run build:prod:e2e && npm run e2e", "e2e:universal": "npm run build:universal:prod:e2e && npm-run-all -p -r server:universal e2e:only:universal", - "e2e:universal:aot": "npm run compile:universal:e2e && npm-run-all -p -r server:universal e2e:only:universal", + "e2e:universal:aot": "npm run build:universal:aot:e2e && npm-run-all -p -r server:universal e2e:only:universal", "e2e:only:universal": "npm run protractor -- --universal", "e2e:only": "npm run protractor", "e2e:live": "npm run e2e -- --elementExplorer", @@ -43,21 +43,13 @@ "clean:dist": "npm run rimraf -- dist .awcache", "clean:dll": "npm run rimraf -- dll", "clean:compile": "npm run rimraf -- \"compiled\" ", - "compile": "npm run compile:aot", - "compile:aot": "npm run sass && npm run clean:compile && npm run ngc && npm run build:aot", - "compile:e2e": "npm run sass && npm run clean:compile && npm run ngc && npm run build:aot:prod:e2e", - "compile:universal": "npm run sass && npm run clean:compile && npm run ngc && npm run build:universal:aot", - "compile:universal:e2e": "npm run sass && npm run clean:compile && npm run ngc && npm run build:universal:aot:prod:e2e", - "compile:dev": "npm run sass && npm run clean:compile && npm run ngc && npm run build:aot:dev", - "compile:only": "npm run clean:compile && npm run sass && npm run ngc", - "compile:watch": "watch-run -i npm run compile:only -p 'src/app/**/*.ts, src/app/**/*.scss' npm run compile:only", "prodserver": "node prodserver", - "sass": "node-sass src -o src --include-path node_modules --output-style compressed -q", + "sass": "node-sass \"src/app/styles.scss\" \"src/app/styles.css\" \"src/app/main.scss\" \"src/app/main.css\" --include-path node_modules --output-style compressed -q", "sass:watch": "node-sass -w src -o src --include-path node_modules --output-style compressed -q", "start": "npm run server:dev", "start:hmr": "npm run server:hmr", "serve80": "sudo PORT=80 node prodserver", - "server:dev": "npm-run-all -p -r webdev sass:watch", + "server:dev": "npm run webdev", "server:hmr": "npm-run-all -p -r webdev:hmr sass:watch", "server:prod": "npm-run-all -p -r watch:prod prodserver", "server:prod80": "npm-run-all -p -r serve80 watch:prod", @@ -68,24 +60,30 @@ "build:aot:prod": "npm run clean:dist && npm run sass && webpack", "build:aot:prod:e2e": "npm run clean:dist && npm run sass && webpack", "build:aot:dev": "npm run clean:dist && npm run sass && webpack", - "build:dev": "npm run clean:dist && npm run sass && webpack", + "build:dev": "npm run clean:dist && webpack", "build:dll": "npm run clean:dll && npm run sass && webpack", "build:prod": "npm run clean:dist && npm run sass && webpack", "build:prod:e2e": "npm run clean:dist && npm run sass && webpack", + "build:server": "npm run build:server:prod", + "build:server:aot": "npm run build:server:aot:prod", + "build:server:aot:dev": "npm run sass && webpack", + "build:server:aot:prod": "npm run sass && webpack", + "build:server:aot:prod:e2e": "npm run sass && webpack", + "build:server:dev": "npm run clean:dist && npm run sass && webpack", + "build:server:prod": "npm run clean:dist && npm run sass && webpack", "build:universal": "npm run build:universal:prod", - "build:universal:aot": "npm run build:universal:aot:prod", - "build:universal:aot:dev": "npm run clean:dist && npm run sass && webpack", - "build:universal:aot:prod": "npm run clean:dist && npm run sass && webpack", - "build:universal:aot:prod:e2e": "npm run clean:dist && npm run sass && webpack", + "build:universal:aot": "npm-run-all -p build:aot build:server:aot", + "build:universal:aot:dev": "npm-run-all -p build:aot:dev build:server:aot:dev", + "build:universal:aot:e2e": "npm-run-all -p build:aot:prod:e2e build:server:aot:prod:e2e", "build:universal:dev": "npm run clean:dist && npm run sass && webpack", "build:universal:prod": "npm run clean:dist && npm run sass && webpack", "build:universal:prod:e2e": "npm run clean:dist && npm run sass && webpack", "watch": "npm run watch:dev", + "watch:aot": "npm-run-all -p -r \"build:aot:dev -- --watch\" sass:watch", "watch:dev": "npm-run-all -p -r \"build:dev -- --watch\" sass:watch", - "watch:prod": "npm-run-all -p -r \"build:prod -- --watch\" sass:watch", "watch:universal": "npm-run-all -p -r \"build:universal -- --watch\" sass:watch", "universal": "npm run build:universal && npm run server:universal", - "universal:aot": "npm run compile:universal && npm run server:universal", + "universal:aot": "npm run build:universal:aot && npm run server:universal", "universal:watch": "npm run build:universal && npm-run-all -p -r watch:universal server:universal" }, "dependencies": { @@ -171,6 +169,7 @@ "protractor": "~4.0.8", "raw-loader": "~0.5.1", "rimraf": "~2.6.1", + "sass-loader": "^6.0.5", "source-map-loader": "~0.2.1", "string-replace-loader": "~1.2.0", "to-string-loader": "~1.1.5", diff --git a/src/app/app-nav-views.ts b/src/app/app-nav-views.ts index eff16285..d10c058f 100644 --- a/src/app/app-nav-views.ts +++ b/src/app/app-nav-views.ts @@ -8,11 +8,6 @@ export const views: Object[] = [ name: 'Lazy', icon: 'file_download', link: ['lazy'] - }, - { - name: 'Sync', - icon: 'done', - link: ['sync'] }, { name: 'Bad Link', diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 01352840..f7d86d40 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ViewEncapsulation } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { TransferState } from '../modules/transfer-state/transfer-state'; @@ -7,8 +7,9 @@ import { MOBILE } from './services/constants'; @Component({ selector: 'my-app', - styleUrls: ['./app.component.css'], - templateUrl: './app.component.html' + styleUrls: ['main.scss', './app.component.scss'], + templateUrl: './app.component.html', + encapsulation: ViewEncapsulation.None }) export class AppComponent implements OnInit { showMonitor = (ENV === 'development' && !AOT && diff --git a/src/app/app.imports.ts b/src/app/app.imports.ts index b270c989..9778cb48 100644 --- a/src/app/app.imports.ts +++ b/src/app/app.imports.ts @@ -10,7 +10,6 @@ import { useLogMonitor } from '@ngrx/store-log-monitor'; import { TransferHttpModule } from '../modules/transfer-http/transfer-http.module'; -import { routes } from './app.routing'; import { rootReducer } from './reducers'; import { StoreDevToolsModule } from './features/store-devtools.module'; import { UserEffects } from './user/user.effects'; @@ -31,7 +30,6 @@ export const APP_IMPORTS = [ EffectsModule.run(UserEffects), // MaterialModule, ReactiveFormsModule, - RouterModule.forRoot(routes, { useHash: false, preloadingStrategy: PreloadAllModules }), RouterStoreModule.connectRouter(), StoreModule.provideStore(rootReducer), STORE_DEV_TOOLS_IMPORTS, diff --git a/src/app/app.module.ts b/src/app/app.module.ts index b78eaca7..df526ac5 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -7,9 +7,10 @@ */ import { ApplicationRef, NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; +import { CommonModule } from '@angular/common'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { HttpModule } from '@angular/http'; +import { RouterModule, PreloadAllModules } from '@angular/router'; import { removeNgStyles, createNewHosts, createInputTransfer } from '@angularclass/hmr'; @@ -24,7 +25,10 @@ import { APP_ENTRY_COMPONENTS } from './app.entry-components'; import { APP_IMPORTS } from './app.imports'; import { APP_PROVIDERS } from './app.providers'; +import { routes } from './app.routing'; + import { AppComponent } from './app.component'; +import { DashboardComponent } from './features/dashboard.component'; import { AppState } from './reducers'; @@ -35,12 +39,14 @@ import { AppState } from './reducers'; ], entryComponents: [APP_ENTRY_COMPONENTS], imports: [ - APP_IMPORTS, - BrowserModule, + CommonModule, DEV_SERVER ? [BrowserAnimationsModule, BrowserTransferStateModule] : [], HttpModule, + APP_IMPORTS, + RouterModule.forRoot(routes, { useHash: false, preloadingStrategy: PreloadAllModules }), ], bootstrap: [AppComponent], + exports: [AppComponent], providers: [APP_PROVIDERS] }) diff --git a/src/app/app.routing.ts b/src/app/app.routing.ts index c0192ce3..7b054652 100644 --- a/src/app/app.routing.ts +++ b/src/app/app.routing.ts @@ -7,6 +7,5 @@ import { NotFound404Component } from './not-found404.component'; export const routes: Routes = [ { path: '', component: DashboardComponent, pathMatch: 'full' }, { path: 'lazy', loadChildren: './features/lazy/index#LazyModule' }, - { path: 'sync', loadChildren: './features/sync/index#SyncModule?sync=true' }, { path: '**', component: NotFound404Component } ]; diff --git a/src/app/features/sync/index.ts b/src/app/features/sync/index.ts deleted file mode 100644 index a6fe4f04..00000000 --- a/src/app/features/sync/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { RouterModule } from '@angular/router'; -import { routes } from './sync.routing'; - -import { SyncComponent } from './sync.component'; - -@NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(routes) - ], - declarations: [ - SyncComponent - ] -}) - -export class SyncModule {} - diff --git a/src/app/features/sync/sync.component.html b/src/app/features/sync/sync.component.html deleted file mode 100644 index 3a50b24c..00000000 --- a/src/app/features/sync/sync.component.html +++ /dev/null @@ -1,5 +0,0 @@ -
-
- This module is being loaded synchronously. -
-
\ No newline at end of file diff --git a/src/app/features/sync/sync.component.ts b/src/app/features/sync/sync.component.ts deleted file mode 100644 index b7d60697..00000000 --- a/src/app/features/sync/sync.component.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'my-sync', - templateUrl: './sync.component.html' -}) - -export class SyncComponent {} diff --git a/src/app/features/sync/sync.routing.ts b/src/app/features/sync/sync.routing.ts deleted file mode 100644 index 63779ff2..00000000 --- a/src/app/features/sync/sync.routing.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* tslint:disable: variable-name */ -import { Routes } from '@angular/router'; -import { SyncComponent } from './sync.component'; - -export const routes: Routes = [ - { - path: '', - component: SyncComponent - } -]; diff --git a/src/app/main.scss b/src/app/main.scss index e7d2bfd1..606ce750 100644 --- a/src/app/main.scss +++ b/src/app/main.scss @@ -1,3 +1,2 @@ -/* main.css will be extracted to main dist folder and is imported in index.html */ /* This file is for setting global styles */ @import 'variables'; diff --git a/src/index.html b/src/index.html index 9dc81fc5..2e9aade8 100644 --- a/src/index.html +++ b/src/index.html @@ -10,7 +10,6 @@ - diff --git a/src/main.browser.aot.ts b/src/main.browser.aot.ts deleted file mode 100644 index 5de09634..00000000 --- a/src/main.browser.aot.ts +++ /dev/null @@ -1,22 +0,0 @@ -import './polyfills.browser.aot'; -import './rxjs.imports'; -declare var ENV: string; - -import { enableProdMode } from '@angular/core'; -import { platformBrowser } from '@angular/platform-browser'; -import { BrowserAppModuleNgFactory } from '../compiled/src/app/browser.app.module.ngfactory'; - -if ('production' === ENV) { - enableProdMode(); -} - -export function main() { - return platformBrowser().bootstrapModuleFactory(BrowserAppModuleNgFactory) - .catch(err => console.log(err)); -} - -export function bootstrapDomReady() { - document.addEventListener('DOMContentLoaded', main); -} - -bootstrapDomReady(); diff --git a/src/polyfills.browser.aot.ts b/src/polyfills.browser.aot.ts deleted file mode 100644 index 86fdb6f7..00000000 --- a/src/polyfills.browser.aot.ts +++ /dev/null @@ -1,5 +0,0 @@ -import 'core-js/es7/reflect'; -import 'core-js/client/shim'; -import 'zone.js/dist/zone'; -import 'ts-helpers'; -import 'web-animations-js/web-animations.min'; diff --git a/src/server.aot.ts b/src/server.aot.ts index 36d20dfc..7bcc8037 100644 --- a/src/server.aot.ts +++ b/src/server.aot.ts @@ -6,7 +6,7 @@ import './rxjs.imports'; import * as express from 'express'; import * as path from 'path'; import { platformServer, renderModuleFactory } from '@angular/platform-server'; -import { ServerAppModuleNgFactory } from '../compiled/src/app/server.app.module.ngfactory'; +import { ServerAppModuleNgFactory } from './ngfactory/app/server.app.module.ngfactory'; import { ngExpressEngine } from '@nguniversal/express-engine'; import { routes } from './server.routes'; import { App } from './mock-api/app'; diff --git a/src/tsconfig.browser.json b/src/tsconfig.browser.json new file mode 100644 index 00000000..2a8641dd --- /dev/null +++ b/src/tsconfig.browser.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.webpack.json", + "angularCompilerOptions": { + "entryModule": "./app/browser.app.module#BrowserAppModule" + }, + "exclude": [ + "./server.aot.ts" + ] +} diff --git a/src/tsconfig.server.aot.json b/src/tsconfig.server.aot.json new file mode 100644 index 00000000..e90417e0 --- /dev/null +++ b/src/tsconfig.server.aot.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.server.json", + "angularCompilerOptions": { + "genDir": "ngfactory", + "entryModule": "./app/server.app.module#ServerAppModule" + }, + "exclude": [] +} \ No newline at end of file diff --git a/src/tsconfig.server.json b/src/tsconfig.server.json new file mode 100644 index 00000000..5b4b81da --- /dev/null +++ b/src/tsconfig.server.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.webpack.json", + "angularCompilerOptions": { + "entryModule": "./app/server.app.module#ServerAppModule" + }, + "exclude": [ + "./server.aot.ts" + ] +} \ No newline at end of file diff --git a/tsconfig.aot.json b/tsconfig.aot.json deleted file mode 100644 index b7c451a2..00000000 --- a/tsconfig.aot.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "module": "es2015", - "moduleResolution": "node", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "noEmitHelpers": true, - "pretty": false, - "sourceMap": true, - "lib": ["dom", "es6", "es2015", "es2016", "es2017"], - "noEmit": true, - "strictNullChecks": false, - "skipDefaultLibCheck": true, - "typeRoots": [ - "node_modules/@types" - ] - }, - "exclude": [ - "node_modules", - "compiled", - "e2e/**/*.ts", - "src/**/*.e2e.ts", - "src/**/*.spec.ts", - "src/server.ts", - "src/server.aot.ts", - "src/main.browser.aot.ts" - ], - "awesomeTypescriptLoaderOptions": { - "useWebpackText": true, - "forkChecker": true, - "useCache": true - }, - "compileOnSave": false, - "buildOnSave": false, - "atom": { "rewriteTsconfig": false }, - "angularCompilerOptions": { - "genDir": "compiled", - "skipMetadataEmit" : true - } -} diff --git a/tsconfig.json b/tsconfig.json index 7629bd85..2abb9b55 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,6 @@ "skipDefaultLibCheck": true, "pretty": true, "sourceMap": true, - "strictNullChecks": false, "typeRoots": [ "node_modules/@types" ] diff --git a/tsconfig.webpack.json b/tsconfig.webpack.json index 6dac16c9..3558f720 100644 --- a/tsconfig.webpack.json +++ b/tsconfig.webpack.json @@ -10,7 +10,6 @@ "skipDefaultLibCheck": true, "pretty": true, "sourceMap": true, - "strictNullChecks": false, "typeRoots": [ "node_modules/@types" ] diff --git a/webpack.aot.js b/webpack.aot.js new file mode 100644 index 00000000..1e4bddf8 --- /dev/null +++ b/webpack.aot.js @@ -0,0 +1,23 @@ +const { root } = require('./helpers'); +const { AotPlugin } = require('@ngtools/webpack'); + +const tsconfigs = { + client: root('./src/tsconfig.browser.json'), + server: root('./src/tsconfig.server.json') +}; + +const aotTsconfigs = { + client: root('./src/tsconfig.browser.json'), + server: root('./src/tsconfig.server.aot.json') +}; + +function getAotPlugin(platform, aot) { + return new AotPlugin({ + tsConfigPath: aot ? aotTsconfigs[platform] : tsconfigs[platform], + skipCodeGeneration: !aot + }); +} + +module.exports = { + getAotPlugin: getAotPlugin +}; diff --git a/webpack.config.ts b/webpack.config.ts index 00d8a13c..6b2c677f 100644 --- a/webpack.config.ts +++ b/webpack.config.ts @@ -14,7 +14,6 @@ import { } from './constants'; const { - ContextReplacementPlugin, DefinePlugin, DllPlugin, DllReferencePlugin, @@ -31,6 +30,7 @@ const NamedModulesPlugin = require('webpack/lib/NamedModulesPlugin'); const ScriptExtPlugin = require('script-ext-html-webpack-plugin'); const UglifyJsPlugin = require('webpack/lib/optimize/UglifyJsPlugin'); const webpackMerge = require('webpack-merge'); +const { getAotPlugin } = require('./webpack.aot'); const { hasProcessFlag, includeClientPackages, root, testDll } = require('./helpers.js'); @@ -41,6 +41,7 @@ const DLL = EVENT.includes('dll'); const E2E = EVENT.includes('e2e'); const HMR = hasProcessFlag('hot'); const PROD = EVENT.includes('prod'); +const SERVER = EVENT.includes('server'); const WATCH = hasProcessFlag('watch'); const UNIVERSAL = EVENT.includes('universal'); @@ -72,7 +73,7 @@ const CONSTANTS = { HOST: JSON.stringify(HOST), PORT: PORT, STORE_DEV_TOOLS: JSON.stringify(STORE_DEV_TOOLS), - UNIVERSAL: UNIVERSAL + UNIVERSAL: UNIVERSAL || SERVER }; const DLL_VENDORS = [ @@ -103,7 +104,6 @@ const COPY_FOLDERS = [ { from: 'src/assets', to: 'assets' }, { from: 'node_modules/hammerjs/hammer.min.js' }, { from: 'node_modules/hammerjs/hammer.min.js.map' }, - { from: 'src/app/main.css' }, { from: 'src/app/styles.css' }, ...MY_COPY_FOLDERS ]; @@ -128,24 +128,22 @@ const commonConfig = function webpackConfig(): WebpackConfig { test: /\.ts$/, loaders: [ '@angularclass/hmr-loader', - 'awesome-typescript-loader?{configFileName: "tsconfig.webpack.json"}', - 'angular2-template-loader', - 'angular-router-loader?loader=system&genDir=compiled&aot=' + AOT + '@ngtools/webpack' ], exclude: [/\.(spec|e2e|d)\.ts$/] }, { test: /\.json$/, loader: 'json-loader' }, { test: /\.html/, loader: 'raw-loader', exclude: [root('src/index.html')] }, { test: /\.css$/, loader: 'raw-loader' }, + { + test: /\.scss$/, + loaders: ['to-string-loader', 'css-loader', 'sass-loader'] + }, ...MY_CLIENT_RULES ] }; config.plugins = [ - new ContextReplacementPlugin( - /angular(\\|\/)core(\\|\/)@angular/, - root('./src') - ), new ProgressPlugin(), new CheckerPlugin(), new DefinePlugin(CONSTANTS), @@ -204,7 +202,7 @@ const commonConfig = function webpackConfig(): WebpackConfig { } return config; -} (); +}(); // type definition for WebpackConfig at the bottom const clientConfig = function webpackConfig(): WebpackConfig { @@ -212,8 +210,9 @@ const clientConfig = function webpackConfig(): WebpackConfig { let config: WebpackConfig = Object.assign({}); config.cache = true; + config.target = 'web'; PROD ? config.devtool = PROD_SOURCE_MAPS : config.devtool = DEV_SOURCE_MAPS; - config.plugins = []; + config.plugins = [getAotPlugin('client', AOT)]; if (PROD) { config.plugins.push( @@ -224,7 +223,7 @@ const clientConfig = function webpackConfig(): WebpackConfig { ); } - if (UNIVERSAL) { + if (UNIVERSAL || SERVER) { config.plugins.push( new ScriptExtPlugin({ defaultAttribute: 'defer' @@ -257,15 +256,9 @@ const clientConfig = function webpackConfig(): WebpackConfig { vendor: [...DLL_VENDORS] }; } else { - if (AOT) { - config.entry = { - main: './src/main.browser.aot' - }; - } else { - config.entry = { - main: './src/main.browser' - }; - } + config.entry = { + main: root('./src/main.browser.ts') + }; } if (!DLL) { @@ -287,7 +280,7 @@ const clientConfig = function webpackConfig(): WebpackConfig { historyApiFallback: { disableDotRule: true, }, - // stats: 'minimal', + stats: 'minimal', host: '0.0.0.0', watchOptions: DEV_SERVER_WATCH_OPTIONS }; @@ -320,11 +313,14 @@ const clientConfig = function webpackConfig(): WebpackConfig { const serverConfig: WebpackConfig = { target: 'node', - entry: AOT ? './src/server.aot' : './src/server', + entry: AOT ? './src/server.aot.ts' : root('./src/server.ts'), output: { filename: 'server.js', path: root('dist') }, + plugins: [ + getAotPlugin('server', AOT) + ], module: { rules: [ { @@ -348,9 +344,11 @@ const defaultConfig = { } }; -if (!UNIVERSAL) { +if (!UNIVERSAL && !SERVER) { DLL ? console.log('BUILDING DLLs') : console.log('BUILDING APP'); module.exports = webpackMerge({}, defaultConfig, commonConfig, clientConfig); +} else if (SERVER) { + module.exports = webpackMerge({}, defaultConfig, commonConfig, serverConfig); } else { console.log('BUILDING UNIVERSAL'); module.exports = [ diff --git a/yarn.lock b/yarn.lock index 060abae3..ff1f6908 100644 --- a/yarn.lock +++ b/yarn.lock @@ -422,7 +422,7 @@ async@^1.4.0, async@^1.5.2, async@1.x: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^2.1.2: +async@^2.1.2, async@^2.1.5: version "2.4.0" resolved "https://registry.yarnpkg.com/async/-/async-2.4.0.tgz#4990200f18ea5b837c2cc4f8c031a6985c385611" dependencies: @@ -806,6 +806,16 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" +clone-deep@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6" + dependencies: + for-own "^0.1.3" + is-plain-object "^2.0.1" + kind-of "^3.0.2" + lazy-cache "^1.0.3" + shallow-clone "^0.1.2" + clone-stats@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" @@ -1821,11 +1831,15 @@ flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" +for-in@^0.1.3: + version "0.1.8" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" + for-in@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" -for-own@^0.1.4: +for-own@^0.1.3, for-own@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" dependencies: @@ -2419,7 +2433,7 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-buffer@^1.1.5, is-buffer@~1.1.1: +is-buffer@^1.0.2, is-buffer@^1.1.5, is-buffer@~1.1.1: version "1.1.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" @@ -2526,6 +2540,12 @@ is-plain-obj@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" +is-plain-object@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.1.tgz#4d7ca539bc9db9b737b8acb612f2318ef92f294f" + dependencies: + isobject "^1.0.0" + is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" @@ -2586,6 +2606,10 @@ isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" +isobject@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-1.0.2.tgz#f0f9b8ce92dd540fa0740882e3835a2e022ec78a" + isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -2816,6 +2840,12 @@ kew@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" +kind-of@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5" + dependencies: + is-buffer "^1.0.2" + kind-of@^3.0.2: version "3.2.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.0.tgz#b58abe4d5c044ad33726a8c1525b48cf891bff07" @@ -2834,6 +2864,10 @@ latest-version@^1.0.0: dependencies: package-json "^1.0.0" +lazy-cache@^0.2.3: + version "0.2.7" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65" + lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" @@ -2883,7 +2917,7 @@ loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@^0.2.5, loader-utils@~0 json5 "^0.5.0" object-assign "^4.0.1" -loader-utils@^1.0.2, loader-utils@^1.1.0: +loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" dependencies: @@ -3007,6 +3041,10 @@ lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" +lodash.tail@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" + lodash.template@^3.0.0: version "3.6.2" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" @@ -3229,6 +3267,13 @@ minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" +mixin-object@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" + dependencies: + for-in "^0.1.3" + is-extendable "^0.1.1" + mkdirp@^0.5.0, mkdirp@^0.5.1, "mkdirp@>=0.5 0", mkdirp@~0.5.0, mkdirp@~0.5.1, mkdirp@0.5.x: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -3767,7 +3812,7 @@ phantomjs-prebuilt@^2.1.7, phantomjs-prebuilt@~2.1.14: request-progress "~2.0.1" which "~1.2.10" -pify@^2.0.0: +pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -4510,6 +4555,16 @@ sass-graph@^2.1.1: scss-tokenizer "^0.2.3" yargs "^6.6.0" +sass-loader: + version "6.0.5" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.5.tgz#a847910f36442aa56c5985879d54eb519e24a328" + dependencies: + async "^2.1.5" + clone-deep "^0.2.4" + loader-utils "^1.0.1" + lodash.tail "^4.1.1" + pify "^2.3.0" + saucelabs@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.3.0.tgz#d240e8009df7fa87306ec4578a69ba3b5c424fee" @@ -4640,6 +4695,15 @@ sha.js@^2.4.0, sha.js@^2.4.8: dependencies: inherits "^2.0.1" +shallow-clone@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060" + dependencies: + is-extendable "^0.1.1" + kind-of "^2.0.1" + lazy-cache "^0.2.3" + mixin-object "^2.0.1" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"