-
前端工程化:模块化、组件化、规范化、自动化
-
前端工程化解决方案:webpack,parcel
-
webpack:代码压缩混淆、处理浏览器端兼容性、性能优化
-
webpack使用
-
webpack-dev-server插件:修改代码自动重新打包
- 安装
- 修改 package.json -> scripts 中的 dev 命令如下:
- 再次运行 npm run dev 命令,重新进行项目的打包
- 在浏览器中访问 http://localhost:8080 地址,查看自动打包效果
- 注:webpack-dev-server 会启动一个实时打包的 http 服务器
- 注:生成的bundle.js在内存中,在根目录下/bundle.js
-
html-webpack-plugin插件
-
loader(插件大杂烩)
-
css-loader:针对
import './css/index.css'
类似的es6语法- 安装:
npm i style-loader css-loader -D
- 在
webpack.config.js
中 module: {rules[/\.css$/, use:['style-loader', 'css-loader']]}
- 从后往前处理
- 安装:
-
less-loader:针对
import './less/index.less'
类似的es6语法- 安装:
npm i less-loader less -D
- 在
webpack.config.js
中 module: {rules[/\.less$/, use:['style-loader', 'css-loader', 'less-loader']]}
- 安装:
-
url-loader:
- 安装:
npm i file-loader url-loader -D
- 在
webpack.config.js
中 module: {rules[/\.jpg|png|gif$/, use:'url-loader&limt=22229']}
- 只有小于limit时,才会转为base64格式(减少服务器压力)
- 安装:
-
babel-loader:
- 安装:
npm i babel-loader @babel/core @babel/plugin-proposal-decorators -D
- 在
webpack.config.js
中 module: {rules[/\.js$/, use:'babel-loader', exclude:/node_modules/]}
- 新建babel.config.js文件
module.exports = { "plugins": [["@babel/plugin-proposal-decorators", { "version": "legacy" }]] }
- 安装:
-
- 注:清理也可以用
output{clean:true}
- 注:清理也可以用
- Vue使用
- 导入vue库
- 此时页面多了一个Vue构造函数
- 渲染页面时可以直接调用数据名;绑定事件时可以直接调用方法
const vm = new Vue({
el: '#app',
data: {
// 此处是数据
username: 'zs',
gender: '女',
info: '<h4>1111</h4>',
tips: '请输入用户名',
index: 1,
count: 1,
city: '',
},
methods: {
// 此处是方法
add(n, e) {
console.log(e);
this.count += n;
},
clear(e) {
// 修改事件触发对象用e.target
e.target.value = '';
}
},
})
-
内容渲染指令
- v-text:会覆盖元素内默认的值,并且不能渲染html
- {{}}插值表达式
- v-html:可以直接将带有标签的字符串渲染成html内容
-
属性渲染指令
- v-bind:动态绑定属性值,可以简写为:,如
v-bind:placeholder
写为:placeholder
- 注:插值表达式和属性渲染v-bind中均可以进行表达式的运算
- v-bind:动态绑定属性值,可以简写为:,如
-
事件绑定指令
-
条件渲染
v-if
/v-show
v-if
是动态创建和删除,适合默认不用显示的场景v-show
是通过动态添加style="display:none;"
属性来实现的,适合频繁切换的场景v-else-if
和v-else
只能紧跟在v-if
后面使用
-
循环渲染
v-for
-
侦听器watch:监视数据的变化
-
- 声明时是一个方法,调用时采用属性方式调用
- 只有依赖的数据发生变化时,计算属性才会变化
-
ES6模板化
- 默认导出
export default {n1, show}
- 按需导出
export const say = () => {}
- 导入:
import m1, { n3 as my_define, say } from './03-es6模块化.js';
- 直接导入并执行:
import './05-直接导入.js';
- 默认导出
-
Promise:解决回调地狱的问题
-
- 在 async 方法中,第一个 await 之前的代码会同步执行,await 之后的代码会异步执行
- 如果在 function 中使用了 await,则 function 必须被 async 修饰
-
同步异步任务