记录webpackDemo配置

效果

生产环境下:所有文件按照后缀名放在对应的文件夹下。

在这里插入图片描述

开始

webpack官方教程

  1. 安装webpack-merge

npm install --save-dev webpack-merge

  1. 根目录下新建3个webpack的配置文件
    在这里插入图片描述
    webpack.common.js

注意:这里需要安装 url-loaderfile-loader两个开发依赖。否则会报错。
npm install --save-dev url-loader
npm install --save-dev file-loader
开发依赖包如下:

在这里插入图片描述

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  entry: {
    app: './src/index.js',
  },
  plugins: [
    new HtmlWebpackPlugin({
      title: 'Production',
      template: './index.html',
    }),
  ],
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: ['style-loader', 'css-loader'],
      },
      {
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/i,
        include: [path.resolve('src')], // 在src下查找
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: 'img/[name].[hash:7].[ext]'
        }
      },
      {
        test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/i,
        include: [path.resolve('src')],
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: 'media/[name].[hash:7].[ext]'
        }
      },
      {
        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/i,
        include: [path.resolve('src')],
        type: 'asset/resource',
        generator: {
          filename: 'fonts/[name].[hash:7].[ext]'
        },
        parser: {
          dataUrlCondition: {
            maxSize: 10 * 1024,
          },
        },
      }
    ]
  },
  output: {
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist'),
    clean: true,
  },
  optimization: {
    runtimeChunk: 'single', // 单入口
  },
  performance: {
    hints: false // 不警告
  }
};


webpack.prod.js

const { merge } = require('webpack-merge');
const common = require('./webpack.common.js');
const path = require('path');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const CompressionWebpackPlugin = require("compression-webpack-plugin");
const productionGzipExtensions = ["js", "css"];

module.exports = merge(common, {
  mode: 'production',
  output: {
    publicPath: '/webpackDemo/', // 这个是http服务器运行的根路径(比如我们线上是www.baidu.com/indexbeta这个作为根路径,就需要将它改为'/indexbeta/')
    filename: 'js/[name].[chunkhash].js', // 将js以[原文件名].[哈希值].js命名,并放在js文件夹下
    chunkFilename: 'js/[id].[chunkhash].js' // 打包入口文件名[id].[哈希值].js命名,并放在js文件夹下
  },
  plugins: [
    new CopyWebpackPlugin({
      // 复制文件夹插件
      patterns: [
        {
          from: path.resolve(__dirname, './static'),
          to: 'static',
        }
      ]
    }),
    new CompressionWebpackPlugin({
      // 开启压缩插件
      filename: "[path][base].gz",
      algorithm: "gzip",
      test: new RegExp("\\.(" + productionGzipExtensions.join("|") + ")$"), // 匹配文件名
      threshold: 10240, // 对10K以上的数据进行压缩
      minRatio: 0.8,
      deleteOriginalAssets: false // 是否删除源文件
    })
  ]
});

webpack.dev.js

const { merge } = require('webpack-merge');
const common = require('./webpack.common.js');

module.exports = merge(common, {
  mode: 'development',
  devtool: 'inline-source-map',
  devServer: {
    host: 'localhost',
    port: 9917,
    static: './dist',
  },
});

  1. 启动命令设置
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值