forked from LubinPark/react-redux-router
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebpack.prod.config.js
executable file
·186 lines (184 loc) · 5.74 KB
/
webpack.prod.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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
/**
* 生产环境配置
*/
"use strict";
let webpack = require('webpack');
let path = require('path');
let ExtractTextPlugin = require("extract-text-webpack-plugin"); //独立拆分css
let autoprefixer = require('autoprefixer'); //添加浏览器前缀
var HtmlWebpackPlugin = require('html-webpack-plugin'); //动态生成html
var CopyWebpackPlugin = require('copy-webpack-plugin'); //复制文件
var ImageminPlugin = require('imagemin-webpack-plugin').default;//图片压缩
var imageminPngquant = require('imagemin-pngquant');//png压缩
var imageminJpegRecompress = require('imagemin-jpeg-recompress');//jpg压缩
let pxtorem = require('postcss-pxtorem');//px转rem
process.env.NODE_ENV = 'production';
/** 入口配置
* @type {Object}
*/
var entry = {
vendor: ['./src/home/lib/public.js'],
/**
* 首页入口文件
* @type {String}
*/
home: './src/home/index.js'
};
module.exports = {
/*
* babel参数
* */
babelQuery: {
presets: ['es2015', 'stage-0', 'react'],
plugins: ['transform-runtime', 'add-module-exports', 'typecheck',
"transform-decorators-legacy","babel-plugin-transform-decorators-legacy","transform-class-properties",
"transform-object-assign"
],
cacheDirectory: true
},
/**
* 入口文件
* @type {Object}
*/
entry: entry,
output: {
path: path.join(__dirname, 'dist'),
publicPath: './',
filename: '[name]/[name].bundle.js',
chunkFilename: '[name]/[name].bundle.js'
},
module: {
loaders: [{
test: /\.(js|jsx)$/,
loader: 'babel?presets[]=react,presets[]=es2015,presets[]=stage-0',
exclude: /node_modules/,
query: this.babelQuery
}, {
test: /\.scss$/,
loader: ExtractTextPlugin.extract('css?sourceMap!postcss!sass?sourceMap')
}, {
test: /\.css$/,
loader: ExtractTextPlugin.extract('css?sourceMap!postcss')
}, {
test: /\.(png|jpg)$/,
loader: "url?name=[path][name].[ext]&limit=8192"
}]
},
postcss: function () {
return [pxtorem({
rootValue: 40,
propWhiteList: [],
selectorBlackList: [/^html$/]
})]
},
resolve: {
extensions: ['','.web.js','.js','.jsx', '.scss', 'css', 'png', 'jpg', 'jpeg'],
alias: { //模块别名定义,方便后续直接引用别名,无须多写长长的地址
'loading': path.join(__dirname, './src/home/components/loading'),//loading组件
'btn': path.join(__dirname, './src/home/components/btn'),//按钮组件
'banner': path.join(__dirname, './src/home/components/banner'),//banner组件
'alert': path.join(__dirname, './src/home/components/alert'),//alert组件
'inputGroup': path.join(__dirname, './src/home/components/inputGroup'),//inputGroup组件
'input': path.join(__dirname, './src/home/components/input'),//input组件
'image': path.join(__dirname, './src/home/components/image'),//image组件
'checkbox': path.join(__dirname, './src/home/components/checkbox'),//checkbox组件
'getPage': path.join(__dirname, './src/home/components/GetPage.js'),//getPage
'getData': path.join(__dirname, './src/home/components/GetData.js'),//getData
'getInput': path.join(__dirname, './src/home/components/GetInput.js'),//getInput
'getNextPage': path.join(__dirname, './src/home/components/GetNextPage.js'),//getNextPage
'roll': path.join(__dirname, './src/home/components/roll'),//roll组件
'publicJs': path.join(__dirname, './src/home/lib/public.js'),//公共js
'session': path.join(__dirname, './src/home/lib/session.js'),//session
'verticalRoll': path.join(__dirname, './src/home/components/verticalRoll'),//垂直roll组件
'accordion': path.join(__dirname, './src/home/components/accordion'),//可折叠
}
},
plugins: [
/**
* 案例页
* @type {String}
*/
new HtmlWebpackPlugin({
title: '首页',
keywords: '我的页面关键字',
description: '我的页面描述',
filename: './index.html',
template: './src/common/common.html',
chunks: ['vendor','home'],
inject: true, //要把script插入到标签里
shareIcon: '', //分享图片地址
hash: true //是否产生hash
}),
/**
* 查找相等或近似的模块,避免在最终生成的文件中出现重复的模块
*/
new webpack.optimize.DedupePlugin(),
/**
* 调用dll的内容
* @type {[type]}
*/
new webpack.DllReferencePlugin({
context: __dirname,
//这里引入manifest文件
manifest: require('./dist/vendor-manifest.json')
}),
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: '"production"'
}
}),
/**
* 提取公共部分js
* @type {String}
*/
new webpack.optimize.CommonsChunkPlugin({
names: 'vendor',
filename: 'public.js',
minChunks: Infinity,
}),
//使用压缩丑化js插件
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
},
mangle: {
except: ['$scope', '$']
},
output: {
comments: false,
},
}),
//拷贝文件到dist目录
new CopyWebpackPlugin(
[{
from: './src/home/image',
to: 'image'
}],{
ignore: [
'.DS_Store',
'.svn',
'*.svn-base'
]
}
),
//图片压缩
new ImageminPlugin({
test: 'image/**',
plugins: [
imageminPngquant({
quality: '60',//品质 0-100
speed: 3,//速度 1-10
}),
imageminJpegRecompress({
quality: 'high',
max: 60,
min: 40,
}),
]
}),
/**
* 提取css文件生成单独的css
*/
new ExtractTextPlugin("[name]/[name].bundle.css"),
]
}