webpack5 - 之 开发环境的 服务器设置、sourcemap 配置、环境拆分( 清理上传打包缓存)

1:webpack5 - 之 开发环境的 服务器设置

package.json

  "scripts": {
    "dev": "webpack-dev-server --mode development",
  },
  "devDependencies": {
    "webpack": "^5.67.0",
    "webpack-cli": "^4.9.2",
    "webpack-dev-server": "^4.10.1"
  },

webpack.config.js

    devServer: {
      port: '3001', // 默认是 8080
      hot: true,
      compress: true, // 是否启用 gzip 压缩
      proxy: {
        '/api': {
          target: 'http://0.0.0.0:80',
          pathRewrite: {
            '/api': '',
          },
        },
      },
    },

npm run dev效果

在这里插入图片描述

2:webpack5 - 之 开发环境的 sourcemap 配置

webpack.config.js

module.exports = (env) => {
  return {
    entry: {
      main: './src/main.js'
    },
    output: {
      path: path.resolve(__dirname, 'dist'),
      filename: 'bunder.js',
    },
    devtool: 'eval-cheap-module-source-map',//开发环境配置 定位错误根源
 }
}

效果

  • 在main.js 之中 log输出未定义的 b变量
    在这里插入图片描述

3:webpack5 - 之 环境拆分

目录

把webpack.config.js 拆分为 build文件下的环境 ( webpack.config.js删除之 )
在这里插入图片描述

package.json


  "scripts": {
    "dev": "webpack-dev-server --mode development --config build/webpack.dev.js --open",
    "build": "webpack --mode production --config build/webpack.pro.js",
  },
  "devDependencies": {
    "clean-webpack-plugin": "^4.0.0",
    "webpack": "^5.67.0",
    "webpack-cli": "^4.9.2",
    "webpack-dev-server": "^4.10.1",
    "webpack-merge": "^4.2.1"
  },

基础配置

const path = require('path')
const MiniCssExtract = require('mini-css-extract-plugin') // css提取
const HtmlWebpackPlugin = require('html-webpack-plugin') // 自动引入文件 插件
const { CleanWebpackPlugin } = require('clean-webpack-plugin'); // 清理上次打包缓存

module.exports = {
  entry: {
    main: './src/main.js'
  },
  output: {
    publicPath: '',
    path: path.resolve(__dirname, '../dist'),
    filename: 'js/[name]_[contenthash:6].js',
  },
  // loader相关配置
  module: {
    rules: [{
        test: /\.(scss|css)$/, // 针对 .scss 或者 .css 后缀的文件设置 loader
        use: [
          // env.development ? 'style-loader' : 
          {
            loader: MiniCssExtract.loader
          },
          'css-loader',
          'postcss-loader',
          'sass-loader' // 使用 sass-loader 将 scss 转为 css
        ]
      },
      {
        test: /\.js$/,
        use: {
          loader: 'babel-loader',
          options: {
            cacheDirectory: true
          },
        },
        exclude: /node_modules/
      },

    ]
  },
  resolve: {
    extensions: ["*", ".js", ".vue"],
    // 设置别名
    alias: {
      "@": path.resolve(__dirname, "../src"), // 这样配置后 @ 可以指向 src 目录
    },
  },
  plugins: [
    // 分割css
    new MiniCssExtract({
      filename: '[name].css',
      chunkFilename: '[id].css'
    }),
    // 自动生成html ( 于打包后 dist目录下的 双击在浏览器显示 )
    new HtmlWebpackPlugin({
      // 打包输出HTML
      title: '自动生成 HTML',
      minify: {
        // 压缩 HTML 文件
        removeComments: true, // 移除 HTML 中的注释
        collapseWhitespace: true, // 删除空白符与换行符
        minifyCSS: true // 压缩内联 css
      },
      filename: 'index.html', // 生成后的文件名
      template: 'index.html', // 根据此模版生成 HTML 文件
      // chunks: ['main'] // entry中的 app 入口才会被打包
    }),
    // 清理上次打包缓存
    new CleanWebpackPlugin(),
  ]
}

dev环境

const merge = require('webpack-merge')
const baseConfig = require('./webpack.base');
const devConfig = {
  mode: 'development',
  devtool: 'eval-cheap-module-source-map', //开发环境配置 定位错误根源
  devServer: {
    port: '3001', // 默认是 8080
    hot: true,
    compress: true, // 是否启用 gzip 压缩
    proxy: {
      '/api': {
        target: 'http://0.0.0.0:80',
        pathRewrite: {
          '/api': '',
        },
      },
    },
  }
}
module.exports = merge(baseConfig, devConfig)

pro环境

const merge = require('webpack-merge');
const baseConfig = require('./webpack.base');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin') //生产环境 进行压缩css
const TerserPlugin = require('terser-webpack-plugin'); // js压缩

const proConfig = {
  mode: 'production',
  devtool: 'hidden-source-map',
  optimization: {
    minimizer: [
      // 压缩css - 生成环境
      new CssMinimizerPlugin(),
      new TerserPlugin({
        // 多进程
        parallel: true,
        //删除注释
        extractComments: false,
        terserOptions: {
          compress: { // 生产环境去除console
            drop_console: true,
            drop_debugger: true,
          },
        },
      }),
    ]
  },
}

module.exports = merge(baseConfig, proConfig)

mian.js

import "@/css/main.css"
import "@/css/main.scss"
console.log("main.js-11");
let a = 100;
console.log("a",a);
const set = new Set([1, 2, 3, 1])
console.log('res,', set, '; set-arr', [...set])
// console.log("aa",b);

index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <!-- <link rel="stylesheet" href="./dist/css/style.css"> -->
</head>
<body>
  <!-- <script src="./dist/bunder.js"></script> -->
  <p>
    我是p
    <div class="ppp">我是ppp-1--1112</div>
  </p>
</body>
</html>

npm run build 效果

  • 双击 index.html可查看效果在这里插入图片描述

npm run dev 效果

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值