目录结构
├── node_modules
├── static
├── src
| └── css
| └── js
| └── img
├── .babelrc
├── index.html
├── package.json
├── webpack.common.js
├── webpack.dev.js
├── webpack.prod.js
webpack.common.js
const path = require('path');const HtmlWebpackPlugin = require('html-webpack-plugin');const MiniCssExtractPlugin = require('mini-css-extract-plugin');const CopyWebpackPlugin = require('copy-webpack-plugin');module.exports = {entry: {app: './src/js/index.js'},output: {filename: './js/[name].[hash].js',path: path.resolve(__dirname, 'dist')},module: {rules: [{test: /\.js$/,exclude: /node_modules/,loader: 'babel-loader'},{test: /\.scss$/,use: [{loader: MiniCssExtractPlugin.loader,options: {hmr: process.env.NODE_ENV === 'development',publicPath:'../'},},'css-loader','sass-loader']},{test: /\.(png|svg|jpg|gif)/,use: [{loader: "url-loader",options: {limit: 10000,outputPath: 'images',esModule: false}},]},{test: /\.(htm|html)$/i,use: ['html-withimg-loader']}]},plugins: [new HtmlWebpackPlugin({filename: "index.html",template: "./index.html",}),new MiniCssExtractPlugin({filename:"./css/[name].css",}),new CopyWebpackPlugin([{from: path.resolve(__dirname, './static'),to: 'static',ignore: ['.*']}])],};
webpack.dev.js
const path = require('path');const {merge} = require('webpack-merge');const common = require('./webpack.common');const DevConfig = {host: "localhost",port: "8080",};module.exports = merge(common, {devtool: 'inline-source-map',devServer: {host: DevConfig.host,port: DevConfig.port,}});
webpack.prod.js
const {merge} = require('webpack-merge');const common = require('./webpack.common.js');const {CleanWebpackPlugin} = require('clean-webpack-plugin');module.exports = merge(common, {plugins:[new CleanWebpackPlugin(),]});
.babelrc
{"presets": [["@babel/preset-env",{"useBuiltIns": "usage","targets": {"browsers": ["last 2 versions", "ie >= 10"]}}]]}
package.json
{"name": "webpack","version": "1.0.0","description": "","private": true,"scripts": {"build": "webpack --mode production --config webpack.prod.js","start": "webpack-dev-server --mode development --open --config webpack.dev.js"},"keywords": [],"author": "","license": "ISC","dependencies": {"@babel/core": "^7.11.6","@babel/polyfill": "^7.11.5","@babel/preset-env": "^7.11.5","babel-loader": "^8.1.0","clean-webpack-plugin": "^3.0.0","copy-webpack-plugin": "^4.0.1","css-loader": "^4.3.0","file-loader": "^6.1.0","html-webpack-plugin": "^4.5.0","html-withimg-loader": "^0.1.16","mini-css-extract-plugin": "^0.11.2","node-sass": "^4.14.1","sass-loader": "^10.0.2","style-loader": "^1.2.1","url-loader": "^4.1.0","webpack": "^4.44.2","webpack-cli": "^3.3.12","webpack-dev-server": "^3.11.0","webpack-merge": "^5.1.4"}}
