webpack的概述

2023-06-11  本文已影响0人  小黄不头秃
// webpack是一个流行的前端项目构建工具(打包工具),可以解决当前web开发占领所面临的困境
// webpack提供有好的模块化支持,以及代码压缩混淆,处理js兼容性问题,性能优化等强大的功能
// ,从而让程序员把工作重心放到功能实现上,提高了开发效率和项目的可维护性


/**
 * 配置webpack
 * (1)运行 npm install webpack webpack-cli -D命令,安装webpack相关的包
 * (2)在项目根目录中,创建名为 webpack.config.js 的webpack配置文件
 * (3)在webpack 的配置文件中,初始化如下基本配置
 *      moudel.exports = {
 *          mode:"development"//mode用来指定构建模式
 *      }
 * (4)在package.json配置文件中的scripts节点下,新增dev脚本如下
 *      "scripts":{
 *          "dev":"webpack"//script 节点下的脚本,可以通过 npm run 执行
 *      }
 * */ 

/**
 * webpack 的4.x版本中的默认行为
 * 打包文件的入口文件为 src -> index.js
 * 打包的输出文件为 dist-> main.js
 * 
 * 如果修改打包的入口与出口,可以在 webpack.config.js 中新增如下配置信息
 * cosnt path = require('path')//导入nodejs 的模块
 * module.exports = {
 * entry:path.join(__dirname,'./src/index.js'),
 * output:{
 * path:path.join(__dirname,'./dist'),//输出文件的存放路径
 * filename:'mian.js'//输出文件的名称
 * }
 * }
 * */ 

/**
 * 配置webpack 的自动打包功能
 * (1)运行npm install webpack-dev-server -D支持项目的自动打包的工具
 * (2)修改package.json -> scripts 中的dev命令如下
 *      "dev": "webpack-dev-server --open --host 127.0.0.1 --port 8888"
 * (3)src -> index.html 中,script脚本的引用路径,修改为“/buldle.js”
 * (4)运行npm run dev 命令,重新打包
 * (5)在浏览器中访问 http://localhost:8080 地址,查看自动打包效果
 * 
 * 注意:
 * (1)这个包在运行的时候会自动启动一个http服务
 * (2)打包生成的输出文件,默认放到根目录下面,而且是虚拟的,看不见的
 * 
 * 附加:
 * //package.json中的配置文件
 * //--open 打包完成后自动打开浏览器页面
 * //--host 配置IP地址
 * //--port 配置端口
 * "scripts":{
 * "dev":"webpack-dev-server --open --host 127.0.0.1 --port 8888"
 * }
 * 
 * 
 * */  

/**
 * 配置html-webpack-plugin 生成预览页面
 * (1)运行 npm install html-webpack-plugin -D 命令,安装生成预览页面的插件
 * (2)修改webpack.config.js 文件头部区域,添加如下配置信息
 * //导入生成预览页面的插件,得到一个构造函数
 * const HtmlWebpackPlugin = require('html-webpack-plugin')
 * const htmlPlugin = new HtmlWebpackPlugin({
 *     template:"./src/index.html",//要用到的模板文件
 *     filename:"index.html"//指定生成的文件名称,该文件存在于内存之中,在目录中不显示
 * })
 * (3)修改webpack.config.js 文件中向外暴露的配置对象,新增如下节点
 * module.exports = {
 * plugin:[htmlPlugin]//plugin数组是webpack打包期间会用到的一些插件列表
 * }
 * */  

/**
 * webpack 中的加载器
 * 通过loader 打包非js模块
 * 在实际的开发过程中,webpack只能打包处理以js后缀名结尾的模块,其他非js后缀名结尾的模块,webpack默认处理不了,需要调用loder加载器才可以正常打包,否则会报错
 * loader 加载器可以协助 webpack打包处理特定的文件模块,
 * 比如:less-loader -> .less
 *      sass-loader -> .scss
 *      url-loader -> css中与url路径相关的文件
 * 
 * ## 打包处理css文件
 * (1)运行npm i style-loader css-loader -D
 * (2)在webpack.config.js的module -> rules 数组中,添加loader规则如下
 *      module:{
 *          rules:[
 *          {test:/\.css$/,use:['style-loader','css-loader']
 *          }
 *          ]
 *      }
 *      其中,test表示匹配的文件类型,use 表示对应要调用的loader
 * 
 * ## 打包处理less文件
 * (1)运行npm i less-loader less -D 命令
 * (2)在webpack.config.js的module -> rules 数组中,添加loader规则如下
 *      module:{
 *          rules:[
 *          {test:/\.less$/,use:['style-loader','css-loader','less-loader']
 *          }
 *          ]
 *      }
 *      其中,test表示匹配的文件类型,use 表示对应要调用的loader
 * 
 * ## 打包处理scss文件
 * (1)运行npm i sass-loader node-sass -D 命令
 * (2)在webpack.config.js的module -> rules 数组中,添加loader规则如下
 *      module:{
 *          rules:[
 *          {test:/\.scss$/,use:['style-loader','css-loader','sass-loader']
 *          }
 *          ]
 *      }
 *      其中,test表示匹配的文件类型,use 表示对应要调用的loader
 * 
 * !!注意!!
 * use 数组中指定的loader顺序是固定的
 * 多个loader的调用顺序是从后往前调用的
 * 
 * ## 配置postCSS 自动添加css的兼容前缀
 * (1)运行npm i postcss-loader autoprefixer -D命令
 * (2)创建postcss.config.js 并初始化如下配置
 * const autoprefixer = require('autoprefixer')//导入自动添加前缀插件
 * module.exports = {
 *  plugins:[ autoprefixer ]//挂在插件
 * }
 * (3)在webpack.config.js 的 module -> rules 数组中 修改 css 的loader 规则如下:
 *      module:{
 *          rules:[
 *          {test:/\.css$/,use:['style-loader','css-loader','postcss-loader']
 *          }
 *          ]
 *      }
 * 
 * ## 打包样式表中的图片和字体文件
 * (1)运行 npm i url-loader file-loader -D命令
 * (2)在webpack.config.js 的module -> rules 数组中,添加loader规则如下:
 *      moduleL{
 *          rules:[
 *              {test:/\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/,
 *              use:'url-loader?limit=16940'}
 *      ]
 * }
 *      !!其中?之后的是 loader 的参数项
 *      limit 用来指定图片的大小,单位是字节(byte)只有小于limit的图片才会被转换
 * 
 * ## 打包处理js文件中的高级语法
 * (1)安装babel转换器相关的包:npm i babel @babel/core @babel/runtime -D
 * (2)安装babel语法插件相关的包:npm i @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D
 * (3)在根目录中,创建babel 配置文件 babel.config.js 并初始化基本配置如下:
 *      module.exports = {
 *          presets:['@babel/preset-env'],
 *          plugins:['@babel/plugin-transform-runtime','@babel/plugin-proposal-class-properties']
 *          }
 * (4)在webpack.config.js 的module->rules 数组中,添加loader规则:
 *      //exclude 为排除项,表示babel-loader 不需要处理 node_modules 中的js文件
 *      { test:/\.js$/,use:"babel-loader",exclude:/node_modules/}
 * */  

上一篇下一篇

猜你喜欢

热点阅读