Client: add dll support
authorChocobozzz <florian.bigard@gmail.com>
Thu, 19 Jan 2017 20:54:40 +0000 (21:54 +0100)
committerChocobozzz <florian.bigard@gmail.com>
Thu, 19 Jan 2017 20:54:40 +0000 (21:54 +0100)
client/.gitignore
client/config/webpack.common.js
client/config/webpack.dev.js
client/package.json

index fa5433194fd9aa7792bb5e0c8cb79441b64a1601..255af83ff3426b83b0ae2647ba2667edd64b1d76 100644 (file)
@@ -2,3 +2,4 @@
 /node_modules
 /compiled
 /stats.json
+/dll
index 09d6f72b5eddc6705edd90f5f32b753900e9993e..223f55c2e39aab1894b8dca120b4c62c7ef48f1e 100644 (file)
@@ -323,7 +323,7 @@ module.exports = function (options) {
      * See: https://webpack.github.io/docs/configuration.html#node
      */
     node: {
-      global: 'true',
+      global: true,
       crypto: 'empty',
       process: true,
       module: false,
index 05475774805c930b95ceaef7ac9bb06972c3b19a..affb20f1904587cc1c1527f18ebe03248783a27a 100644 (file)
@@ -1,10 +1,12 @@
 const helpers = require('./helpers')
 const webpackMerge = require('webpack-merge') // used to merge webpack configs
+const webpackMergeDll = webpackMerge.strategy({plugins: 'replace'})
 const commonConfig = require('./webpack.common.js') // the settings that are common to prod and dev
 
 /**
  * Webpack Plugins
  */
+const AddAssetHtmlPlugin = require('add-asset-html-webpack-plugin')
 const DefinePlugin = require('webpack/lib/DefinePlugin')
 const NamedModulesPlugin = require('webpack/lib/NamedModulesPlugin')
 const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin')
@@ -23,6 +25,8 @@ const METADATA = webpackMerge(commonConfig({env: ENV}).metadata, {
   HMR: HMR
 })
 
+const DllBundlesPlugin = require('webpack-dll-bundles-plugin').DllBundlesPlugin
+
 /**
  * Webpack configuration
  *
@@ -106,6 +110,52 @@ module.exports = function (env) {
         }
       }),
 
+      new DllBundlesPlugin({
+        bundles: {
+          polyfills: [
+            'core-js',
+            {
+              name: 'zone.js',
+              path: 'zone.js/dist/zone.js'
+            },
+            {
+              name: 'zone.js',
+              path: 'zone.js/dist/long-stack-trace-zone.js'
+            },
+            'ts-helpers'
+          ],
+          vendor: [
+            '@angular/platform-browser',
+            '@angular/platform-browser-dynamic',
+            '@angular/core',
+            '@angular/common',
+            '@angular/forms',
+            '@angular/http',
+            '@angular/router',
+            '@angularclass/hmr',
+            'rxjs'
+          ]
+        },
+        dllDir: helpers.root('dll'),
+        webpackConfig: webpackMergeDll(commonConfig({env: ENV}), {
+          devtool: 'cheap-module-source-map',
+          plugins: []
+        })
+      }),
+
+      /**
+       * Plugin: AddAssetHtmlPlugin
+       * Description: Adds the given JS or CSS file to the files
+       * Webpack knows about, and put it into the list of assets
+       * html-webpack-plugin injects into the generated html.
+       *
+       * See: https://github.com/SimenB/add-asset-html-webpack-plugin
+       */
+      new AddAssetHtmlPlugin([
+        { filepath: helpers.root(`dll/${DllBundlesPlugin.resolveFile('polyfills')}`) },
+        { filepath: helpers.root(`dll/${DllBundlesPlugin.resolveFile('vendor')}`) }
+      ]),
+
       /**
       * Plugin: NamedModulesPlugin (experimental)
       * Description: Uses file names as module name.
index 3137af6807a26691b98d986c35c13d36b112b13b..ea458f1d4ea43b1b4d835f6031be7943fdb90f54 100644 (file)
@@ -85,7 +85,9 @@
     "zone.js": "~0.7.2"
   },
   "devDependencies": {
+    "add-asset-html-webpack-plugin": "^1.0.2",
     "codelyzer": "2.0.0-beta.4",
-    "standard": "^8.0.0"
+    "standard": "^8.0.0",
+    "webpack-dll-bundles-plugin": "^1.0.0-beta.5"
   }
 }