Skip to content
This repository was archived by the owner on Oct 7, 2020. It is now read-only.

Commit 94972ce

Browse files
committed
build(webpack): Changes to improve the build process in webpack. WIP
1 parent 08e2f6e commit 94972ce

File tree

2 files changed

+173
-124
lines changed

2 files changed

+173
-124
lines changed

config/webpack/webpack.config.umd.js

Lines changed: 105 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -2,108 +2,113 @@ const webpack = require('webpack');
22
var util = require('./util');
33

44
module.exports = {
5-
entry: './src/lib/index.ts',
6-
output: {
7-
path: util.root('dist/bundle'),
8-
filename: 'core.js',
9-
libraryTarget: 'umd',
10-
library: 'angularMDCWeb'
11-
},
12-
resolve: {
13-
extensions: ['.ts', '.js']
14-
},
15-
externals: {
16-
'@angular/core': {
17-
root: ['ng', 'core'],
18-
commonjs: '@angular/core',
19-
commonjs2: '@angular/core',
20-
amd: '@angular/core'
5+
entry: './src/lib/index.ts',
6+
output: {
7+
path: util.root('dist/bundle'),
8+
filename: 'core.js',
9+
libraryTarget: 'umd',
10+
library: 'angularMDCWeb'
2111
},
22-
'@angular/common': {
23-
root: ['ng', 'common'],
24-
commonjs: '@angular/common',
25-
commonjs2: '@angular/common',
26-
amd: '@angular/common'
12+
resolve: {
13+
extensions: ['.ts', '.tsx', '.js']
2714
},
28-
'@angular/forms': {
29-
root: ['ng', 'forms'],
30-
commonjs: '@angular/forms',
31-
commonjs2: '@angular/forms',
32-
amd: '@angular/forms'
33-
},
34-
'@angular/platform-browser': {
35-
root: ['ng', 'platformBrowser'],
36-
commonjs: '@angular/platform-browser',
37-
commonjs2: '@angular/platform-browser',
38-
amd: '@angular/platform-browser'
39-
},
40-
'@angular/platform-browser-dynamic': {
41-
root: ['ng', 'platformBrowserDynamic'],
42-
commonjs: '@angular/platform-browser-dynamic',
43-
commonjs2: '@angular/platform-browser-dynamic',
44-
amd: '@angular/platform-browser-dynamic'
45-
},
46-
'rxjs/Subject': {
47-
root: ['rx', 'Subject'],
48-
commonjs: 'rxjs/Subject',
49-
commonjs2: 'rxjs/Subject',
50-
amd: 'rxjs/Subject'
51-
},
52-
'rxjs/Observable': {
53-
root: ['rx', 'Observable'],
54-
commonjs: 'rxjs/Observable',
55-
commonjs2: 'rxjs/Observable',
56-
amd: 'rxjs/Observable'
57-
},
58-
'rxjs/BehaviorSubject': {
59-
root: ['rx', 'BehaviorSubject'],
60-
commonjs: 'rxjs/BehaviorSubject',
61-
commonjs2: 'rxjs/BehaviorSubject',
62-
amd: 'rxjs/BehaviorSubject'
63-
},
64-
'material-components-web': {
65-
root: ['mdc', 'material-components-web'],
66-
commonjs: 'material-components-web',
67-
commonjs2: 'material-components-web',
68-
amd: 'material-components-web'
69-
}
70-
},
71-
module: {
72-
rules: [{
73-
test: /\.ts$/,
74-
use: [{
75-
loader: 'babel-loader'
76-
}, {
77-
loader: 'awesome-typescript-loader',
78-
options: {
79-
configFileName: './src/lib/tsconfig.json'
15+
externals: {
16+
'@angular/core': {
17+
root: ['ng', 'core'],
18+
commonjs: '@angular/core',
19+
commonjs2: '@angular/core',
20+
amd: '@angular/core'
21+
},
22+
'@angular/common': {
23+
root: ['ng', 'common'],
24+
commonjs: '@angular/common',
25+
commonjs2: '@angular/common',
26+
amd: '@angular/common'
27+
},
28+
'@angular/forms': {
29+
root: ['ng', 'forms'],
30+
commonjs: '@angular/forms',
31+
commonjs2: '@angular/forms',
32+
amd: '@angular/forms'
33+
},
34+
'@angular/platform-browser': {
35+
root: ['ng', 'platformBrowser'],
36+
commonjs: '@angular/platform-browser',
37+
commonjs2: '@angular/platform-browser',
38+
amd: '@angular/platform-browser'
39+
},
40+
'@angular/platform-browser-dynamic': {
41+
root: ['ng', 'platformBrowserDynamic'],
42+
commonjs: '@angular/platform-browser-dynamic',
43+
commonjs2: '@angular/platform-browser-dynamic',
44+
amd: '@angular/platform-browser-dynamic'
45+
},
46+
'rxjs/Subject': {
47+
root: ['rx', 'Subject'],
48+
commonjs: 'rxjs/Subject',
49+
commonjs2: 'rxjs/Subject',
50+
amd: 'rxjs/Subject'
51+
},
52+
'rxjs/Observable': {
53+
root: ['rx', 'Observable'],
54+
commonjs: 'rxjs/Observable',
55+
commonjs2: 'rxjs/Observable',
56+
amd: 'rxjs/Observable'
57+
},
58+
'rxjs/BehaviorSubject': {
59+
root: ['rx', 'BehaviorSubject'],
60+
commonjs: 'rxjs/BehaviorSubject',
61+
commonjs2: 'rxjs/BehaviorSubject',
62+
amd: 'rxjs/BehaviorSubject'
63+
},
64+
'material-components-web': {
65+
root: ['mdc', 'material-components-web'],
66+
commonjs: 'material-components-web',
67+
commonjs2: 'material-components-web',
68+
amd: 'material-components-web'
8069
}
81-
}, {
82-
loader: 'angular2-template-loader'
83-
}],
84-
exclude: [/\.(spec|e2e)\.ts$/]
85-
}, {
86-
test: /\.html$/,
87-
loader: 'html-loader'
88-
}, {
89-
test: /\.(sass|scss)$/,
90-
use: [
91-
'style-loader',
92-
'css-loader', {
93-
loader: 'sass-loader',
94-
options: {
95-
includePaths: [
96-
'node_modules'
70+
},
71+
module: {
72+
rules: [{
73+
test: /\.ts$/,
74+
use: [{
75+
loader: 'babel-loader?presets[]=es2015'
76+
}, {
77+
loader: 'awesome-typescript-loader',
78+
options: {
79+
configFileName: './src/lib/tsconfig.json'
80+
}
81+
}, {
82+
loader: 'angular2-template-loader'
83+
}],
84+
exclude: [/\.(spec|e2e)\.ts$/]
85+
}, {
86+
test: /\.html$/,
87+
loader: 'html-loader'
88+
}, {
89+
test: /\.(sass|scss)$/,
90+
use: [
91+
'style-loader',
92+
'css-loader', {
93+
loader: 'sass-loader',
94+
options: {
95+
includePaths: [
96+
'node_modules'
97+
]
98+
},
99+
},
97100
]
98-
},
99-
},
100-
]
101-
}]
102-
},
103-
plugins: [
104-
new webpack.SourceMapDevToolPlugin({
105-
filename: 'core.js.map',
106-
test: /\.js($|\?)/i
107-
})
108-
]
101+
}]
102+
},
103+
plugins: [
104+
new webpack.optimize.UglifyJsPlugin({
105+
minimize: true,
106+
sourceMap: true,
107+
include: /\.min\.js$/,
108+
}),
109+
new webpack.SourceMapDevToolPlugin({
110+
filename: 'core.js.map',
111+
test: /\.js($|\?)/i
112+
})
113+
]
109114
};

config/webpack/webpack.dev.js

Lines changed: 68 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,82 @@
1-
const webpack = require('webpack');
1+
const webpack = require('webpack');
22
const path = require('path');
3+
const glob = require('glob');
4+
const CopyPlugin = require('copy-webpack-plugin');
5+
const ExtractTextPlugin = require('extract-text-webpack-plugin');
36
const OUT_PATH = path.resolve('./publish');
47
const MDC_DIR = path.resolve(__dirname, 'node_modules', '@material');
8+
var util = require('./util');
59

610
const CSS_LOADER_CONFIG = [{
7-
loader: 'css-loader',
8-
options: {
9-
sourceMap: true
10-
}
11+
loader: 'css-loader'
1112
}, {
1213
loader: 'postcss-loader',
1314
options: {
14-
plugins: () => [require('autoprefixer')({ grid: false })]
15+
plugins: () => [require('autoprefixer')({
16+
grid: false
17+
})]
1518
}
1619
}, {
1720
loader: 'sass-loader',
1821
options: {
19-
sourceMap: true,
20-
includePaths: path.join(__dirname, "sass")
22+
includePaths: ['node_modules', 'node_modules/@material/*', 'sass']
2123
}
2224
}];
2325

2426
module.exports = [{
25-
devtool: 'source-map',
26-
cache: true,
27+
name: 'css',
28+
entry: path.resolve('./src/demo-app/sass/main.scss'),
29+
output: {
30+
path: OUT_PATH,
31+
// this output file is replaced below when ExtractTextPlugin generates final css.
32+
filename: 'assets/style.min.css'
33+
},
34+
module: {
35+
rules: [{
36+
test: /\.scss$/,
37+
use: ExtractTextPlugin.extract({
38+
fallback: 'style-loader',
39+
use: CSS_LOADER_CONFIG
40+
})
41+
}]
42+
},
43+
plugins: [
44+
new webpack.LoaderOptionsPlugin({
45+
minimize: true,
46+
debug: false
47+
}),
48+
new webpack.LoaderOptionsPlugin({
49+
options: {
50+
postcss: function() {
51+
return [autoprefixer];
52+
}
53+
}
54+
}),
55+
new ExtractTextPlugin('assets/style.css')
56+
]
57+
}, {
58+
devtool: false,
2759
output: {
2860
path: OUT_PATH,
2961
filename: '[name].bundle.js'
62+
// filename: '[name].[chunkhash].bundle.js',
63+
// sourceMapFilename: '[name].[chunkhash].bundle.js.map',
64+
// chunkFilename: '[name].chunk.[chunkhash].js',
3065
},
3166
entry: {
3267
'polyfills': './src/demo-app/polyfills.ts',
3368
'vendor': './src/demo-app/vendor.ts',
3469
'app': './src/demo-app/root.module.ts'
3570
},
3671
resolve: {
37-
extensions: ['.ts', '.js']
72+
extensions: ['.js', '.ts'],
73+
modules: [util.root('src'), util.root('node_modules')],
3874
},
3975
module: {
4076
rules: [{
4177
test: /\.ts$/,
4278
use: [{
43-
loader: 'babel-loader'
79+
loader: 'babel-loader?presets[]=es2015',
4480
}, {
4581
loader: 'awesome-typescript-loader',
4682
options: {
@@ -51,38 +87,46 @@ module.exports = [{
5187
}],
5288
exclude: [/\.(spec|e2e)\.ts$/]
5389
}, {
54-
test: /\.js$/,
55-
loader: 'babel-loader',
56-
include: [
57-
MDC_DIR
90+
"enforce": "pre",
91+
"test": /\.(js|jsx)$/,
92+
"use": [{
93+
"loader": 'babel-loader',
94+
"options": {
95+
"presets": ['es2015'],
96+
},
97+
}, ],
98+
"exclude": [
99+
/\/node_modules\//
58100
]
59101
}, {
60102
test: /\.html$/,
61-
loader: 'html-loader'
103+
loader: 'html-loader',
62104
}, {
63105
test: /\.(sass|scss)$/,
64106
use: [
65107
'style-loader',
66108
'css-loader', {
67109
loader: 'sass-loader',
68110
options: {
69-
includePaths: [
70-
'node_modules'
71-
]
72-
},
111+
includePaths: ['node_modules', "node_modules/@material/*"]
112+
}
73113
},
74114
]
75115
}]
76116
},
77117
plugins: [
78-
// Workaround for angular/angular#11580
118+
new webpack.LoaderOptionsPlugin({
119+
//minimize: true, do not minimize for any loader - this will result in weird, unpredictable behavior
120+
debug: false
121+
}),
122+
// Workaround for angular/angular#1158
79123
new webpack.ContextReplacementPlugin(
80124
/angular(\\|\/)core(\\|\/)@angular/,
81-
path.resolve(__dirname, './ts')
125+
path.resolve(__dirname, './src')
82126
),
83127
new webpack.optimize.CommonsChunkPlugin({
84128
name: ['app', 'vendor', 'polyfills'],
85129
minChunks: Infinity
86-
})
130+
}),
87131
]
88132
}];

0 commit comments

Comments
 (0)