Skip to content

Commit

Permalink
Use extract-text-plugin to extract css bundle for production builds.
Browse files Browse the repository at this point in the history
Development builds continue to use style-loader for fast developer workflow (HMR).
Production builds use static, minimized, CSS file.
  • Loading branch information
jimitndiaye committed Oct 13, 2016
1 parent a6fadd6 commit e20e804
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 18 deletions.
18 changes: 0 additions & 18 deletions packages/angular-cli/models/webpack-build-common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,24 +71,6 @@ export function getWebpackCommonConfig(
loaders: ['raw-loader', 'postcss-loader', 'sass-loader']
},

// outside of main, load it via style-loader
       {
include: styles,
test: /\.css$/,
loaders: ['style-loader', 'css-loader', 'postcss-loader']
}, {
include: styles,
test: /\.styl$/,
loaders: ['style-loader', 'css-loader', 'postcss-loader', 'stylus-loader']
}, {
include: styles,
test: /\.less$/,
loaders: ['style-loader', 'css-loader', 'postcss-loader', 'less-loader']
}, {
include: styles,
test: /\.scss$|\.sass$/,
loaders: ['style-loader', 'css-loader', 'postcss-loader', 'sass-loader']
},

// load global scripts using script-loader
{ include: scripts, test: /\.js$/, loader: 'script-loader' },
Expand Down
27 changes: 27 additions & 0 deletions packages/angular-cli/models/webpack-build-development.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ declare module 'webpack' {
};

export const getWebpackDevConfigPartial = function(projectRoot: string, appConfig: any) {
const appRoot = path.resolve(projectRoot, appConfig.root);
const styles = appConfig.styles
? appConfig.styles.map((style: string) => path.resolve(appRoot, style))
: [];
const cssLoaders = ['style-loader', 'css-loader?sourcemap', 'postcss-loader'];
return {
devtool: 'cheap-module-source-map',
output: {
Expand All @@ -21,6 +26,28 @@ export const getWebpackDevConfigPartial = function(projectRoot: string, appConfi
sourceMapFilename: '[name].map',
chunkFilename: '[id].chunk.js'
},
module: {
rules: [
// outside of main, load it via style-loader for development builds
       {
include: styles,
test: /\.css$/,
loaders: cssLoaders
}, {
include: styles,
test: /\.styl$/,
loaders: [...cssLoaders, 'stylus-loader?sourcemap']
}, {
include: styles,
test: /\.less$/,
loaders: [...cssLoaders, 'less-loader?sourcemap']
}, {
include: styles,
test: /\.scss$|\.sass$/,
loaders: [...cssLoaders, 'sass-loader?sourcemap']
},
]
},
plugins: [
new webpack.LoaderOptionsPlugin({
options: {
Expand Down
29 changes: 29 additions & 0 deletions packages/angular-cli/models/webpack-build-production.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,14 @@ import * as path from 'path';
const WebpackMd5Hash = require('webpack-md5-hash');
const CompressionPlugin = require('compression-webpack-plugin');
import * as webpack from 'webpack';
const ExtractTextPlugin = require('extract-text-webpack-plugin');

export const getWebpackProdConfigPartial = function(projectRoot: string, appConfig: any) {
const appRoot = path.resolve(projectRoot, appConfig.root);
const styles = appConfig.styles
? appConfig.styles.map((style: string) => path.resolve(appRoot, style))
: [];
const cssLoaders = ['css-loader?sourcemap&minimize', 'postcss-loader'];
return {
devtool: 'source-map',
output: {
Expand All @@ -12,7 +18,30 @@ export const getWebpackProdConfigPartial = function(projectRoot: string, appConf
sourceMapFilename: '[name].[chunkhash].bundle.map',
chunkFilename: '[id].[chunkhash].chunk.js'
},
module: {
rules: [
// outside of main, load it via extract-text-plugin for production builds
       {
include: styles,
test: /\.css$/,
loaders: ExtractTextPlugin.extract(cssLoaders)
}, {
include: styles,
test: /\.styl$/,
loaders: ExtractTextPlugin.extract([...cssLoaders, 'stylus-loader?sourcemap'])
}, {
include: styles,
test: /\.less$/,
loaders: ExtractTextPlugin.extract([...cssLoaders, 'less-loader?sourcemap'])
}, {
include: styles,
test: /\.scss$|\.sass$/,
loaders: ExtractTextPlugin.extract([...cssLoaders, 'sass-loader?sourcemap'])
},
]
},
plugins: [
new ExtractTextPlugin('[name].[contenthash].bundle.css'),
new WebpackMd5Hash(),
new webpack.optimize.UglifyJsPlugin(<any>{
mangle: { screw_ie8 : true },
Expand Down

0 comments on commit e20e804

Please sign in to comment.