目录
1.3.6 webpack使用加载器css-loader,style-loader
1.4 webpack开发服务器web-dev-server
> > >
1 webpack模块打包工具
1.1 webpack基本概念
1.1.1 为什么学webpack
- 减少文件数量
- 缩减代码体积
- 提高浏览器打开的速度
webpack官网地址
1.1.2 webpack的基本概述
webpack本质是,一个第三方模块包,用于分析并打包代码
- 支持所有类型文件的打包
- 支持less/sass => css
- 支持ES6/7/8 => ES5(高级的语法进行降级,兼容低版本浏览器)
- 压缩代码,提高加载速度
1.2 webpack使用步骤
1.2.1 环境准备
(1) 初始化包环境
yarn init
(2) 安装依赖包
yarn add webpack webpack-cli -D
(3) 配置script(自定义命令)
"script": {
"bulid": "webpack"
}
1.2.2 webpack的基本使用
(1) 首次打包
需求: 2个js文件 ->打包成1个js文件
分析:
①:新建src下的资源
②:add.js – 定义求和函数并导出
③:index.js – 引入add模块并使用函数输出结果
④:执行 `yarn build` 自定义命令, 进行打包 (确保终端路径在src的父级文件夹)
⑤:打包后默认生成dist和main.js, 观察其中代码
(2) 再次打包
需求:代码更多后, 如何打包呢?
分析:
①:src下新建tool/tool.js
②:定义数组求和函数导出
③:index.js – 引入tool模块的函数并使用, 打印结果
④:执行 `yarn build` 自定义命令, 进行打包 (确保终端路径在src的父级文件夹)
⑤:打包后默认生成dist和main.js, 观察其中代码
代码修改了要重新打包,且路径正确
process.env访问开发或者产品环境配置文件
1.3 webpack的配置
1.3.1 webpack的入口和出口
(1) 配置
默认入口: ./src/index.js
默认出口: ./dist/main.js
webpack配置 - webpack.config.js(默认)
-
新建src并列处, webpack.config.js
-
填入配置项
const path = require("path")
module.exports = {
entry: "./src/main.js", // 入口
output: {
path: path.join(__dirname, "dist"), // 出口路径
filename: "bundle.js" // 出口文件名
}
}
-
修改package.json, 自定义打包命令 - 让webpack使用配置文件
1.3.2 _yarn build执行流程图
1.3.3 隔行变色
步骤:
①:从0准备环境, 初始化包环境, 下载webpack和webpack-cli包, 配置自定义命令build
②:yarn下载jquery, 新建public/index.html,准备一些li标签
③:src/main.js 引入jquery, 编写功能代码
④:执行打包命令
⑤:复制public/index.html到dist/, 然后引入打包后的js, 运行网页观察效果
重点:webpack打包后的js引入到html中使用
1.3.4 webpack的插件
_html-webpack-plugin
简化了html的创建
(1) 安装
yarn add html-webpack-plugin -D
(2) webpack.config.js添加配置
1.3.5 webpack打包css问题
新建 - src/css/index.css
编写去除li圆点样式代码
(重要) 一定要引入到入口才会被webpack打包
执行打包命令观察效果
报错: 因为webpack默认只能处理js文件
1.3.6 webpack使用加载器css-loader,style-loader
css-loader 让webpack能处理css类型文件
style-loader 把css插入到DOM中
(1) 下载安装加载器
yarn add style-loader css-loader -D
(2) 配置
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
// ...其他代码
module: {
rules: [ // loader的规则
{
test: /\.css$/, // 匹配所有的css文件
// use数组里从右向左运行
// 先用 css-loader 让webpack能够识别 css 文件的内容并打包
// 再用 style-loader 将样式, 把css插入到dom中
use: [ "style-loader", "css-loader"]
}
]
}
}
总结: 万物皆模块, 引到入口, 才会被webpack打包, css打包进js中, 然后被嵌入在style标签插入dom上
1.3.7 webpack使用加载器less-loader
(1) 安装
yarn add less less-loader -D
(2) 配置
module: {
rules: [ // loader的规则
// ...省略其他
{
test: /\.less$/,
// 使用less-loader, 让webpack处理less文件, 内置还会用less翻译less代码成css内容
use: [ "style-loader", "css-loader", 'less-loader']
}
]
}
1.3.8 webpack处理图片文件
资源模块(asset module)是一种模块类型,它允许使用资源文件(字体,图标等)而无需配置额外 loader。
直接入口文件导入打包会报错,因为webpack无法自己处理图片文件
webpack5, 使用asset module技术实现字体文件和图片文件处理, 无需配置额外loader
以前用url-loader和file-loader来处理 现在webpack.config.js – 针对图片文件设置type: “assets“
再次打包观察效果 小于8KB文件, 文件转base64打包在js中, 大于8KB, 文件自动命名输出到dist下, 打包观察效果和2图区别
1.3.9 webpack加载文件的优缺点
图片翻译成了base64,放在js文件中
好处:浏览器不用发请求了,直接可以读取, 速度快
坏处: 图片太大,再转`base64`就会让图片的体积增大 30% 左右, 得不偿失
yarn install下载package.json中的所有包
1.3.10 加载字体图标
src/assets 下放入fonts字体相关文件夹(预习资料里)
src/main.js 引入 assets/fonts/iconfont.css
src/main.js 创建一个i标签, 使用字体图标标签添加到body上
添加针对字体文件的加载器规则, 使用asset/resource(直接输出文件并配置路径)
打包后运行网页观察效果
1.3.11 webpack对JS语法降级加载器
babel官网: https://www.babeljs.cn/
babel-loader文档: https://webpack.docschina.org/loaders/babel-loader/
- babel: 一个javascript编译器, 把高版本js语法降级处理输出兼容的低版本语法
- babel-loader: 可以让webpack转译打包的js代码
- 在src/main.js – 定义箭头函数, 并打印箭头函数变量 (千万不能调用, 为了让webpack打包函数, 看降级效果)
// 高级语法
const fn = () => {
console.log("你好babel");
}
console.log(fn) // 这里必须打印不能调用/不使用, 不然webpack会精简成一句打印不要函数了/不会编译未使用的代码
// 没有babel集成时, 原样直接打包进lib/bundle.js
// 有babel集成时, 会翻译成普通函数打包进lib/bundle.js
- 下载加载器
yarn add -D babel-loader @babel/core @babel/preset-env
- 配置到webpack.config.js上
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/, // 不去匹配这个文件夹下的js文件
use: {
loader: 'babel-loader', // 使用这个loader处理js文件
options: { // 加载器选项
presets: ['@babel/preset-env'] // 预设:转码规则(用bable开发环境本来预设的)
}
}
}
- 打包观察是否降级
1.4 webpack开发服务器web-dev-server
每次修改代码,重新yarn build打包,才能看到最新的效果,实际工作中,打包yarn build非常耗时
原因:
从0构建依赖
磁盘读取对应的文件到内存,webpack开始加载
再用对应的loader进行处理
将处理完的内容,输出到磁盘指定目录
解决:
起一个开发服务器,缓存一些已经打包的内容,只重新打包修改的文件,最终运行在内存中给浏览器使用
总结:
webpack开发服务器,把代码运行在内存中,自动更新,实时返回给浏览器显示
1.4.1 webpack-dev-server模块的使用
(1) 下载模块包
yarn add webpack-dev-server -D
(2) 自定义webpack开发服务器启动命令server-在package.json里
"script": {
"build": "webpack",
"server": "webpack serve"
}
(3) 启动当前工程里的webpack开发服务器
yarn server
(4) 重新编写代码,观察控制台和浏览器是否自动和更新
1.4.2 webpack开发服务器改变配置
(1) 配置端口号devServer.port
webpack.config.js中
devServer: {
port: 3000
}
2 Vue基础
2.1 Vue 的基本概念
2.1.1 为什么学vue
- 开发速度快,更高效
- 企业开发都在使用
- 前端工程师必备
(1) Vue是什么
渐进式的js框架,一套拥有自己规则的语法
官网地址:http://cn.vuejs.org/ (作者:尤雨溪)
(2) Vue里的渐进式概念
Vue从基础开始,会循序渐进向前学习,可以逐渐进行使用
(3) 库和框架
库: 封装的属性或方法(例如jQuery)
框架: 拥有自己的规则和元素,比库强大的多(Vue)
2.1.2 Vue学习方式
传统开发方式: 基于html文件开发Vue
工程化开发方式: 在webpack环境中开发Vue,这是最推荐最常用的
2.2 @vue/cli脚手架工程化
@vue/cli是Vue官方提供的一个全局模块包(得到vue命令), 此包用于创建脚手架项目
脚手架是为了保证各施工过程顺利进行而搭设的工作平台
2.2.1 脚手架的好处
开箱即用
0配置webpack
babel支持
css, less支持
开发服务器支持
2.2.2 安装
(1) 安装
yarn global add @vue/cli
(2) 查看是否成功
vue -V //显示脚手架的版本
2.2.3 创建项目
(1) 创建项目
vue create vuecli-demo 注意: 项目名称不能有大写字母,中文和特殊字符
(2) 选择模板和包管理器,等待脚手架项目创建完成
(3) 启动开发服务器
cd 进入项目下,启动内置的webpack本地热更新开发服务器-浏览器项目页面
cd vuecli-demo
yarn serve
2.2.4 脚手架目录和代码分析
2.2.5 项目架构了解
目标: 知道项目入口,以及代码执行顺序和引入关系
main.js和App.vue, 以及index.html作用和关系?
- main.js – 项目打包主入口 – Vue初始化
- App.vue – Vue页面主入口
- index.html – 浏览器运行的文件
- App.vue => main.js => index.html
2.2.6 脚手架自定义配置
项目中没有webpack.config.js文件,因为Vue脚手架项目用的vue.config.js
src并列处新建vue.config.js, 填入配置, 重启webpack开发服务器
2.2.7 eslint检查代码
目标:是一种代码检查的工具
如果写代码违反了eslint的规则-报错(代码格式有没有问题,冗余)
演示: 在main.js中随便定义变量 – 不使用 – 观察eslint报错
方式1: 手动解决掉错误, 以后项目中会讲如何自动解决
方式2: 暂时关闭eslint检查(因为现在主要精力在学习Vue语法上), 在vue.config.js中配置后重启服务
module.exports = {
lintOnSave: false // 关闭exlint检查
}
2.2.8 单vue文件讲解
vue推荐采用.vue文件来开发项目
template里只能有一个根标签
js独立作用域互不影响
style配合scoped属性,保证样式只针对当前template内标签生效
vue文件配合webpack,把他们打包起来插入到index.html
(2) 插件Vetur插件(vscode插件)
代码高亮提示和智能补全
2.2.9 脚手架项目,清理欢迎页面
assets和components 文件夹下的一切都删除掉 (不要默认的欢迎页面)
src/App.vue默认有很多内容, 可以全部删除留下template和script和style的框