1、项目基本信息
该项目有主要功能:
资讯列表、标签页切换,文章举报,频道管理、文章详情、关注功能、点赞功能、评论功能、搜索功能、登录功能、个人中心、编辑资料、小思同学
生产环境的包
包名 | 概念 |
---|---|
vue | 核心vue |
vuex | 状态管理插件 |
vue-router | 路由管理插件 |
axios | 网络请求插件 |
vant | 移动组件库 |
socket.io-client | 即时通讯库 |
amfe-flexible | flexiblejs适配 |
开发环境的包
包名 | 概念 |
---|---|
babel | ES语法转换器 |
less | css预处理器 |
vue-cli | vue项目脚手架包 |
postcss | css语法转换器(后处理器) |
postcss-pxtorem | 把px自动转rem插件(需要配合webpack用) |
项目相关的技术点
- vuejs中
- $nextTick使用 (vue更新DOM是异步的)
- 组件通信 (父, 子传递)
- async和await用法
- keep-alive 组件缓存
- vuex
- actions中发ajax请求
- actions的返回值问题
- vue-router
- 懒加载 (对打包以后首页加载速度有提高)
- axios
- 请求和响应拦截器
- 封装请求工具方法 (代码分层)
- vant
- 对组件使用更熟悉
- 掌握使用和查阅文档的能力
- socket.io-client
- http协议复习 (请求报文和响应报文)
- 与ajax区别
- ajax和socket之间的选择
- amfe-flexible
- 移动端rem适配
跳过部分
如何创建Vue,不再赘述,使用Vue create就可以创建 另外根据需求,可能需要删除elslint或创建eslint下面总结Eslint经验
2、ESLint配置及介绍
目标
- 了解ESLint的作用
- 能判断ESLint的错误
ESLint是什么
ESLint 是一个代码检查工具,用来检查你的代码是否符合指定的规范
- 例如: = 的前后必须有一个空格
- 例如: 函数名后面必须有空格
- 例如: await必须用用在async修饰的函数内
- 例如: ==必须转换成3个等
- …
ESLint的好处
-
在写代码过程中, 检查你代码是否错误, 给你
小黑屋
提示 -
ESLint可以约束团队内代码的风格统一
ESLint是法官, Standard是法律
ESLint的规范
规范文档: http://www.verydoc.net/eslint/00003312.html
规范文档2: https://standardjs.com/rules-zhcn.html
规范文档3: http://eslint.cn/docs/rules/
ESLint使用
在代码里随便多写几个回车, ESLint会跳出来刀子嘴
, 豆腐心
的提示你.
在webpack开发服务器终端 / 浏览器 => 小黑屋
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hri4KEAh-1654588483423)(images/image-20210119223702865.png)]
eslint 是来帮助你的。心态要好,有错,就改。
把第4步规则名字, 复制到上面规范里查找违反了什么规则 / 根据第三步提示修改
小结
-
什么是ESLint?
代码检查工具
-
为什么要使用ESLint?
规范我们写代码的格式, 看着整洁 / 团队内成员风格统一
-
ESLint在哪里生效?
webpack开发服务器+ESLint配置检查
5.ESLint在VSCode中使用
目标
- 每次运行后, 才看到ESLint报错, 很累吧?
- 边写代码, VSCode就提示ESLint规则?
ESLint插件
-
下载这个插件到vscode中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xN5ZBHMS-1654588483424)(images/image-20210327194440711.png)]
2. 非常非常非常重要
一定要把脚手架工程, 作为vscode根目录, 因为eslint要使用配置文件.eslintrc
-
一定要配置插件监测的时机, 修改ESLint插件配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aIyLm2Nk-1654588483425)(images/image-20210327195329383.png)]
不用管别的, 把红框的放在{}内即可
"eslint.run": "onType", "editor.codeActionsOnSave": { "source.fixAll.eslint": true }
更多的规则可以参考这里: https://www.cnblogs.com/jiaoshou/p/12218642.html
ESLint插件修复
- 随便文件里多敲击几个回车, vscode报错提示, 证明ESLint插件开始工作
- ctrl + s 报错下是否能自动修复部分问题, 可以, 证明ESLint插件开始工作
如果不工作, 看下面扩展资料
自定义规则
在.eslintrc.js文件中, 可以调整规则(团队内可以自定义自己一套)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZHRjVBrd-1654588483425)(images/image-20210627220435336.png)]
rules是一个对象,以键值对的格式来约定规则:
- 键名是规则名
- 值是这条规则的具体说明。最常见的有off,warn,error
小结
-
ESLint在哪2个地方分别检查代码?
VSCode里工作和webpack开发服务器也检查
-
ESLint插件有什么功能?
VSCode编码时, 提示, 保存还可以自动修复大部分问题
3、 项目基本结构及配置
-
清空src/views/App.vue中的默认内容, 留个框
<template> <div> 黑马头条移动版 </div> </template>
-
删除默认生成的文件
- components/HelloWorld.vue
- views/Home.vue
- views/About.vue
-
修改一下路由配置 - 留下框
- src/router/index.js
import Vue from 'vue' import VueRouter from 'vue-router' Vue.use(VueRouter) const routes = [ // 删除掉 ] const router = new VueRouter({ routes }) export default router
新增文件夹
在 src 目录下中补充创建以下目录:
- /api/index.js : 存储请求函数模块
- /styles: 样式文件模块
- /utils: 工具函数模块
项目的完整目录结构
通过mddir自动生成
├── node_modules # 安装的包
├── public # 静态资源托管目录
│ ├── favicon.ico
│ └── index.html
└── src # 源码
├── api #请求接口封装模块
└── index.js #封装请求方法
├── assets #资源目录
├── components #组件目录
├── router #路由模块
└── index.js #路由对象
├── store #Vuex容器模块
└── index.js #store对象
├── styles #样式目录
├── utils #工具模块目录
├── views #视图组件目录
├── App.vue #根组件
└── main.js #入口文件
├── .browserslistrc # 浏览器的约定
├── .editorconfig #对本项目要用到编辑器的约定
├── .eslintrc.js #eslint
├── .gitignore # git的忽略设置
├── babel.config.js #babel配置文件
├── package-lock.json #npm相关文件
├── package.json #npm相关文件
└── README.md #项目说明文件
主要留意两个新增
- api文件夹的作用?
- 统一管理网络请求方法
- utils文件夹的作用?
- 定义工具方法的地方
有些项目可能会把axios的二次封装文件放在api下,在这里作为独立的工具包引入utilis下,方便统一管理
4、Vant组件库的使用
Vant是一款轻量级的组件库API,相比起适用于管理系统的element-ui,更适合于移动端,在这个项目中学习如何使用
有赞团队推出的Vant组件库
其他移动端组件库
- vux
- mint
引入vant组件库
-
下载vant组件库
yarn add vant
-
根据文档指引, 配置按需引入
https://vant-contrib.gitee.io/vant/#/zh-CN/quickstart#yin-ru-zu-jian
如果上面打不开用这个地址试试: https://youzan.github.io/vant/#/zh-CN/home
-
下载插件
yarn add babel-plugin-import -D
-
在babel.config.js-添加如下配置
module.exports = { // ...省略了其他 plugins: [ ['import', { libraryName: 'vant', libraryDirectory: 'es', style: true }, 'vant'] ] };
-
改了src以外的文件, 要重启本地开发服务器
-
vant组件库这里采用按需引入
只需要引入某个组件而不是全部, 组件对应样式文件也会自动引入
5、移动端适配
采用postcss和postcss-pxtorem@5.1.1将px转化为rem
利用amfe-flexible> 根据网页宽度, 设置html的font-size,来适应移动端布局
适配方案选型
- PC端一般都是1:1用px还原UI设计图, 靠内容撑开高度
- 移动端一般都是rem单位进行适配
适配步骤
-
下载amfe-flexible
根据网页宽度, 设置html的font-size
yarn add amfe-flexible
-
到main.js引入
import "amfe-flexible"
-
下载postcss和postcss-pxtorem@5.1.1
postcss: 后处理css, 编译翻译css代码
postcss-pxtorem: 把css代码里所有px计算转换成rem
yarn add postcss postcss-pxtorem@5.1.1
-
根目录下创建postcss.config.js文件
对postcss进行设置
module.exports = { plugins: { 'postcss-pxtorem': { // 能够把所有元素的px单位转成Rem // rootValue: 转换px的基准值。 // 编码时, 一个元素宽是75px,则换成rem之后就是2rem rootValue: 37.5, propList: ['*'] } } }
37.5 是如何得来的?
UI移动端设计图宽度375px, 而flexible.js会/10, 设置html的font-size为37.5
小结
-
移动端适配选择哪种?
rem + flexible.js
-
flexible.js作用是什么?
js代码里获取网页宽度 / 10设置html的font-size的值(px单位)
-
代码里px如何自动转换rem?
postcss和postcss-pxtorem插件
6、封装axios函数
- 基于axios进行二次封装
- 统一配置, 便于管理
-
下载axios
yarn add axios
-
创建utils/request.js
// 基于 axios 封装的请求模块 import ajax from 'axios' // 新建一个新的axios实例 const axios = ajax.create({ baseURL: 'http://123.57.109.30:8000' // 基地址 }) // 导出自定义函数, 参数对象解构赋值 export default ({ url, method = 'GET', params, data, headers }) => { return axios({ url: url, method: method, params: params, data: data, headers: headers }) // 以后换库, 只需要改这里, 逻辑页面不用动, 保证代码的复用性和独立性(高内聚低耦合) // return $.ajax({ // url: url, // type: method, // data: data, // header: headers // }) }
小结
-
为何要二次封装axios函数?
为了让我们的代码更加灵活, 统一管理
-
axios.create作用?
创建返回一个新的axios函数对象
这里的封装方式并不绝对,不同项目会有不同封装结构,这里采用这种
最后总结下我们在这里干了什么
- 理清项目技术栈项目需求,确定了项目的主要功能(登录与注册等),并清除自己要写什么
- 配置项目,确定是否引入eslint,配置项目结构
- 使用Vant组件库,按需导入
- 配置移动端布局
- 配置axios,并且暴露出去
接下来首先完成登录与注册功能