1. webpack-demo
    2. |- package.json
    3. - |- webpack.config.js
    4. + |- webpack.common.js
    5. + |- webpack.dev.js
    6. + |- webpack.prod.js
    7. |- server.js
    8. |- DEV-server.js
    9. |- /dist
    10. |- /src
    11. |- data.xml
    12. |- icon.png+
    13. |- style.css
    14. |- my-font.woff
    15. |- my-font.woff2
    16. |- print.js
    17. |- index.js
    18. |- math.js
    19. |- /node_modules
    1. npm install --save-dev webpack-merge
    1. // webpack.common.js
    2. const path = require('path');
    3. const HtmlWebpackPlugin = require('html-webpack-plugin'); // 自动生成页面
    4. const CleanWebpackPlugin = require('clean-webpack-plugin'); // 自动清理,清理dist旧文件
    5. const webpack = require('webpack');
    6. module.exports = {
    7. entry: {
    8. app: './src/index.js'
    9. },
    10. plugins: [
    11. new CleanWebpackPlugin(['dist']),
    12. new HtmlWebpackPlugin({
    13. title: 'Output Management'
    14. }),
    15. new webpack.HotModuleReplacementPlugin()
    16. ],
    17. output: {
    18. filename: '[name].bundle.js',
    19. path: path.resolve(__dirname, 'dist'),
    20. publicPath: '/'
    21. },
    22. module: {
    23. rules: [
    24. {
    25. test: /\.css$/,
    26. use: [
    27. 'style-loader',
    28. 'css-loader'
    29. ]
    30. },
    31. {
    32. test: /\.(png|svg|jpg|gif)$/,
    33. use: [
    34. 'file-loader'
    35. ]
    36. },
    37. {
    38. test: /\.(woff|woff2|eot|ttf|otf)$/,
    39. use: [
    40. 'file-loader'
    41. ]
    42. },
    43. {
    44. test: /\.(csv|tsv)$/,
    45. use: [
    46. 'csv-loader'
    47. ]
    48. },
    49. {
    50. test: /\.xml$/,
    51. use: [
    52. 'xml-loader'
    53. ]
    54. }
    55. ],
    56. }
    57. };
    1. // webpack.prod.js
    2. const merge = require('webpack-merge');
    3. const common = require('./webpack.common.js');
    4. module.exports = merge(common, {
    5. mode: 'production',
    6. });
    1. // webpack.dev.js
    2. const merge = require('webpack-merge');
    3. const common = require('./webpack.common.js');
    4. module.exports = merge(common, {
    5. mode: 'development',
    6. devtool: 'inline-source-map',
    7. devServer: {
    8. contentBase: './dist',
    9. hot: true
    10. }
    11. });
    1. {
    2. "name": "webpackDemo",
    3. "sideEffects": false,
    4. "version": "1.0.0",
    5. "description": "",
    6. "private": true,
    7. "main": "index.js",
    8. "scripts": {
    9. "test": "echo \"Error: no test specified\" && exit 1",
    10. "watch": "webpack --watch",
    11. "build": "webpack --config webpack.prod.js",
    12. "start": "webpack-dev-server --open --config webpack.dev.js",
    13. "server": "node server.js"
    14. },
    15. "keywords": [],
    16. "author": "",
    17. "license": "ISC",
    18. "devDependencies": {
    19. "clean-webpack-plugin": "^1.0.0",
    20. "css-loader": "^2.0.0",
    21. "csv-loader": "^3.0.2",
    22. "express": "^4.16.4",
    23. "file-loader": "^2.0.0",
    24. "html-webpack-plugin": "^3.2.0",
    25. "style-loader": "^0.23.1",
    26. "webpack": "^4.27.1",
    27. "webpack-cli": "^3.1.2",
    28. "webpack-dev-middleware": "^3.4.0",
    29. "webpack-dev-server": "^3.1.10",
    30. "xml-loader": "^1.2.1"
    31. },
    32. "dependencies": {
    33. "lodash": "^4.17.11",
    34. "webpack-hot-middleware": "^2.24.3"
    35. }
    36. }
    1. // index.js 打印日志
    2. if (process.env.NODE_ENV !== 'production') {
    3. console.log('Looks like we are in development mode!');
    4. }

    上面描述的一些内容也可以通过命令行实现。例如,--optimize-minimize标志将包括TerserPlugin幕后。--define process.env.NODE_ENV="'production'"对于上述DefinePlugin实例,它将做同样的事情。并且,webpack -p将自动调用这两个标志,从而包含插件。