webpack-demo|- package.json- |- webpack.config.js+ |- webpack.common.js+ |- webpack.dev.js+ |- webpack.prod.js|- server.js|- DEV-server.js|- /dist|- /src|- data.xml|- icon.png+|- style.css|- my-font.woff|- my-font.woff2|- print.js|- index.js|- math.js|- /node_modules
npm install --save-dev webpack-merge
// webpack.common.jsconst path = require('path');const HtmlWebpackPlugin = require('html-webpack-plugin'); // 自动生成页面const CleanWebpackPlugin = require('clean-webpack-plugin'); // 自动清理,清理dist旧文件const webpack = require('webpack');module.exports = {entry: {app: './src/index.js'},plugins: [new CleanWebpackPlugin(['dist']),new HtmlWebpackPlugin({title: 'Output Management'}),new webpack.HotModuleReplacementPlugin()],output: {filename: '[name].bundle.js',path: path.resolve(__dirname, 'dist'),publicPath: '/'},module: {rules: [{test: /\.css$/,use: ['style-loader','css-loader']},{test: /\.(png|svg|jpg|gif)$/,use: ['file-loader']},{test: /\.(woff|woff2|eot|ttf|otf)$/,use: ['file-loader']},{test: /\.(csv|tsv)$/,use: ['csv-loader']},{test: /\.xml$/,use: ['xml-loader']}],}};
// webpack.prod.jsconst merge = require('webpack-merge');const common = require('./webpack.common.js');module.exports = merge(common, {mode: 'production',});
// webpack.dev.jsconst merge = require('webpack-merge');const common = require('./webpack.common.js');module.exports = merge(common, {mode: 'development',devtool: 'inline-source-map',devServer: {contentBase: './dist',hot: true}});
{"name": "webpackDemo","sideEffects": false,"version": "1.0.0","description": "","private": true,"main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","watch": "webpack --watch","build": "webpack --config webpack.prod.js","start": "webpack-dev-server --open --config webpack.dev.js","server": "node server.js"},"keywords": [],"author": "","license": "ISC","devDependencies": {"clean-webpack-plugin": "^1.0.0","css-loader": "^2.0.0","csv-loader": "^3.0.2","express": "^4.16.4","file-loader": "^2.0.0","html-webpack-plugin": "^3.2.0","style-loader": "^0.23.1","webpack": "^4.27.1","webpack-cli": "^3.1.2","webpack-dev-middleware": "^3.4.0","webpack-dev-server": "^3.1.10","xml-loader": "^1.2.1"},"dependencies": {"lodash": "^4.17.11","webpack-hot-middleware": "^2.24.3"}}
// index.js 打印日志if (process.env.NODE_ENV !== 'production') {console.log('Looks like we are in development mode!');}
上面描述的一些内容也可以通过命令行实现。例如,--optimize-minimize标志将包括TerserPlugin幕后。--define process.env.NODE_ENV="'production'"对于上述DefinePlugin实例,它将做同样的事情。并且,webpack -p将自动调用这两个标志,从而包含插件。
