Skip to content

Commit e20e804

Browse files
committed
Use extract-text-plugin to extract css bundle for production builds.
Development builds continue to use style-loader for fast developer workflow (HMR). Production builds use static, minimized, CSS file.
1 parent a6fadd6 commit e20e804

File tree

3 files changed

+56
-18
lines changed

3 files changed

+56
-18
lines changed

packages/angular-cli/models/webpack-build-common.ts

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -71,24 +71,6 @@ export function getWebpackCommonConfig(
7171
loaders: ['raw-loader', 'postcss-loader', 'sass-loader']
7272
},
7373

74-
// outside of main, load it via style-loader
75-
       {
76-
include: styles,
77-
test: /\.css$/,
78-
loaders: ['style-loader', 'css-loader', 'postcss-loader']
79-
}, {
80-
include: styles,
81-
test: /\.styl$/,
82-
loaders: ['style-loader', 'css-loader', 'postcss-loader', 'stylus-loader']
83-
}, {
84-
include: styles,
85-
test: /\.less$/,
86-
loaders: ['style-loader', 'css-loader', 'postcss-loader', 'less-loader']
87-
}, {
88-
include: styles,
89-
test: /\.scss$|\.sass$/,
90-
loaders: ['style-loader', 'css-loader', 'postcss-loader', 'sass-loader']
91-
},
9274

9375
// load global scripts using script-loader
9476
{ include: scripts, test: /\.js$/, loader: 'script-loader' },

packages/angular-cli/models/webpack-build-development.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ declare module 'webpack' {
1313
};
1414

1515
export const getWebpackDevConfigPartial = function(projectRoot: string, appConfig: any) {
16+
const appRoot = path.resolve(projectRoot, appConfig.root);
17+
const styles = appConfig.styles
18+
? appConfig.styles.map((style: string) => path.resolve(appRoot, style))
19+
: [];
20+
const cssLoaders = ['style-loader', 'css-loader?sourcemap', 'postcss-loader'];
1621
return {
1722
devtool: 'cheap-module-source-map',
1823
output: {
@@ -21,6 +26,28 @@ export const getWebpackDevConfigPartial = function(projectRoot: string, appConfi
2126
sourceMapFilename: '[name].map',
2227
chunkFilename: '[id].chunk.js'
2328
},
29+
module: {
30+
rules: [
31+
// outside of main, load it via style-loader for development builds
32+
       {
33+
include: styles,
34+
test: /\.css$/,
35+
loaders: cssLoaders
36+
}, {
37+
include: styles,
38+
test: /\.styl$/,
39+
loaders: [...cssLoaders, 'stylus-loader?sourcemap']
40+
}, {
41+
include: styles,
42+
test: /\.less$/,
43+
loaders: [...cssLoaders, 'less-loader?sourcemap']
44+
}, {
45+
include: styles,
46+
test: /\.scss$|\.sass$/,
47+
loaders: [...cssLoaders, 'sass-loader?sourcemap']
48+
},
49+
]
50+
},
2451
plugins: [
2552
new webpack.LoaderOptionsPlugin({
2653
options: {

packages/angular-cli/models/webpack-build-production.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,14 @@ import * as path from 'path';
22
const WebpackMd5Hash = require('webpack-md5-hash');
33
const CompressionPlugin = require('compression-webpack-plugin');
44
import * as webpack from 'webpack';
5+
const ExtractTextPlugin = require('extract-text-webpack-plugin');
56

67
export const getWebpackProdConfigPartial = function(projectRoot: string, appConfig: any) {
8+
const appRoot = path.resolve(projectRoot, appConfig.root);
9+
const styles = appConfig.styles
10+
? appConfig.styles.map((style: string) => path.resolve(appRoot, style))
11+
: [];
12+
const cssLoaders = ['css-loader?sourcemap&minimize', 'postcss-loader'];
713
return {
814
devtool: 'source-map',
915
output: {
@@ -12,7 +18,30 @@ export const getWebpackProdConfigPartial = function(projectRoot: string, appConf
1218
sourceMapFilename: '[name].[chunkhash].bundle.map',
1319
chunkFilename: '[id].[chunkhash].chunk.js'
1420
},
21+
module: {
22+
rules: [
23+
// outside of main, load it via extract-text-plugin for production builds
24+
       {
25+
include: styles,
26+
test: /\.css$/,
27+
loaders: ExtractTextPlugin.extract(cssLoaders)
28+
}, {
29+
include: styles,
30+
test: /\.styl$/,
31+
loaders: ExtractTextPlugin.extract([...cssLoaders, 'stylus-loader?sourcemap'])
32+
}, {
33+
include: styles,
34+
test: /\.less$/,
35+
loaders: ExtractTextPlugin.extract([...cssLoaders, 'less-loader?sourcemap'])
36+
}, {
37+
include: styles,
38+
test: /\.scss$|\.sass$/,
39+
loaders: ExtractTextPlugin.extract([...cssLoaders, 'sass-loader?sourcemap'])
40+
},
41+
]
42+
},
1543
plugins: [
44+
new ExtractTextPlugin('[name].[contenthash].bundle.css'),
1645
new WebpackMd5Hash(),
1746
new webpack.optimize.UglifyJsPlugin(<any>{
1847
mangle: { screw_ie8 : true },

0 commit comments

Comments
 (0)