1 | const path = require('path')
|
2 | const webpack = require('webpack')
|
3 | const ExtractTextPlugin = require('extract-text-webpack-plugin');
|
4 | const HtmlWebpackPlugin = require('html-webpack-plugin');
|
5 | const autoprefixer = require('autoprefixer');
|
6 | const pxtorem = require('postcss-pxtorem');
|
7 | var souceMap="source-map";
|
8 | console.log("当前的环境变量:"+process.env.NODE_ENV)
|
9 | if(process.env.NODE_ENV === "prod"){
|
10 | console.log("生产环境打包!")
|
11 | souceMap=false;
|
12 | }else{
|
13 | console.log("开发环境编译!")
|
14 | }
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 | const postcssOpts = {
|
28 | ident: 'postcss',
|
29 | plugins: () => [
|
30 | autoprefixer({
|
31 | browsers: ['last 2 versions', 'Firefox ESR', '> 1%', 'ie >= 8', 'iOS >= 8', 'Android >= 4'],
|
32 | }),
|
33 |
|
34 | ],
|
35 | };
|
36 |
|
37 | module.exports = {
|
38 | devtool: souceMap,
|
39 | devServer: {
|
40 | disableHostCheck: true
|
41 | },
|
42 |
|
43 | entry: {
|
44 | "index": path.resolve(__dirname, 'src/index'),
|
45 |
|
46 | vendors:['react','react-dom']
|
47 | },
|
48 |
|
49 | output: {
|
50 | filename: '[name].[chunkhash:5].js',
|
51 | chunkFilename: '[id].chunk.js',
|
52 | path: path.join(__dirname, '/build'),
|
53 |
|
54 | },
|
55 |
|
56 | resolve: {
|
57 | modules: [path.resolve(__dirname, 'node_modules'), path.join(__dirname, 'src')],
|
58 | extensions: ['.web.js', '.jsx', '.js', '.json'],
|
59 |
|
60 | alias: {
|
61 | Comps: path.resolve(__dirname, 'src/components/'),
|
62 | Utils: path.resolve(__dirname, 'src/util/'),
|
63 | RestUrl: path.resolve(__dirname, 'src/actions/RestUrl/'),
|
64 | Img: path.resolve(__dirname, 'src/assets/img/')
|
65 | }
|
66 | },
|
67 |
|
68 | module: {
|
69 | rules: [
|
70 | {
|
71 | test: /\.jsx?$/, exclude: /node_modules/, loader: 'babel-loader',
|
72 | options: {
|
73 | plugins: [
|
74 | 'external-helpers',
|
75 | ["transform-runtime", {polyfill: false}],
|
76 | ["import", [{"style": "css", "libraryName": "antd-mobile"}]]
|
77 | ],
|
78 | presets: ['es2015', 'stage-0', 'react']
|
79 |
|
80 | }
|
81 | },
|
82 | {test: /\.(jpg|png)$/, loader: "url-loader?limit=8192&name=img/[name]_[hash:5].[ext]"},
|
83 |
|
84 |
|
85 |
|
86 | {
|
87 | test: /\.less$/i, use: ExtractTextPlugin.extract({
|
88 | fallback: 'style-loader',
|
89 | use: [
|
90 | 'css-loader', {loader: 'postcss-loader', options: postcssOpts}, 'less-loader'
|
91 | ]
|
92 | })
|
93 | },
|
94 | {
|
95 | test: /\.css$/i, use: ExtractTextPlugin.extract({
|
96 | fallback: 'style-loader',
|
97 | use: [
|
98 | 'css-loader', {loader: 'postcss-loader', options: postcssOpts}
|
99 | ]
|
100 | })
|
101 | },
|
102 | {
|
103 | test: /\.svg$/i,
|
104 | use:'svg-sprite-loader',
|
105 | include: [
|
106 | require.resolve('antd-mobile').replace(/warn\.js$/, ''),
|
107 | path.resolve(__dirname, './node_modules/yylib-antd-mobile/svg/'),
|
108 | path.resolve(__dirname, './src/'),
|
109 | ]
|
110 | },
|
111 | ]
|
112 | },
|
113 | plugins: [
|
114 | new webpack.optimize.ModuleConcatenationPlugin(),
|
115 |
|
116 | new webpack.optimize.CommonsChunkPlugin({
|
117 |
|
118 | name: 'shared',
|
119 | filename: 'shared.[chunkhash:5].js'
|
120 | }),
|
121 | new ExtractTextPlugin({filename: '[name].[contenthash:5].css', allChunks: true}),
|
122 | new HtmlWebpackPlugin({template: './public/index.html'}),
|
123 |
|
124 | ]
|
125 | }
|