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/}
* */