webpack5 的五大核心配置(二)

webpack主要构成部分:
  1. entry 入口
  2. output 出口
  3. loaders 转化器
  4. plugins 插件
  5. mode 模式
  6. devServer 开发服务器
webpack.config.js 配置文件基本格式
module.exports={
   //入口文件
   entry:{},

   //出口文件
   output:{},

   //module rules  loaders
   module{};

   //插件
   plugins:[],

   //开发服务器
   devServer:{},

   //模式
   mode: " ",
};
详细讲解:

一:入口(Entry): 告诉 webpack 应该使用哪个模块,来作为构建整个项目的开始
***二:出口(Output):***告诉 webpack 在哪里输出它所创建的 bundle,以及如何命名这些文件

1、单文件入口语法:

用法:entry: string | [string]

const path = require('path');
module.exports = {
    entry: './src/index.js ',
    output:{
        path:path.resolve(__dirname, 'dist'),
        filename:'bundle.js'
    }
};

2、多入口,单出口文件的配置:

const path = require('path');
module.exports = {
entry:['./src/index.js','./src/index2.js'],  //按照先后顺序一起打包 bundle.js
output:{
    path:path.resolve(__dirname, 'dist'),
    filename:'bundle.js'
   }
};

3、多入口,多出口文件的配置

const path = require('path');
     module.exports = {
        entry:{
            index:'./src/index.js',
            index2:'./src/index2.js'
        },
        output:{
            path:path.resolve(__dirname, 'dist'),
            filename:'[name].bundle.js'
        }
    };

还需要在index.html文件引入js文件的时候,内容改一下。这种方法引入比较繁琐,后面可以使用插件来完成这个功能。

三.加载器(Loader): webpack 只能理解 JS 和 JSON 文件,loader 让 webpack 能够去处理其他类型的文件,并将它们转换为有效模块,以供应用程序使用。

例如:css-loader | html-loader

1、处理css文件

(1)安装loader:npm i style-loader css-loader -D

(2)配置文件里的写法:

module:{
    rules:[
        {
            test:/\.css$/,
            use:['style-loader','css-loader'] //注意先写style-loader再写css-loader
        }
      ]
  }

(3)然后执行webpack命令。

2、处理less文件

(1)安装loader:npm i style-loader css-loader less-loader -D

//如果装过style-loader css-loader这里可以不用写这两个loader

(2)配置文件里的写法:

  module:{
    rules:[
         {
          test:/\.less$/,
          use:['style-loader','css-loader','less-loader'] 
          //注意先写style-loader再写css-loader
        }
    ]
}

(3)然后执行webpack命令。

3、处理sass文件

(1)安装loader:npm i style-loader css-loader sass-loader -D

//如果装过style-loader css-loader这里可以不用写这两个loader

(2)配置文件里的写法:

  module:{
     rules:[
        {
            test:/\.s[a,c]ss$/,
            use:['style-loader','css-loader','sass-loader'] 
            //注意先写style-loader再写css-loader
           }
        ]
    }

(3)然后执行webpack命令。

注意:如果上面的操作中如安装less的时候,报错Vue安装loader报错:Syntax Error: Error: Cannot find module 'less' 类似的信息,解决方法是:重新安装这个loader时@版本号就可以了,例如:npm i less-loader@6 -D就可以了。

4、处理图片资源

在webpack5中处理图片资源不用安装loader了,直接在配置文件中设置图片属性内容。

// 图片加载器
module: {
    rules: [
        {
            test: /\.(png|jpe?g|gif|webp|svg)$/,
            type: 'asset',
            parser: {
                dataUrlCondition: {
                    // 小于10KB图片会转base64,  优点:减少请求数量  缺点:体积变大
                    maxSize: 15 * 1024 // 4kb
                }
            },
            //设置图片打包后的图片路径
            generator: {
                // 输出图片名字
                filename: 'static/images/[hash:10][ext][query]'   
                //[hash:10] 表示hash值只取10位
            }
        }
    ]
},
5、处理字体图标资源

前面省去了将字体图标引入文件的步骤。直接展示配置文件设置内容:

module: {
    rules: [
        // 图标
        {
            test: /\.(ttf|woff2?)$/,
            type: 'asset/resource',   
            generator: {
                // 输出名字
                filename: 'static/media/[hash:10][ext][query]'   //注意实际设置的路径
            }
        }
    ]
},
  1. 安装babel-loder
    用于将 ES6 语法编写的代码转换为向后兼容的 JavaScript 语法。

(1)下载包管理工具

   npm i babel-loader @babel/core @babel/preset-env -D

(2)定义 Babel 配置文件:babel.config.js

module.exports = {
  presets: ["@babel/preset-env"],
};

presets 预设:就是一组 Babel 插件, 扩展 Babel 功能

  • @babel/preset-env: 一个智能预设,允许您使用最新的 JavaScript。
  • @babel/preset-react:一个用来编译 React jsx 语法的预设
  • @babel/preset-typescript:一个用来编译 TypeScript 语法的预设

(3)配置webpack.config.js

module: {
    rules: [
        // 图标
        {
            test: /\.js$/,
            exclude: /node_modules/, // 排除node_modules代码不编译
            loader: "babel-loader",
        },
    ]
},
  1. 处理其他资源如音/视频等等

    module: {
    rules: [
    {
    test: /.(map3|map4|avi)$/, //在这里加上就可以统一处理
    type: 'asset/resource',
    generator: {
    // 输出名字
    filename: 'static/media/[hash:10][ext][query]'
    }
    ]

四.插件(Plugins): 插件是 webpack 的支柱功能,能够执行范围更广的任务,包括:打包优化、压缩、重新定义环境中的变量等

例如:html-webpack-plugin

1、eslint语法检查

在webpack5中eslint语法检查是个插件,它的实现步骤是:

(1)下载安装包:

npm i eslint-webpack-plugin eslint -D

(2)定义 Eslint 配置文件

在文件目录下新建:.eslintrc.js文件,配置如下内容:

module.exports = {
  // 继承 Eslint 规则
  extends: ["eslint:recommended"],
  env: {
    node: true, // 启用node中全局变量
    browser: true, // 启用浏览器中全局变量
  },
  parserOptions: {
    ecmaVersion: 6,
    sourceType: "module",
  },
  rules: {
    "no-var": 2, // 不能使用 var 定义变量
  },
};
更多规则详见:[规则文档](https://eslint.bootcss.com/docs/rules/)

(3)在webpack.config.js文件中配置

const path = require("path");
const ESLintWebpackPlugin = require("eslint-webpack-plugin");

module.exports = {
  entry: "./src/main.js",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "static/js/main.js", // 将 js 文件输出到 static/js 目录中
    clean: true, // 自动将上次打包目录资源清空
  },
  module: {
   rules: [  
        {
        // 用来匹配 .css 结尾的文件
        test: /\.css$/,
        // use 数组里面 Loader 执行顺序是从右到左
        use: ["style-loader", "css-loader"],
      },
   ]
},
plugins: [
    new ESLintWebpackPlugin({
      // 指定检查文件的根目录
      context: path.resolve(__dirname, "src"),
    }),
  ],
  mode: "development",
}

(4)修改 js 文件代码

main.js文件

import count from "./js/count";
import sum from "./js/sum";
// 引入资源,Webpack才会对其打包
import "./css/iconfont.css";
import "./css/index.css";

var result1 = count(2, 1);
console.log(result1);
var result2 = sum(1, 2, 3, 4);
console.log(result2);

(5)用webpack打包,生成会发现报错了,原因是main.js中不应该用var定义变量,按照.eslintrc.js定义的规则中,是不能用var 定义变量的,所以改成const后,打包就不会报错了。

五.模式(Mode):

development(优化打包速度,提供调试的辅助功能)开发

production(优化打包结果,打包之后代码的运行效率和性能优化)生产

none(最原始的打包)

六.devServer: (用于快速开发应用程序)热重载

devServer: {}

开发服务器&自动化

1、下载安装包

 npm i webpack-dev-server -D

2、配置webpack.config.js

module.exports = {
  entry: "./src/main.js",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "static/js/main.js", // 将 js 文件输出到 static/js 目录中
    clean: true, // 自动将上次打包目录资源清空
  },
  module: {
   rules: [  
 // 开发服务器
  devServer: {
    host: "localhost", // 启动服务器域名
    port: "3000", // 启动服务器端口号
    open: true, // 是否自动打开浏览器
  },
  mode: "development",
};

3、运行指令

npx webpack serve
相关推荐
捕鲸叉32 分钟前
QT自定义工具条渐变背景颜色一例
开发语言·前端·c++·qt
傻小胖1 小时前
路由组件与一般组件的区别
前端·vue.js·react.js
Elena_Lucky_baby1 小时前
在Vue3项目中使用svg-sprite-loader
开发语言·前端·javascript
重生之搬砖忍者2 小时前
uniapp使用canvas生成订单小票图片
前端·javascript·canva可画
万水千山走遍TML2 小时前
console.log封装
前端·javascript·typescript·node·log·console·打印封装
阿雄不会写代码2 小时前
使用java springboot 使用 Redis 作为消息队列
前端·bootstrap·html
m0_748236583 小时前
【Nginx 】Nginx 部署前端 vue 项目
前端·vue.js·nginx
@C宝3 小时前
【前端面试题】前端中的两个外边距bug以及什么是BFC
前端·bug
Burt3 小时前
@antfu/eslint 支持 globals 全局变量
前端·uni-app·eslint
m0_528723813 小时前
如何在新窗口打开pdf文件,并修改网页标题
前端·javascript·pdf