-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathwebpack.config.js
123 lines (116 loc) · 2.76 KB
/
webpack.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/**
* @Author: gaomingjun
* @Date: 2017-09-08 10:12:35
* @Last modified by: gaomingjun
* @Last modified time: 2017-09-23 15:57:57
*/
const DEBUG = process.env.NODE_ENV === 'development';
process.noDeprecation = true;
const pkg = require('./package.json');
const path = require('path');
const webpack = require('webpack');
const uglifyJsPlugin = webpack.optimize.UglifyJsPlugin;
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const ProgressPlugin = require('webpack/lib/ProgressPlugin');
const publicPath = '/';
const DEV_PATH = path.join(process.cwd(), 'src');
const PRO_PATH = path.join(process.cwd(), 'dist');
const EXA_PATH = path.join(process.cwd(), 'example');
let entry = {}; //基础入口文件
if (DEBUG) {
entry = {
'simple': path.resolve(EXA_PATH, 'simple.js')
};
} else {
entry = {
'sosnail': path.resolve(DEV_PATH, 'sosnail.js')
};
};
const loaders = {
'babelLoader': {
'loader': 'babel-loader',
'options': {
'compact': false,
'presets': ['env', 'es2015']
}
}
};
let plugins = [
new webpack.BannerPlugin(`version: ${pkg.version}`),
//new ProgressPlugin(),
new webpack.DefinePlugin({
'process': {
'env': {
'NODE_ENV': '"' + process.env.NODE_ENV + '"'
}
}
}),
new webpack.LoaderOptionsPlugin({
'debug': DEBUG
}),
//提供全局的变量,在模块中使用无需用require引入
new HtmlWebpackPlugin({
'env': process.env.NODE_ENV,
'filename': 'index.html',
'template': path.resolve(DEV_PATH, 'index.html'),
'hash': !DEBUG,
'cache': !DEBUG,
'inject': true,
'minify': {
'removeComments': true,
'collapseWhitespace': true
}
})
];
if (!DEBUG) {
plugins.unshift(new CleanWebpackPlugin([path.resolve(PRO_PATH, '**/*')], {
'root': PRO_PATH,
'verbose': true,
'dry': false,
'exclude': []
}));
plugins.push(new uglifyJsPlugin({
'compress': {
'warnings': false
}
}));
}
module.exports = {
'devtool': DEBUG ? '#cheap-module-eval-source-map' : '#source-map',
'cache': !DEBUG,
'devServer': {
'contentBase': PRO_PATH,
'compress': false,
'noInfo': true,
'host': '0.0.0.0',
'overlay': {
'warnings': false,
'errors': true
}
},
'entry': entry,
'output': {
'path': PRO_PATH,
'publicPath': '/',
'filename': '[name].min.js',
'libraryTarget': 'umd',
'library': 'sosnail'
},
'resolve': {
'modules': [
DEV_PATH,
PRO_PATH,
path.resolve(process.cwd(), 'example'),
path.resolve(process.cwd(), 'node_modules')
]
},
'module': {
'rules': [{
'test': /\.js$/,
'exclude': /node_modules/,
'use': loaders.babelLoader
}]
},
'plugins': plugins
};