webpack入门

什么是webpack?

在这里插入图片描述
Webpack可以看做是模块打包机:它做的事情是,分析你的项⽬结构,找到JavaScript模块以及其它的⼀些浏览器不能直接运⾏的拓展语⾔(Scss,TypeScript等),并将其打包为合适的格式以供浏览器使⽤。

安装

(前提先安装node环境)

  • 全局安装 —不推荐
npm install webpack webpack-cli -g        //  webpack-cli 可以帮助我们在命令里使用npx、webpack等相关指令

webpack -v

\\卸载全局
 npm uninstall webpack webpack-cli -g

- 局部安装 —针对项目安装

npm install webpack webpack-cli -D
  • 安装指定版本
npm info webpack   // 查看webpack 历史发布信息

npm install webpack@X.X  webpack-cli -D

webpack -v   //检查是否安装成功

总结:webpack 是⼀个模块打包⼯具,可以识别出引⼊模块的语法 ,早期
的webpack只是个js模块的打包⼯具,现在可以是css,png,vue的模块打
包⼯具。

webpack 配置文件

当我们不设置配置文件时,webpack会走内部默认配置,但那一般都不满足我们的项目需求,所以每个项目都需要根据特定需要去配置webpack。
webpack有默认的配置文件,叫做webpack.config.js,我们可以对这个文件进行个性化配置。
当然我们也可以用自定义的配置文件:

npx webpack --config webpackconfig.js   // 指定webpack使用webpackconfig.js文件来作为配置文件执行

webpack.config.js配置结构

module.exports = {
	entry: './index.js',		//打包入口文件
	output: './dist',			// 输出目录
	mode: 'development',  //打包环境
	module: {
		rules:[
			// loader 模块处理
				{
					test: /\.css$/,
					use: 'style-loader'
				}
			]
	},
	plugins: [new HtmlWebpackPlugin()]  // 插件配置
}

webpack 核心概念

  • entry:

指定打包入口文件:webpack执行构建的第一步 将从entry开始,可抽象成输入

//单入口打包
entry: {
	main: './src/index.js'
}
// 简写
entry: './src/index.js'

//多入口   是一个对象
entry: {
	index: './src/index.js',
	login: './src/login.js'
}
  • output:

打包转换后的文件输出到磁盘位置: 输出结果,在webpack经过一系列处理并得到最终想要的代码后输出结果。

output: {
	filename: 'bundle.js',   //输出文件的名称
	path: path.resolve(__dirname,"dist")   // 输出文件到磁盘的路径,必须是绝对路径
},

//  多入口处理
output: {
	filename: '[name].js',   //这里的name 和多入口的配置对应 
	path: path.resolve(__dirname,"dist") 
}

//  这里还有一个点,每次修改文件后,由于浏览器缓存的原因,有时候会导致文件不能及时更新,修改没效果,
//所以这里输出文件可以设置一下hash值
output: {
	filename: '[name]_[chunkhash: 6].js',   //这里的chunkhash 是一个随机的字符串  6表示字符串的位数
	path: path.resolve(__dirname,"dist") 
}
  • mode:

mode用来指定打包环境

  • production
  • development
  • none

设置mode可以⾃动触发webpack内置的函数,达到优化的效果
在这里插入图片描述
如果没有设置,webpack将mode默认设置为production。
开发阶段的开启会有利于热更新的处理,识别哪个模块变化;
⽣产阶段的开启会有帮助模块压缩,处理副作⽤等⼀些功能。

  • loader:
    模块解析,模块转换器,⽤于把模块原内容按照需求转换成新内容。
    webpack是模块打包⼯具,⽽模块不仅仅是js,还可以是css,图⽚或者其
    他格式。
    但是webpack默认只知道如何处理js和JSON模块,那么其他格式的模块处
    理,和处理⽅式就需要loader了。在使用loader的时候记得先npm install xxx-loader -D。

常见的loader

	 - style-loader 
	 - css-loader 
	 - less-loader 
	 - sass-loader
	 -  ts-loader //将Ts转换成js
	 - babel-loader//转换ES6、7等js新特性语法 
	 - file-loader//处理图⽚⼦图 
	 - eslint-loader

module:
模块,在 Webpack ⾥⼀切皆模块,⼀个模块对应着⼀个⽂件。Webpack
会从配置的 Entry 开始递归找出所有依赖的模块。

module:{
	rules:[
		 {
		 test:/\.xxx$/,//指定匹配规则
		 use:{
				 loader: 'xxx-load'//指定使⽤的loader
			 }
		 }
	 ]
}

当webpack处理到不认识的模块时,需要在webpack中的module处进⾏
配置,当检测到是什么格式的模块,使⽤什么loader来处理。

  • ⽂件监听:
    轮询判断⽂件的最后编辑时间是否变化,某个⽂件发⽣了变化,并不会⽴
    刻告诉监听者,先缓存起来
    webpack开启监听模式,有两种
//1.启动webpack命令式 带上--watch 参数,启动监听后,需要⼿动刷新浏览器
scripts:{
 "watch":"webpack --watch"
}
//2.在配置⽂件⾥设置 watch:true
watch: true, //默认false,不开启
 //配合watch,只有开启才有作⽤
 watchOptions: {
	 //默认为空,不监听的⽂件或者⽬录,⽀持正则
	 ignored: /node_modules/,
	 
	 //监听到⽂件变化后,等300ms再去执⾏,默认300ms,
	 aggregateTimeout: 300,
	 
	 //判断⽂件是否发⽣变化是通过不停的询问系统指定⽂件有没有变化,默认每秒问1次
	 poll: 1000 //ms
 }
  • plugins:

plugin 可以在webpack运⾏到某个阶段的时候,帮你做⼀些事情,类似于
⽣命周期的概念
扩展插件,在 Webpack 构建流程中的特定时机注⼊扩展逻辑来改变构建结
果或做你想要的事情。

  • HtmlWebpackPlugin

htmlwebpackplugin会在打包结束后,⾃动⽣成⼀个html⽂件,并把打包
⽣成的js模块引⼊到该html中。插件需要使用npm进行安装

npm install --save-dev html-webpack-plugin

配置:

title: ⽤来⽣成⻚⾯的 title 元素
filename: 输出的 HTML ⽂件名,默认是 index.html,也可以直接配置带 有⼦⽬录。
template: 模板⽂件路径,⽀持加载器,⽐如 html!./index.html
inject: true | ‘head’ | ‘body’ | false ,注⼊所有的资源到特定 的 template 或者templateContent 中,如果设置为 true 或者 body,所有的 javascript 资源将被放置到 body元素的底部,‘head’ 将 放置到 head 元素中。 favicon: 添加特定的 favicon 路径到输出的 HTML ⽂件中。
minify: {} | false , 传递 html-minifier 选项给 minify 输出
hash: true | false, 如果为 true, 将添加⼀个唯⼀的 webpack 编译 hash 到所有包含的脚本和 CSS ⽂件,对于解除 cache很有⽤。
cache: true | false,如果为 true, 这是默认值,仅仅在⽂件修改之后 才会发布⽂件。
showErrors: true | false, 如果为 true, 这是默认值,错误信息会写 ⼊到 HTML ⻚⾯中
chunks: 允许只添加某些块(⽐如,仅仅 unit test 块)
chunksSortMode: 允许控制块在添加到⻚⾯之前的排序⽅式,⽀持的 值:‘none’ | ‘default’ | {function}-default:‘auto’
excludeChunks:允许跳过某些块,(⽐如,跳过单元测试的块)

WebpackDevServer

提升开发效率的利器,每次改完代码都需要重新打包⼀次,打开浏览器,刷新⼀次,很麻烦,我们可以安装使⽤webpackdevserver来改善这块的体验,启动服务后,会发现dist⽬录没有了,这是因为devServer把打包后的模块,不会放在dist⽬录下,⽽是放到内存中,从⽽提升速度。

 npm install webpack-dev-server -D

修改下package.json

"scripts": {
 	"server": "webpack-dev-server"
 },

在webpack.config.js配置:

devServer: {
	 contentBase: "./dist",
	 open: true,
	 port: 8081
 },

跨域:联调期间,前后端分离,直接获取数据会跨域,上线后我们使⽤nginx转
发,开发期间,webpack就可以搞定这件事,启动⼀个服务器,mock⼀个接⼝:

// npm i express -D
// 创建⼀个server.js 修改scripts "server":"node server.js"
//server.js
const express = require('express')
const app = express()
app.get('/api/info', (req,res)=>{
 res.json({
 name:'开课吧',
 age:5,
 msg:'欢迎来到开课吧学习前端⾼级课程'
 })
})
app.listen('9092')
//node server.js
http://localhost:9092/api/info

项⽬中安装axios⼯具

//npm i axios -D
//index.js
import axios from 'axios'
axios.get('http://localhost:9092/api/info').then(res=>{
 console.log(res)
})

这样会存在跨域问题,修改webpack.config.js 设置服务器代理

proxy: {
	 "/api": {
	 	target: "http://localhost:9092"
	 }
 }

修改index.js

axios.get("/api/info").then(res => {
 console.log(res);
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值