拆分配置和merge
webpack.common.js
wepack.dev.js
webpack.prod.js
我们在dev/prod文件中
/*****省略部分不重要****/const webpackCommonConf = require('./webpack.common.js')const { smart } = require('webpack-merge')module.exports = smart(webpackCommonConf,{mode: 'development'/**********/})
启动本地服务
// webpack.dev.js{/********/devServer: {port: 8080,progress: true, // 显示打包的进度条contentBase: distPath, // 根目录open: true, // 自动打开浏览器compress: true, // 启动 gzip 压缩// 设置代理proxy: {// 将本地 /api/xxx 代理到 localhost:3000/api/xxx'/api': 'http://localhost:3000',// 将本地 /api2/xxx 代理到 localhost:3000/xxx'/api2': {target: 'http://localhost:3000',pathRewrite: {'/api2': ''}}}}}
webpack开发下跨域请求,使用devserver中的代理
处理ES6
{...module: {rules: [{test: /\.js$/,loader: ['babel-loader'],include: srcPath,exclude: /node_modules/}]}}
// .babelrc{"presets": ["@babel/preset-env"],"plugins": []}
处理样式
{...module: {rules: [{test: /\.css$/,// loader执行顺序,从后往前的loader: ['style-loader', 'css-loader', 'postcss-loader']},{test: /\.less$/,loader: ['style-loader', 'css-loader', 'less-loader']}]}}
// postcss.config.js/*加浏览器前缀的*/module.exports = {plugins: [require('autoprefixer')]}
处理图片
// webpack.dev.jsmodule: {rules: [{// 直接引入urltest: /\.(png|jpg|jpeg|gif)$/,use: 'file-loader'}]}// webpack.prod.jsmodule: {rules: [{test: /\.(png|jpg|jpeg|gif)$/,use: {loader: 'url-loader',options: {// 小于 5kb 的图用base64输出// 否则,依然沿用 file-loader 的形式,产出urllimit: 5 * 1024,// 打包到 img 目录下outputPath: '/img/'// 设置图片的 cdn 地址// publicPath: 'http://cdn.abc.com'}}}]}
output
output: {filename: 'bundle.[contentHash:8].js', // 打包代码时,加上 hash 戳path: distPath}// 为的是内容变,避开缓存
