From d4db5792a495b2adea66521a0e5c26e3d7eb155c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Chopin?= Date: Fri, 24 Mar 2017 01:28:04 +0100 Subject: [PATCH] Improve webpack config - Remove filenames.css - Add FriendlyErrorsWebpackPlugin() - Add sourceMaps for UglifyJS - Minify CSS for server-rendered pages - Add css-loader for imports --- lib/build.js | 1 - lib/webpack/base.config.js | 4 ++++ lib/webpack/client.config.js | 11 ++++++++++- lib/webpack/server.config.js | 9 ++++++++- lib/webpack/vue-loader.config.js | 1 + package.json | 1 + 6 files changed, 24 insertions(+), 3 deletions(-) diff --git a/lib/build.js b/lib/build.js index 570cb3d52a..a94f1c736f 100644 --- a/lib/build.js +++ b/lib/build.js @@ -47,7 +47,6 @@ const defaults = { analyze: false, publicPath: '/_nuxt/', filenames: { - css: 'style.[hash].css', vendor: 'vendor.bundle.[hash].js', app: 'nuxt.bundle.[chunkhash].js' }, diff --git a/lib/webpack/base.config.js b/lib/webpack/base.config.js index 1d435679ab..d2e2a9d172 100644 --- a/lib/webpack/base.config.js +++ b/lib/webpack/base.config.js @@ -68,6 +68,10 @@ export default function ({ isClient, isServer }) { presets: ['vue-app'], cacheDirectory: !!this.dev }) + }, + { + test: /\.css$/, + loader: 'vue-style-loader!css-loader' } ] }, diff --git a/lib/webpack/client.config.js b/lib/webpack/client.config.js index 6b84f5f6d2..7e40a22d29 100644 --- a/lib/webpack/client.config.js +++ b/lib/webpack/client.config.js @@ -3,6 +3,7 @@ import { each } from 'lodash' import webpack from 'webpack' import HTMLPlugin from 'html-webpack-plugin' +import FriendlyErrorsWebpackPlugin from 'friendly-errors-webpack-plugin' import ScriptExtHtmlWebpackPlugin from 'script-ext-html-webpack-plugin' import PreloadWebpackPlugin from 'preload-webpack-plugin' import ProgressBarPlugin from 'progress-bar-webpack-plugin' @@ -77,12 +78,20 @@ export default function () { config.plugins.push( new ProgressBarPlugin() ) - + // Add friendly error plugin + if (this.dev) { + config.plugins.push(new FriendlyErrorsWebpackPlugin()) + } // Production client build if (!this.dev) { config.plugins.push( + // This is needed in webpack 2 for minifying CSS + new webpack.LoaderOptionsPlugin({ + minimize: true + }), // Minify JS new webpack.optimize.UglifyJsPlugin({ + sourceMap: true, compress: { warnings: false } diff --git a/lib/webpack/server.config.js b/lib/webpack/server.config.js index 4486e2c3ff..aac5e7b754 100644 --- a/lib/webpack/server.config.js +++ b/lib/webpack/server.config.js @@ -43,7 +43,14 @@ export default function () { })) ]) }) - + // This is needed in webpack 2 for minifying CSS + if (!this.dev) { + config.plugins.push( + new webpack.LoaderOptionsPlugin({ + minimize: true + }) + ) + } // Externals const nuxtPackageJson = require('../../package.json') const projectPackageJsonPath = resolve(this.dir, 'package.json') diff --git a/lib/webpack/vue-loader.config.js b/lib/webpack/vue-loader.config.js index 7cb37d9444..7b431505ac 100644 --- a/lib/webpack/vue-loader.config.js +++ b/lib/webpack/vue-loader.config.js @@ -11,6 +11,7 @@ export default function ({ isClient }) { postcss: this.options.build.postcss, loaders: { 'js': 'babel-loader?' + babelOptions, + 'css': 'vue-style-loader!css-loader', 'less': 'vue-style-loader!css-loader!less-loader', 'sass': 'vue-style-loader!css-loader!sass-loader?indentedSyntax', 'scss': 'vue-style-loader!css-loader!sass-loader', diff --git a/package.json b/package.json index cd4f151cae..148994bf55 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "css-loader": "^0.27.3", "debug": "^2.6.3", "file-loader": "^0.10.1", + "friendly-errors-webpack-plugin": "^1.6.1", "fs-extra": "^2.1.2", "glob": "^7.1.1", "hash-sum": "^1.0.2",