diff --git a/.travis.yml b/.travis.yml index f7ec6165..9e5a83f4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,6 @@ sudo: false language: node_js node_js: - - "5" - "6" addons: @@ -15,6 +14,7 @@ addons: install: - npm config set spin false + - npm install -g npm@latest - npm install diff --git a/config/webpack.common.js b/config/webpack.common.js index 8ef3dded..c896fc51 100644 --- a/config/webpack.common.js +++ b/config/webpack.common.js @@ -90,26 +90,46 @@ module.exports = function (options) { module: { rules: [ + /* - * Typescript loader support for .ts and Angular 2 async routes via .async.ts - * Replace templateUrl and stylesUrl with require() + * Typescript loader support for .ts + * + * Component Template/Style integration using `angular2-template-loader` + * Angular 2 lazy loading (async routes) via `ng-router-loader` + * + * `ng-router-loader` expects vanilla JavaScript code, not TypeScript code. This is why the + * order of the loader matter. * * See: https://github.com/s-panferov/awesome-typescript-loader * See: https://github.com/TheLarkInn/angular2-template-loader + * See: https://github.com/shlomiassaf/ng-router-loader */ { test: /\.ts$/, use: [ - '@angularclass/hmr-loader?pretty=' + !isProd + '&prod=' + isProd, - 'awesome-typescript-loader?{configFileName: "tsconfig.webpack.json"}', - 'angular2-template-loader', { + loader: '@angularclass/hmr-loader', + options: { + pretty: !isProd, + prod: isProd + } + }, + { // MAKE SURE TO CHAIN VANILLA JS CODE, I.E. TS COMPILATION OUTPUT. loader: 'ng-router-loader', options: { - loader: 'async-system', + loader: 'async-import', genDir: 'compiled', aot: AOT } + }, + { + loader: 'awesome-typescript-loader', + options: { + configFileName: 'tsconfig.webpack.json' + } + }, + { + loader: 'angular2-template-loader' } ], exclude: [/\.(spec|e2e)\.ts$/] @@ -220,7 +240,7 @@ module.exports = function (options) { new CommonsChunkPlugin({ name: 'vendor', chunks: ['main'], - minChunks: module => /node_modules\//.test(module.resource) + minChunks: module => /node_modules/.test(module.resource) }), // Specify the correct order the scripts will be injected in new CommonsChunkPlugin({ diff --git a/config/webpack.prod.js b/config/webpack.prod.js index 31b24854..4e21d7b4 100644 --- a/config/webpack.prod.js +++ b/config/webpack.prod.js @@ -13,9 +13,7 @@ const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin'); const NormalModuleReplacementPlugin = require('webpack/lib/NormalModuleReplacementPlugin'); const ProvidePlugin = require('webpack/lib/ProvidePlugin'); const UglifyJsPlugin = require('webpack/lib/optimize/UglifyJsPlugin'); -const WebpackMd5Hash = require('webpack-md5-hash'); -const V8LazyParseWebpackPlugin = require('v8-lazy-parse-webpack-plugin'); - +const OptimizeJsPlugin = require('optimize-js-plugin'); /** * Webpack Constants */ @@ -88,12 +86,15 @@ module.exports = function (env) { plugins: [ /** - * Plugin: WebpackMd5Hash - * Description: Plugin to replace a standard webpack chunkhash with md5. + * Webpack plugin to optimize a JavaScript file for faster initial load + * by wrapping eagerly-invoked functions. * - * See: https://www.npmjs.com/package/webpack-md5-hash + * See: https://github.com/vigneshshanmugam/optimize-js-plugin */ - new WebpackMd5Hash(), + + new OptimizeJsPlugin({ + sourceMap: false + }), /** * Plugin: DedupePlugin diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 5b3d6e20..eee9ed83 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -204,16 +204,24 @@ "dev": true }, "acorn": { - "version": "4.0.4", - "from": "acorn@>=4.0.4 <5.0.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.4.tgz", + "version": "3.3.0", + "from": "acorn@>=3.3.0 <4.0.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", "dev": true }, "acorn-dynamic-import": { "version": "2.0.1", "from": "acorn-dynamic-import@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.1.tgz", - "dev": true + "dev": true, + "dependencies": { + "acorn": { + "version": "4.0.4", + "from": "acorn@>=4.0.3 <5.0.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.4.tgz", + "dev": true + } + } }, "add-asset-html-webpack-plugin": { "version": "1.0.2", @@ -430,6 +438,12 @@ "resolved": "https://registry.npmjs.org/assets-webpack-plugin/-/assets-webpack-plugin-3.5.1.tgz", "dev": true }, + "ast-types": { + "version": "0.9.4", + "from": "ast-types@0.9.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.4.tgz", + "dev": true + }, "async": { "version": "2.1.4", "from": "async@>=2.0.1 <3.0.0", @@ -780,12 +794,6 @@ "from": "chalk@>=1.1.0 <2.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" }, - "charenc": { - "version": "0.0.2", - "from": "charenc@>=0.0.1 <0.1.0", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "dev": true - }, "chart.js": { "version": "1.1.1", "from": "chart.js@>=1.1.1 <2.0.0", @@ -1145,12 +1153,6 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", "dev": true }, - "crypt": { - "version": "0.0.2", - "from": "crypt@>=0.0.1 <0.1.0", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "dev": true - }, "cryptiles": { "version": "2.0.5", "from": "cryptiles@>=2.0.0 <3.0.0", @@ -1620,6 +1622,12 @@ "from": "esprima@>=2.6.0 <3.0.0", "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz" }, + "estree-walker": { + "version": "0.3.0", + "from": "estree-walker@>=0.3.0 <0.4.0", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.3.0.tgz", + "dev": true + }, "esutils": { "version": "2.0.2", "from": "esutils@>=2.0.2 <3.0.0", @@ -2979,6 +2987,12 @@ "from": "macaddress@>=0.2.8 <0.3.0", "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz" }, + "magic-string": { + "version": "0.16.0", + "from": "magic-string@>=0.16.0 <0.17.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.16.0.tgz", + "dev": true + }, "make-error": { "version": "1.2.1", "from": "make-error@>=1.1.1 <2.0.0", @@ -3008,12 +3022,6 @@ "from": "math-expression-evaluator@>=1.2.14 <2.0.0", "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.15.tgz" }, - "md5": { - "version": "2.2.1", - "from": "md5@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "dev": true - }, "media-typer": { "version": "0.3.0", "from": "media-typer@0.3.0", @@ -3152,15 +3160,15 @@ "dev": true }, "ng-router-loader": { - "version": "1.0.2", - "from": "ng-router-loader@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/ng-router-loader/-/ng-router-loader-1.0.2.tgz", + "version": "2.1.0", + "from": "ng-router-loader@>=2.1.0 <3.0.0", + "resolved": "https://registry.npmjs.org/ng-router-loader/-/ng-router-loader-2.1.0.tgz", "dev": true }, "ng2-bootstrap": { - "version": "1.1.16-11", - "from": "ng2-bootstrap@1.1.16-11", - "resolved": "https://registry.npmjs.org/ng2-bootstrap/-/ng2-bootstrap-1.1.16-11.tgz" + "version": "1.3.1", + "from": "ng2-bootstrap@>=1.3.0 <2.0.0", + "resolved": "https://registry.npmjs.org/ng2-bootstrap/-/ng2-bootstrap-1.3.1.tgz" }, "ng2-ckeditor": { "version": "1.1.5", @@ -3174,7 +3182,7 @@ }, "ng2-smart-table": { "version": "0.5.1-0", - "from": "ng2-smart-table@latest", + "from": "ng2-smart-table@>=0.5.1-0 <0.6.0", "resolved": "https://registry.npmjs.org/ng2-smart-table/-/ng2-smart-table-0.5.1-0.tgz" }, "ng2-tree": { @@ -3183,9 +3191,9 @@ "resolved": "https://registry.npmjs.org/ng2-tree/-/ng2-tree-2.0.0-alpha.0.tgz" }, "ngc-webpack": { - "version": "1.1.2", - "from": "ngc-webpack@1.1.2", - "resolved": "https://registry.npmjs.org/ngc-webpack/-/ngc-webpack-1.1.2.tgz", + "version": "1.1.3", + "from": "ngc-webpack@>=1.1.3 <2.0.0", + "resolved": "https://registry.npmjs.org/ngc-webpack/-/ngc-webpack-1.1.3.tgz", "dev": true, "dependencies": { "minimist": { @@ -3435,6 +3443,50 @@ "from": "optimist@>=0.6.0 <0.7.0", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz" }, + "optimize-js": { + "version": "1.0.3", + "from": "optimize-js@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/optimize-js/-/optimize-js-1.0.3.tgz", + "dev": true, + "dependencies": { + "cliui": { + "version": "3.2.0", + "from": "cliui@>=3.2.0 <4.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "dev": true + }, + "concat-stream": { + "version": "1.6.0", + "from": "concat-stream@>=1.5.1 <2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "from": "lodash.assign@>=4.0.3 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "dev": true + }, + "window-size": { + "version": "0.2.0", + "from": "window-size@>=0.2.0 <0.3.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "dev": true + }, + "yargs": { + "version": "4.8.1", + "from": "yargs@>=4.8.1 <5.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "dev": true + } + } + }, + "optimize-js-plugin": { + "version": "0.0.4", + "from": "optimize-js-plugin@0.0.4", + "resolved": "https://registry.npmjs.org/optimize-js-plugin/-/optimize-js-plugin-0.0.4.tgz", + "dev": true + }, "options": { "version": "0.0.6", "from": "options@>=0.0.5", @@ -3875,6 +3927,12 @@ "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.0.2.tgz", "dev": true }, + "private": { + "version": "0.1.6", + "from": "private@>=0.1.5 <0.2.0", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.6.tgz", + "dev": true + }, "process": { "version": "0.11.9", "from": "process@>=0.11.0 <0.12.0", @@ -4056,6 +4114,20 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "dev": true }, + "recast": { + "version": "0.11.20", + "from": "recast@>=0.11.20 <0.12.0", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.20.tgz", + "dev": true, + "dependencies": { + "esprima": { + "version": "3.1.3", + "from": "esprima@>=3.1.0 <3.2.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "dev": true + } + } + }, "rechoir": { "version": "0.6.2", "from": "rechoir@>=0.6.2 <0.7.0", @@ -4977,9 +5049,9 @@ } }, "tslint": { - "version": "4.3.1", - "from": "tslint@>=4.3.1 <4.4.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-4.3.1.tgz", + "version": "4.4.2", + "from": "tslint@>=4.4.0 <4.5.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-4.4.2.tgz", "dev": true }, "tty-browserify": { @@ -5078,12 +5150,6 @@ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", "dev": true }, - "underscore.string": { - "version": "3.3.4", - "from": "underscore.string@>=3.3.4 <4.0.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", - "dev": true - }, "union": { "version": "0.4.6", "from": "union@>=0.4.3 <0.5.0", @@ -5229,12 +5295,6 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", "dev": true }, - "v8-lazy-parse-webpack-plugin": { - "version": "0.3.0", - "from": "v8-lazy-parse-webpack-plugin@>=0.3.0 <0.4.0", - "resolved": "https://registry.npmjs.org/v8-lazy-parse-webpack-plugin/-/v8-lazy-parse-webpack-plugin-0.3.0.tgz", - "dev": true - }, "v8flags": { "version": "2.0.11", "from": "v8flags@>=2.0.11 <3.0.0", @@ -5264,6 +5324,12 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", "dev": true }, + "vlq": { + "version": "0.2.1", + "from": "vlq@>=0.2.1 <0.3.0", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.1.tgz", + "dev": true + }, "vm-browserify": { "version": "0.0.4", "from": "vm-browserify@0.0.4", @@ -5294,6 +5360,12 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.2.0.tgz", "dev": true, "dependencies": { + "acorn": { + "version": "4.0.4", + "from": "acorn@>=4.0.4 <5.0.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.4.tgz", + "dev": true + }, "camelcase": { "version": "3.0.0", "from": "camelcase@>=3.0.0 <4.0.0", @@ -5422,12 +5494,6 @@ "resolved": "https://registry.npmjs.org/webpack-dll-bundles-plugin/-/webpack-dll-bundles-plugin-1.0.0-beta.5.tgz", "dev": true }, - "webpack-md5-hash": { - "version": "0.0.5", - "from": "webpack-md5-hash@0.0.5", - "resolved": "https://registry.npmjs.org/webpack-md5-hash/-/webpack-md5-hash-0.0.5.tgz", - "dev": true - }, "webpack-merge": { "version": "2.4.0", "from": "webpack-merge@2.4.0", diff --git a/package.json b/package.json index 7781baf8..0bfc7af1 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "leaflet": "^0.7.7", "leaflet-map": "^0.2.1", "lodash": "^4.12.0", - "ng2-bootstrap": "1.1.16-11", + "ng2-bootstrap": "^1.3.0", "ng2-ckeditor": "1.1.5", "ng2-smart-table": "^0.5.1-0", "ng2-tree": "^2.0.0-alpha.0", @@ -85,10 +85,11 @@ "html-webpack-plugin": "^2.26.0", "imports-loader": "^0.7.0", "json-loader": "^0.5.4", - "ng-router-loader": "^1.0.2", - "ngc-webpack": "1.1.2", + "ng-router-loader": "^2.1.0", + "ngc-webpack": "^1.1.3", "node-sass": "^4.3.0", "npm-run-all": "^4.0.0", + "optimize-js-plugin": "0.0.4", "parse5": "^3.0.1", "postcss-loader": "^1.0.0", "raw-loader": "0.5.1", @@ -102,17 +103,15 @@ "to-string-loader": "^1.1.4", "ts-helpers": "1.1.2", "ts-node": "^2.0.0", - "tslint": "~4.3.1", + "tslint": "~4.4.0", "typedoc": "^0.5.3", "typescript": "~2.1.5", "url-loader": "^0.5.7", - "v8-lazy-parse-webpack-plugin": "^0.3.0", "webpack": "2.2.0", "webpack-dashboard": "0.2.1", "webpack-dev-middleware": "1.9.0", "webpack-dev-server": "2.2.0", "webpack-dll-bundles-plugin": "^1.0.0-beta.5", - "webpack-md5-hash": "0.0.5", "webpack-merge": "2.4.0" }, "scripts": {