webpack3 针对一般项目用这份配置基本够了
2017-09-12 21:52
411 查看
这段时间在将webpack从1升级到3,因为等项目稳定下来想升级2的时候,3都出来了。想了解3的东西,直接可以看官网就好了,都有解释,根本不用看别人的翻译,官网也提供了中文,地址:https://webpack.js.org。不要浪费时间看别人的博客,多看看官方文档。我这里只是贴出我自己项目的webpack3的配置文件内容。没有特殊要求,我这份就足够了,目前只对SPA类型的项目做了升级,分别有两份配置(开发环境和生产环境)。
开发环境配置如下:
生产环境配置如下:
开发环境配置如下:
const webpack = require('webpack'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const CleanPlugin = require('clean-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); const DashboardPlugin = require('webpack-dashboard/plugin'); const path = require('path'); const autoprefixerFromPostcss = require('autoprefixer'); const cssnanoFromPostcss = require('cssnano'); module.exports = { entry: ['babel-polyfill', __dirname + '/src/main.js'], output: { path: __dirname + '/public', filename: 'js/[name].[hash:8].bundle.js', chunkFilename: 'js/[name]-[id].[hash:8].bundle.js', }, module: { rules: [ { test: /\.css$/, use: ExtractTextPlugin.extract({ fallback: 'style-loader', use: [ { loader: 'css-loader', options: { modules: true, }, }, { loader: 'postcss-loader', options: { plugins: (loader) => [ autoprefixerFromPostcss(), cssnanoFromPostcss(), ], }, }, ], }), }, { test: /\.js$/, exclude: /node_modules/, use: { loader: 'babel-loader', options: { presets: ['react', ['env',{ 'targets': { 'browsers': ['last 2 versions', 'ie >= 9'], }, 'modules': false, 'loose': true, 'useBuiltIns': true, 'debug': true, }, ] ], plugins: [ 'babel-plugin-transform-class-properties', 'babel-plugin-syntax-dynamic-import', [ 'babel-plugin-transform-runtime', { 'helpers': true, 'polyfill': true, 'regenerator': true, }, ], [ 'babel-plugin-transform-object-rest-spread', { 'useBuiltIns': true }, ], [ 'import', { "libraryName": "antd", "style": true, } ] ], }, }, }, { test: /\.less$/, use: ExtractTextPlugin.extract({ use: [{ loader: 'css-loader', }, { loader: 'less-loader', }], fallback: 'style-loader', }), }, { test: / 4000 \.(png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot)$/, use: { loader: 'file-loader', options: { name: '[path][name].[ext]', outputPath: 'images', }, }, }, { test: /\.js$/, use: ['source-map-loader'], enforce: 'pre', }, ], }, plugins: [ new CleanPlugin(['public'], { 'root': __dirname, 'verbose': true, 'dry': false, }), new CopyWebpackPlugin([ {from: __dirname + '/src/assets', to: __dirname + '/public/assets'}, ]), new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify('development'), }, }), new webpack.optimize.ModuleConcatenationPlugin(), new HtmlWebpackPlugin({ template: __dirname + '/src/index.html', }), new ExtractTextPlugin({ filename: 'css/[name].[contenthash].css', }), new DashboardPlugin(), new webpack.HotModuleReplacementPlugin(), ], devtool: 'source-map', devServer: { contentBase: path.join(__dirname, 'public'), compress: true, host: "0.0.0.0", port: '8000', historyApiFallback: true, inline: true, hot: true, hotOnly: true, }, };
生产环境配置如下:
const webpack = require('webpack'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); const CleanPlugin = require('clean-webpack-plugin'); // 清理文件夹 module.exports = { entry: __dirname + '/src/main.js', output: { path: __dirname + '/dist/pro', filename: 'js/[name]-[hash:7].js', }, module: { rules: [ { test: /\.css$/, use: ExtractTextPlugin.extract({ fallback: 'style-loader', use: [ { loader: 'css-loader', options: { modules: true, }, }, { loader: 'postcss-loader', options: { plugins: (loader) => [ require('autoprefixer')(), require('cssnano')(), ], }, }, ], }), }, { test: /\.js$/, exclude: /(node_modules|bower_components)/, use: { loader: 'babel-loader', options: { presets: ['react', ['env',{ 'targets': { 'browsers': ['last 2 versions', 'ie >= 9'], 'uglify': true }, 'modules': false, 'loose': true, 'useBuiltIns': true, }, ] ], plugins: [ 'babel-plugin-transform-class-properties', 'babel-plugin-syntax-dynamic-import', [ 'babel-plugin-transform-runtime', { 'helpers': true, 'polyfill': true, 'regenerator': true, }, ], [ 'babel-plugin-transform-object-rest-spread', { 'useBuiltIns': true }, ], [ 'import', { "libraryName": "antd", "style": true, } ] ], }, }, }, { test: /\.(png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot)$/, use: { loader: 'file-loader', options: { name: '[path][name].[ext]', outputPath: 'images', }, }, }, { test: /\.less$/, use: ExtractTextPlugin.extract({ use: [{ loader: 'css-loader', }, { loader: 'less-loader', }], fallback: 'style-loader', }), }, { test: /\.gz$/, enforce: 'pre', use: 'gzip-loader', }, ], }, plugins: [ // 清空输出目录 new CleanPlugin(['dist/pro'], { 'root': __dirname, 'verbose': true, 'dry': false, }), new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify('production'), }, }), new webpack.optimize.ModuleConcatenationPlugin(), new HtmlWebpackPlugin({ template: __dirname + '/src/index.html', }), new ExtractTextPlugin({ filename: 'css/[name].[contenthash].css', }), new webpack.optimize.UglifyJsPlugin(), new CopyWebpackPlugin([ {from: __dirname + '/src/assets', to: __dirname + '/dist/pro/assets'}, ]), ], };
相关文章推荐
- 项目中使用webpack基本的配置
- 前端工程化--webpack4.x的基本配置--打包基本资源、ES6转换、热更新
- Web项目Spring基本配置
- webpack在项目中的一些配置
- Webpack基本配置介绍
- webpack安装与基本配置
- [置顶] vue-cli的webpack模板项目配置文件分析
- webpack+vue-cil 配置接口地址代理以及将项目打包到子目录的方法
- JavaWeb项目中web.xml有关servlet的基本配置
- 16.如何做到webpack打包vue项目后,可以修改配置文件
- 【22】手动配置webpack项目
- Vue-webpack项目配置详解
- csdn上看到的一篇关于vue-cli的webpack模板项目配置文件分析
- webpack从零开始构建项目之vue模板配置(二)
- Vue2+VueRouter2+webpack 构建项目实战(五):配置子路由
- webpack + vuejs(都是1.0的版本) 基本配置(一)
- JavaWeb项目中web.xml有关servlet的基本配置
- webpack:从入门到真实项目配置
- Webpack基本配置介绍
- maven基本配置及创建web项目