diff --git a/.gitignore b/.gitignore index 4bef053..bcb2a9e 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,3 @@ # node node_modules npm-debug.log - -# other -dist diff --git a/package.json b/package.json index dbf9484..57e36ce 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "eslint-config-airbnb": "6.x", "eslint-plugin-react": "4.x", "file-loader": "0.9.0", + "html-webpack-plugin": "^2.22.0", "less": "2.7.1", "less-loader": "2.2.3", "lesshint": "2.0.2", diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..fb39177 --- /dev/null +++ b/src/index.html @@ -0,0 +1,14 @@ + + + + + + + Ant Design Admin + + + +
+ + + diff --git a/webpack.config.js b/webpack.config.js index 7707994..e39f879 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,55 +1,61 @@ -const webpack = require('webpack'); +const webpack = require('webpack') +const HtmlWebpackPlugin = require('html-webpack-plugin') -// 将babel-loader的配置独立出来, 因为webpack的限制: http://stackoverflow.com/questions/33117136/how-to-add-a-query-to-a-webpack-loader-with-multiple-loaders const babelLoaderConfig = { - presets: ['es2015', 'stage-0', 'react'], // 开启ES6、部分ES7、react特性, preset相当于预置的插件集合 - plugins: [['antd', {'style': true}]], // antd模块化加载, https://github.com/ant-design/babel-plugin-antd + presets: ['es2015', 'stage-0', 'react'], + plugins: [ + ['antd', { + 'style': true + }] + ], }; module.exports = { entry: [ - 'webpack-dev-server/client?http://0.0.0.0:8080', // WebpackDevServer host and port - 'webpack/hot/only-dev-server', // "only" prevents reload on syntax errors - 'babel-polyfill', // 可以使用完整的ES6特性, 大概增加100KB - './src/index.js', // 编译的入口 + 'webpack-dev-server/client?http://0.0.0.0:8080', + 'webpack/hot/only-dev-server', + 'babel-polyfill', + './src/index.js' ], - output: { // 输出的目录和文件名 + output: { path: __dirname + '/dist', - filename: 'bundle.js', + filename: 'js/bundle.js', }, resolve: { - modulesDirectories: ['node_modules', './src'], // import时到哪些地方去寻找模块 - extensions: ['', '.js', '.jsx'], // require的时候可以直接使用require('file'),不用require('file.js') + modulesDirectories: ['node_modules', './src'], + extensions: ['', '.js', '.jsx'], alias: { - antdcss: 'antd/dist/antd.min.css', // import时的别名 + antdcss: 'antd/dist/antd.min.css', }, }, module: { - loaders: [ // 定义各种loader - { - test: /\.jsx?$/, - loaders: ['react-hot', 'babel-loader?' + JSON.stringify(babelLoaderConfig)], // react-hot-loader可以不用刷新页面, 如果用普通的dev-server的话会自动刷新页面 - exclude: /node_modules/, - }, { - test: /\.css$/, - loader: 'style!css', - }, { - test: /\.less$/, - loader: 'style!css!less', // 用!去链式调用loader - }, { - test: /\.(png|jpg|svg)$/, - loader: 'url?limit=25000', // 图片小于一定值的话转成base64 - }, - ], + loaders: [{ + test: /\.jsx?$/, + loaders: ['react-hot', 'babel-loader?' + JSON.stringify(babelLoaderConfig)], + exclude: /node_modules/, + }, { + test: /\.css$/, + loader: 'style!css', + }, { + test: /\.less$/, + loader: 'style!css!less', + }, { + test: /\.(png|jpg|svg)$/, + loader: 'url?limit=25000', + }, ], }, plugins: [ - new webpack.BannerPlugin('This file is created by jxy'), // 生成文件时加上注释 + new HtmlWebpackPlugin({ + title: 'Ant Design Admin', + filename: 'index.html', + template: './src/index.html' + }), new webpack.DefinePlugin({ - __DEV__: JSON.stringify(JSON.parse(process.env.NODE_ENV === 'production' ? 'false' : 'true')), // magic globals, 用于打印一些调试的日志, webpack -p时会删除 + __DEV__: JSON.stringify(JSON.parse(process.env.NODE_ENV === 'production' ? 'false' : 'true')), }), ], }; diff --git a/webpack.config.prod.js b/webpack.config.prod.js index fa25e32..408e739 100644 --- a/webpack.config.prod.js +++ b/webpack.config.prod.js @@ -7,13 +7,12 @@ const babelLoaderConfig = { module.exports = { entry: [ - // 可能需要polyfill './src/index.js', ], output: { path: __dirname + '/dist', - filename: 'bundle.min.js', + filename: 'bundle.js', // publicPath: 'http://mycdn.com/', // require时用来生成图片的地址 }, @@ -26,7 +25,6 @@ module.exports = { loaders: [ { test: /\.jsx?$/, - // 删除一些debug语句 loaders: ['babel-loader?' + JSON.stringify(babelLoaderConfig), 'strip-loader?strip[]=logger.debug,strip[]=console.log,strip[]=console.debug'], exclude: /node_modules/, }, { @@ -43,22 +41,19 @@ module.exports = { }, plugins: [ - // 代码压缩 new webpack.optimize.UglifyJsPlugin({ minimize: true, compress: {warnings: false}, }), - - // 抽离公共部分 - // webpack.optimize.CommonsChunkPlugin - + new HtmlWebpackPlugin({ + title: 'Ant Design Admin', + filename: 'index.html', + template: './src/index.html' + }), new webpack.optimize.DedupePlugin(), - // 比对id的使用频率和分布来得出最短的id分配给使用频率高的模块 new webpack.optimize.OccurenceOrderPlugin(), new webpack.optimize.AggressiveMergingPlugin(), - // 允许错误不打断程序 new webpack.NoErrorsPlugin(), - new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV), __DEV__: JSON.stringify(JSON.parse(process.env.NODE_ENV === 'production' ? 'false' : 'true')),