first commit

This commit is contained in:
编码猿
2024-09-27 02:06:13 +08:00
commit 852d94fbb9
36760 changed files with 3274413 additions and 0 deletions

View File

@@ -0,0 +1,73 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>我的html学习</title>
</head>
<body>
<a title="悬浮提示" href="https://www.runoob.com/tags/html-reference.html" target="_blank">百度</a>
<a href="tel:15056042604">联系我</a>
<p>段落</p>
<video src="https://www.runoob.com/try/demo_source/movie.mp4" controls muted autoplay ></video>
<audio src="https://www.runoob.com/try/demo_source/movie.mp4" controls muted autoplay ></audio>
<form action="https://www.runoob.com/tags/html-reference.html" method="get">
<input type="text" name="username" placeholder="用户名">
<input type="password" name="userpwd" placeholder="密码">
<input type="color" name="" id="">
<input type="file" name="" id="">
<input type="radio" name="ee">
<input type="radio" name="ee">
<input type="number" name="" id="">
<input type="checkbox">
<input type="checkbox">
<select name="" id="">
<option value="">-请选择-</option>
<option value="">合肥</option>
<option value="">南京</option>
</select>
<input type="submit" value="登录">
<!-- <button>登 录</button> -->
</form>
<del>删除线</del>
<ul>
<li>无序列表1</li>
<li>无序列表2</li>
<li>无序列表3</li>
<li>无序列表4</li>
<li>无序列表5</li>
</ul>
<ol>
<li>有序列表1</li>
<li>有序列表2</li>
<li>有序列表3</li>
<li>有序列表4</li>
<li>有序列表5</li>
</ol>
<h1>标题1</h1>
<h2>标题2</h2>
<h3>标题3</h3>
<h4>标题4</h4>
<h5>标题5</h5>
<h6>标题6</h6>
<i>实际项目是用来显示小图标的 iconfont</i>
<textarea name="" id="" cols="30" rows="10" placeholder="输入建议"></textarea>
</body>
</html>

View File

@@ -0,0 +1,78 @@
git 版本控制
合并代码(代码管理)
代码回滚
远程仓库
github web网站 全世界最大的代码仓库(世界最大的同性交友网站)
linux (linus) windows macos(unix)
gitlab
gitee 码云
coding
本地仓库
git init 初始化一个本地仓库
git add 文件名1 文件名2
git add -A(all)
git commit 设置上传备注
git push 上传(推送)代码到远程仓库
git pull 下载(拉取)远程最新代码到本地
如何提交本地修改过的代码到远程仓库???
git add -A
git commit -m "备注内容"
git pull
git push
代码冲突
网址
账户名
密码
md markdown
一种快速写作的方式
富文本编辑器
分efwef
测试修改
大青蛙多群无
html 人的骨骼 (网站基本结构)
css 人的外观 (网站的样式)
javascript 人的思想 (网站的特效&功能)
meta 元数据标签
ul 用于重复性的布局
弹性盒子
13个
rem
font-size: 1.6rem;
移动端一像素

View File

@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div>
</div>
</body>
</html>

View File

@@ -0,0 +1,44 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex</title>
<style>
* {
margin: 0;
padding: 0;
list-style: none;
}
ul {
display: flex;
background: #8d8d8d;
height: 45px;
align-items: center;
}
li {
}
</style>
</head>
<body>
<ul>
<li>首页1</li>
<li>首页2</li>
<li>首页3</li>
<li>首页4</li>
<li>首页5</li>
<li>首页6</li>
<li>首页7</li>
<li>首页8</li>
<li>首页9</li>
<li>首页10</li>
</ul>
</body>
</html>

View File

@@ -0,0 +1,27 @@
pc 移动端
display: inline-block
float: left: right;
flex布局 + rem尺寸
flex 13 个css属性
display: flex 开启弹性盒子
用户父元素上6个
flex-direction 设置对齐方向 注意 align-items 和 justify-content 作用交换
flex-wrap 自动换行
flex-flow
justify-content 水平对齐
align-items 垂直对齐(单行的时候)
align-content 多行的时候设置垂直对齐
用户子元素上6个
order 数值越小越靠前
flex-grow 元素的放大比例默认0
flex-shrink 0 让元素不缩放默认1 缩放)
flex-basis
flex flex: 1; 是 flex-grow 平替
align-self 让元素不遵守 父元素上的 align-items

View File

@@ -0,0 +1,48 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script type="text/javascript">
((w, d) => {
function setSize() {
var screenWidth = d.documentElement.clientWidth;
var currentFontSize = screenWidth * 100 / 750;
d.documentElement.style.fontSize = currentFontSize + 'px';
}
w.addEventListener('resize', setSize);
w.addEventListener('pageShow', setSize)
w.addEventListener('DOMContentLoaded', setSize)
})(window, document)
</script>
<style>
* {
margin: 0;
padding: 0;
}
.box {
width: 3.75rem;
height: 3.75rem;
float: left;
}
.box1 {
background: red;
}
.box2 {
background: yellow;
}
</style>
</head>
<body>
<div class="box box1"></div>
<div class="box box2"></div>
</body>
</html>

View File

@@ -0,0 +1,10 @@
rem
你写的rem尺寸 * html上的fontsize16px = 真实尺寸px
第一种方案:
媒体查询
js

View File

@@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>事件</title>
</head>
<body>
<button>点我</button>
</body>
<script>
// object
// 虚拟dom 真实dom 影子dom
// 事件
// 三要素:事件源 事件类型 事件处理函数
// let button = document.querySelector("button")
// button.onclick = function (e) {
// console.log(e);
// }
// button.addEventListener('click', function() {
// alert(1)
// })
// button.addEventListener('click', function() {
// alert(2)
// })
// button.addEventListener('click', function() {
// alert(3)
// })
</script>
</html>

View File

@@ -0,0 +1,81 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
<script>
// 函数(Function) 事件 写特效(从易到难) 项目前ajaxhttp 写项目...
// 函数 方法
// 作用:封装代码的
// function test() {
// console.log("test");
// }
// 回调 callback
// 异步 编程 获取返回值
// 网络请求
// Promise
// 同步 编程
// let SmsCode = function (callback) {
// let a = 1
// setTimeout(function() {
// a = 100;
// callback(a)
// },3000)
// // arguments 用于参数比较多的情况
// // console.log("test: ", arguments);
// // return true
// }
// SmsCode(function(res) {
// console.log(res);
// });
// 全局作用域
// 局部作用域
// 变量提升
// let test = function () {
// c = 1
// }
// test()
// let test2 = function () {
// console.log("test: ", c);
// }
// test2()
// 闭包
// 函数内部函数访问外部变量的过程
// 作用:缓存数据
// 容易内存泄漏
// let test2 = function () {
// let result = 3;
// let test3 = function (num) {
// result *= num
// return result;
// }
// return test3;
// }
// let res = test2()
// console.log( res(10) );
// console.log( res(30) );
</script>
</html>

View File

@@ -0,0 +1,257 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
<script>
// js es5,es6,7,8,9.....
// 注释
// 单行注释
// 多行 /** 这是注释 **/
// console.log("111")
// console.warn("111")
// console.error("111")
// 变量
// 程序内部存储的可变的数据
// 如何定义变量
// var 变量名 = 变量默认数值(可选, 定义变量未赋值就是 undefined);
// let 变量名 = 变量默认数值(可选, 定义变量未赋值就是 undefined);
// 先定义 后 使用
let a = 1, b;
console.log(a);
b = 3
console.log(b);
// 变量名 定义的规则?
// 严格区分大小写
// 不能以数字或者特殊符号_ $)开头
// 需要遵守驼峰命名法
// 禁止使用中文
// 常量
// 程序内部存储的不可变的数据
// const 常量名 = 常量默认数值(必选);
const test = 123;
console.log(test);
// 数据类型
// 基本数据类型
// 字符串String、数字(Number)、布尔(Boolean)、空Null、未定义Undefined
// 引用数据类型
// 对象(Object)、数组(Array)、函数(Function)
// 字符串String 双(单)引号包裹的
let abc = "ni";
console.log(abc);
// 布尔(Boolean)
// true1 false0
// = 赋值
// == 判断是否相等
// === 强等于 判断是否相等(但会判断数据类型)
// 运算符 + - * / % (求余)
// ++ --
// + 只能用于number
// 字符串拼接
// console.log(a+abc);
console.log(a * abc); // NaN 非数字
console.log(++a); // 1
// 赋值运算符 = += -= *= /= %=
console.log(a += b); // a = a+b
//比较运算符 != !== <> <= >=
//逻辑运算符
// && || !
// 对象(Object)
// 类模拟后端的class
// 类是现实生活中事物(属性,功能)在编程中的映射(存储)
// 构造函数constructor 类被初始化的时候默认执行的函数
// 作用:接受参数
// 析构函数
// 类的三大特征??
// 封装 继承 多态
// this 指向
var car1 = {
color: 'red',
speed: '4.3s',
forward: function () {
console.log("前进: ");
},
retreat: function () {
console.log("后退");
},
stop: function () {
console.log("停止");
}
}
car1.forward()
// 语法糖
class baseCar {
color;
speed;
forward() {
console.log("前进");
}
retreat() {
console.log("后退");
}
stop() {
console.log("停止");
}
}
class smallCar extends baseCar {
constructor() {
super()
this.color = "red"
console.log("this.color: ", this.color);
}
}
class Car119 extends baseCar {
constructor() {
super()
this.color = "green"
console.log("this.color: ", this.color);
}
}
var sc = new smallCar();
var c1 = new Car119();
// 基本数据类型
// 对象名(key): 对象值(value)
// 定义?
// var obj = new Object();
// obj.name = "刘兵";
// obj.age = 18
// var obj = new Object({ name: '刘兵', age: 18 });
// var r = "age"
// var obj = { name: [1,2,3,4], age: 18 };
// console.log(obj.r);
// console.log(obj[r]);
// delete obj.age
// console.log(obj);
// obj.like = "你好"
// console.log(obj);
// if () {
// }
// if () {
// } else {
// }
// if () {
// } else if ( a > 1 && a < 3) {
// } else {
// }
// 三元运算符
// 1 == 1 ? console.log("true") : console.log("false");
// switch
// switch (key) {
// case value:
// break;
// case value:
// break;
// case value:
// break;
// default:
// break;
// }
// for (let i = 0; i<10; i++) {
// console.log(i);
// }
// forEach map for of for in filter while (do while)....
// 数组
// 下标 0开始
// let arr = new Array();
// arr[0] = 1;
// arr[1] = 2;
// let arr = new Array(1,2);
// let arr = [1,2,3,4,5,6,7,8,9];
// for(let i =0;i< arr.length;i++) {
// console.log(arr[i]);
// }
// arr.forEach(function (val, index) {
// console.log(val);
// })
// prototype 原型
// prototype.lb Array.= function (callback) {
// for(let i =0;i< this.length;i++) {
// callback(this[i], i, this)
// }
// }
// arr.lb(function (val, index) {
// console.log(val);
// })
// arr[0] = 1000
// arr.push(10)
// arr.splice(1,2)
// console.log(arr);
// 函数(Function) 事件 写特效(从易到难) 项目前ajaxhttp 写项目...
// 函数 方法
// 作用:封装代码的
</script>
</html>

View File

@@ -0,0 +1 @@
console.log("测试");

View File

@@ -0,0 +1,17 @@
html
css 不算编程
javascript (js)
可以做什么??
pc网页
H5网页
android ios app
桌面端c#
后端phpjavapythongoc# asp.net, nodejs 三p php, jsp, asp
操作系统 windows macos linux unix
js 基础

View File

@@ -0,0 +1,57 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
<script src="./http.js"></script>
<script>
// callback 获取异步返回值
// 回调地狱
// promise
let getIndex = async () => {
// TODO 后期项目中封装
// let res = await http.post({ id: 1, page: 1 });
let res = await http.post({
url: 'http://127.0.0.1:3000/api/json/index',
headers: {
'token': 'hahhaha'
},
data: {
id: 1,
page: 1
}
});
console.log(res);
}
getIndex()
// http.post({
// url: 'http://127.0.0.1:3000/api/json/index',
// headers: {
// 'token': 'hahhaha'
// },
// data: {
// id: 1,
// page: 1
// }
// })
// .then(res => {
// console.log(res);
// })
// .catch(err => {
// console.log(err);
// })
</script>
</html>

View File

@@ -0,0 +1,66 @@
class Http {
defaultOption = {
timeout: 6000,
headers: {
'Content-Type': 'application/json;charset=utf-8'
}
}
constructor() {
this.xhr = new XMLHttpRequest()
}
get(par) {
return new Promise((success, error) => {
this.setOption(par)
let urlParams = ""
for (const key in par.data) {
urlParams += `&${key}=${par.data[key]}`
}
urlParams = urlParams.replace("&", "")
this.xhr.open("GET", `${par.url}?${urlParams}`)
this.xhr.timeout = this.defaultOption.timeout
this.setHeader(par.headers)
this.xhr.send()
this.statechange(success, error);
})
}
post(par) {
return new Promise((success, error) => {
this.setOption(par)
this.xhr.open("POST", par.url)
this.xhr.timeout = this.defaultOption.timeout
this.setHeader(par.headers)
this.xhr.send(JSON.stringify(par.data))
this.statechange(success, error);
})
}
setOption(par) {
this.defaultOption.timeout = par.timeout || this.defaultOption.timeout
// ....
}
setHeader(headerObject = {}) {
Object.assign(headerObject, this.defaultOption.headers)
for (const key in headerObject) {
this.xhr.setRequestHeader(key, headerObject[key]);
}
}
statechange(success, error) {
this.xhr.onreadystatechange = () => {
if (this.xhr.readyState == 4) {
if (this.xhr.status == 200) {
let data = JSON.parse(this.xhr.response)
success(data)
} else {
error(this.xhr)
}
}
}
}
}
var http = new Http();

View File

@@ -0,0 +1,87 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ajax</title>
</head>
<body>
<ul>
</ul>
</body>
<!-- <script>
function getData(res) {
console.log(res);
}
</script>
<script src="http://127.0.0.1/index.php?call=getData"></script> -->
<script>
// 拿出电话 初始化ajax 对象并存储
let xhr = new XMLHttpRequest()
// 输入号码 设置请求方式和地址
xhr.open("GET", "http://127.0.0.1/index.php")
// 拨号 发送ajax请求(http请求)
xhr.send()
// let res = await fetch("http://127.0.0.1:3000/api/json/index", {
// data: {}
// })
// fetch("http://127.0.0.1:3000/api/json/index")
// .then(res => res.json())
// .then(res => {
// console.log(res);
// })
xhr.onreadystatechange = () => {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
let data = JSON.parse(xhr.response)
console.log(data);
// data.result.list.forEach(v => {
// $("ul").innerHTML += `
// <li>
// <p>${v.title}</p>
// <img src="${v.img_src}" alt="">
// </li>
// `
// });
} else {
console.error(xhr);
throw new Error("请求失败")
}
}
}
// fetch("http://127.0.0.1:3000/api/json/index")
// .then(res => res.json())
// .then(res => {
// console.log(res);
// })
function $(className) {
return document.querySelector(className);
}
// GET 和 POST 请求有什么差别
// https://www.php.cn/faq/500696.html
// HTTP 协议
// https://www.cnblogs.com/coderwhytop/p/14769174.html
// GET 找服务器要资源
// POST 给服务器要资源
// PUT 给服务器要资源(更新的过程)
// DELETE 给服务器要资源(删除的过程)
</script>
</html>

View File

@@ -0,0 +1,52 @@
服务端渲染 (模板引擎) mvc
缺点:前后端代码混在一起,导致代码冗余,后期升级改造难
前端 20% (写页面)
后端 80% (写功能,做数据,安全,服务器)
前后端分离
前端 50% 写页面,功能,特效,路由
|
ajax ( XML, json )
|
后端 50% 做数据,安全,服务器
ajax一种无刷新的前后端数据交互的方式
XMLHttpRequest
fetch
Access-Control-Allow-Origin cors
浏览器有一个安全策略(同源策略 cors
如何判断?
协议 http 80 https 443
域名
端口
跨域请求
前端http://127.0.0.1:8080/test
前端https://www.runoob.com/ajax/ajax.html
后端http://127.0.0.1:3000/api/json/index
如何解决ajax跨域
1: 后端设置请求头 Access-Control-Allow-Origincors
2: jsonp + callback
3: 服务端代理
A(自己的前端) --> C(别人的后端)
A(自己的前端) --> B(自己的后端)
B(自己的后端) --> C(别人的后端)

View File

@@ -0,0 +1,33 @@
// const http = require("http")
// const fs = require("fs")
// // 创建本地服务器来从其接收数据
// const server = http.createServer((req, res) => {
// console.log("url: ",req.url);
// res.writeHead(200, { 'Content-Type': 'text/htML' });
// if (req.url.includes("html")) {
// let data = fs.readFileSync(`.${req.url}`)
// res.end(data.toString())
// }
// });
// server.listen(8000);
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.render('index', function (err, html) {
res.send(html)
})
})
app.get('/test', (req, res) => {
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})

View File

@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>nodejs</title>
</head>
<body>
<h2>nodejs服务端渲染的网页</h2>
</body>
</html>

View File

@@ -0,0 +1,19 @@
const utils = require("./utils")
const fs = require("fs")
const axios = require("axios")
console.log(utils);
axios.get('http://www.baidu.com/')
.then(function (response) {
// handle success
console.log("response: ",response.data);
})
.catch(function (error) {
// handle error
console.log(error);
})
// fs.writeFileSync('1.txt', "你好")
// fs.rmSync("1.txt")

View File

@@ -0,0 +1,668 @@
{
"name": "2023-05-26",
"version": "1.1.2",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz",
"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"requires": {
"mime-types": "~2.1.34",
"negotiator": "0.6.3"
}
},
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"axios": {
"version": "1.4.0",
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.4.0.tgz",
"integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==",
"requires": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
},
"body-parser": {
"version": "1.20.1",
"resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz",
"integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
"requires": {
"bytes": "3.1.2",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
"qs": "6.11.0",
"raw-body": "2.5.1",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
}
},
"bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz",
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
},
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"requires": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
}
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz",
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
"requires": {
"safe-buffer": "5.2.1"
}
},
"content-type": {
"version": "1.0.5",
"resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz",
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="
},
"cookie": {
"version": "0.5.0",
"resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz",
"integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
},
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
},
"dateformat": {
"version": "3.0.3",
"resolved": "https://registry.npmmirror.com/dateformat/-/dateformat-3.0.3.tgz",
"integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
"dev": true
},
"debounce": {
"version": "1.2.1",
"resolved": "https://registry.npmmirror.com/debounce/-/debounce-1.2.1.tgz",
"integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==",
"dev": true
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
},
"depd": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
},
"destroy": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz",
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
},
"dynamic-dedupe": {
"version": "0.3.0",
"resolved": "https://registry.npmmirror.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz",
"integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==",
"dev": true,
"requires": {
"xtend": "^4.0.0"
}
},
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
},
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
},
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz",
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
},
"express": {
"version": "4.18.2",
"resolved": "https://registry.npmmirror.com/express/-/express-4.18.2.tgz",
"integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
"requires": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
"body-parser": "1.20.1",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
"cookie": "0.5.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "1.2.0",
"fresh": "0.5.2",
"http-errors": "2.0.0",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
"proxy-addr": "~2.0.7",
"qs": "6.11.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
"send": "0.18.0",
"serve-static": "1.15.0",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
}
},
"filewatcher": {
"version": "3.0.1",
"resolved": "https://registry.npmmirror.com/filewatcher/-/filewatcher-3.0.1.tgz",
"integrity": "sha512-Fro8py2B8EJupSP37Kyd4kjKZLr+5ksFq7Vbw8A392Z15Unq8016SPUDvO/AsDj5V6bbPk98PTAinpc5YhPbJw==",
"dev": true,
"requires": {
"debounce": "^1.0.0"
}
},
"finalhandler": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz",
"integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
"requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"statuses": "2.0.1",
"unpipe": "~1.0.0"
}
},
"follow-redirects": {
"version": "1.15.2",
"resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz",
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
},
"form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
}
},
"forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz",
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
},
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"get-intrinsic": {
"version": "1.2.1",
"resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
"integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-proto": "^1.0.1",
"has-symbols": "^1.0.3"
}
},
"get-package-type": {
"version": "0.1.0",
"resolved": "https://registry.npmmirror.com/get-package-type/-/get-package-type-0.1.0.tgz",
"integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
"dev": true
},
"growly": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/growly/-/growly-1.3.0.tgz",
"integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==",
"dev": true
},
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"requires": {
"function-bind": "^1.1.1"
}
},
"has-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz",
"integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
},
"has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
},
"http-errors": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz",
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"requires": {
"depd": "2.0.0",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"toidentifier": "1.0.1"
}
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
},
"is-core-module": {
"version": "2.12.1",
"resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.12.1.tgz",
"integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
"dev": true,
"requires": {
"has": "^1.0.3"
}
},
"is-docker": {
"version": "2.2.1",
"resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz",
"integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
"dev": true
},
"is-wsl": {
"version": "2.2.0",
"resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz",
"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
"dev": true,
"requires": {
"is-docker": "^2.0.0"
}
},
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"dev": true
},
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"requires": {
"yallist": "^4.0.0"
}
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
},
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
},
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz",
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
},
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
"mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
},
"mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"requires": {
"mime-db": "1.52.0"
}
},
"minimist": {
"version": "1.2.8",
"resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz",
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"dev": true
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz",
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
},
"node-dev": {
"version": "8.0.0",
"resolved": "https://registry.npmmirror.com/node-dev/-/node-dev-8.0.0.tgz",
"integrity": "sha512-GXc0KxmBXfQxMPdymOui40yvC5W/RXFwmuUDT65wvTAO/o9wAsddYC8q4EHKxq3Qqt+uLS/g7XKdgVcsjyk9lw==",
"dev": true,
"requires": {
"dateformat": "^3.0.3",
"dynamic-dedupe": "^0.3.0",
"filewatcher": "~3.0.0",
"get-package-type": "^0.1.0",
"minimist": "^1.2.6",
"node-notifier": "^8.0.1",
"resolve": "^1.22.0",
"semver": "^7.3.7"
}
},
"node-notifier": {
"version": "8.0.2",
"resolved": "https://registry.npmmirror.com/node-notifier/-/node-notifier-8.0.2.tgz",
"integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==",
"dev": true,
"requires": {
"growly": "^1.3.0",
"is-wsl": "^2.2.0",
"semver": "^7.3.2",
"shellwords": "^0.1.1",
"uuid": "^8.3.0",
"which": "^2.0.2"
}
},
"object-inspect": {
"version": "1.12.3",
"resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.3.tgz",
"integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
},
"on-finished": {
"version": "2.4.1",
"resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz",
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
"requires": {
"ee-first": "1.1.1"
}
},
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz",
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
},
"path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
},
"proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz",
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"requires": {
"forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
}
},
"proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
"qs": {
"version": "6.11.0",
"resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"requires": {
"side-channel": "^1.0.4"
}
},
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
"raw-body": {
"version": "2.5.1",
"resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz",
"integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
"requires": {
"bytes": "3.1.2",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
}
},
"resolve": {
"version": "1.22.2",
"resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.2.tgz",
"integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
"dev": true,
"requires": {
"is-core-module": "^2.11.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
}
},
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"semver": {
"version": "7.5.1",
"resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.1.tgz",
"integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
}
},
"send": {
"version": "0.18.0",
"resolved": "https://registry.npmmirror.com/send/-/send-0.18.0.tgz",
"integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
"requires": {
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
"http-errors": "2.0.0",
"mime": "1.6.0",
"ms": "2.1.3",
"on-finished": "2.4.1",
"range-parser": "~1.2.1",
"statuses": "2.0.1"
},
"dependencies": {
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
}
}
},
"serve-static": {
"version": "1.15.0",
"resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz",
"integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.18.0"
}
},
"setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz",
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
"shellwords": {
"version": "0.1.1",
"resolved": "https://registry.npmmirror.com/shellwords/-/shellwords-0.1.1.tgz",
"integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
"dev": true
},
"side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"requires": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
"object-inspect": "^1.9.0"
}
},
"statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
},
"supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true
},
"toidentifier": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz",
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
},
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
"requires": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
}
},
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
},
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
},
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"dev": true
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz",
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
},
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"requires": {
"isexe": "^2.0.0"
}
},
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
"dev": true
},
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
}
}
}

View File

@@ -0,0 +1,20 @@
{
"name": "2023-05-26",
"version": "1.1.2",
"description": "nodejs学习",
"main": "index.js",
"scripts": {
"start": "node index.js",
"http": "node-dev http.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^1.4.0",
"express": "^4.18.2"
},
"devDependencies": {
"node-dev": "^8.0.0"
}
}

View File

@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h3>testhtml</h3>
</body>
</html>

View File

@@ -0,0 +1,22 @@
class utils {
test() {
console.log("test方法");
}
test2 () {
console.log(this);
console.log("test2");
}
}
module.exports = new utils()
// exports = {}
// exports = {
// a: utils {}
// }
// exports = utils {}

View File

@@ -0,0 +1,52 @@
原生js + jqjquery
dom操作
|
|
nodejs js在后端服务器上的运行环境
v8内核
c++
作用:前端,桌面端,后端,操作系统
|
|
前端三大框架
nodejs
npm 依赖(插件)管理工具
npm init -y 初始化nodejs项目的配置文件
npm run 自定的名称
npm start
npm install(i) 插件名 环境参数
--save -S
--save-dev -D
-g 安装到全局
node_modules 存放项目中你下载的插件的
dependencies 正式环境的依赖
devDependencies 开发环境的依赖
npm uninstall 插件名 删除已经安装上的插件
nodejs 模块
系统内置的模块
自己写的,网上下载的
html 模板引擎

View File

@@ -0,0 +1,50 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<a href="#/one">1</a>
<a href="#/two">2</a>
<div class="router-view">
</div>
</body>
<script>
var onePage = {
template: `<h1>one</h1>`
}
var twoPage = {
template: `<h1>two</h1>`
}
var link = [
{ path: '/one', page: onePage },
{ path: '/two', page: twoPage },
]
window.onhashchange = function () {
let path = window.location.hash.replace("#", "")
let cName = path.replace("/", "")
console.log(path);
let currentPath = link.filter(v => {
if (v.path == path) {
return v
}
})
$(".router-view").innerHTML += `
<div class="${cName}"></div>
`
$(`.router-view .${cName}`).innerHTML = currentPath[0].page.template
}
function $(className) {
return document.querySelector(className)
}
</script>
</html>

View File

@@ -0,0 +1,132 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
[v-cloak] {
display: none;
}
</style>
</head>
<body>
<div class="app" v-cloak>
<h2 ref="testh2" @click="alertH2()" v-once>{{message}}</h2>
<h3 >{{text}}</h3>
<div v-html="html"></div>
<div v-if="isLike">喜欢</div>
<div v-else>不喜欢</div>
<p v-show="isShow">显示</p>
<ul>
<li v-for="item,index in tabs" :key="index">{{ item.title }}</li>
</ul>
<ul>
<li :key="key" v-for="value, key in item">{{ key }} | {{ value }}</li>
</ul>
<a :href=" href ">百度</a>
<input type="text" placeholder="输入用户名" v-model="user_name">
{{ user_name }}
<hr>
<h1>{{ testsss("张三") }}</h1>
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
<script>
// data 定义变量的地方
// methods 定义方法的地方
// 指令vue提供的一些标签属性可是实现各种功能
// v-on 绑定点击事件
// 简写 @事件类型
// v-text
// v-html 将html字符串渲染成真的dom
// v-if 根据条件选择显示什么东西
// v-show 根据条件选择显示什么东西
// v-for 循环显示
// v-bind 将变量绑定到标签的属性上
// 简写 :
// v-model 获取输入框的值
// TODO activated
// computed 会进行结果的缓存
let vm = new Vue({
el: ".app",
data: {
user_name: '',
message: "我的vue学习",
text: "我是v-text",
html: ` <ul> <li>你好</li> </ul>`,
isLike: true,
isShow: true,
href: 'https://www.baidu.com/',
tabs: [
{ id: 1, title: '社会' },
{ id: 2, title: '军事' },
{ id: 3, title: '体育' },
],
item: { id: 1, title: '社会' }
},
beforeCreate() {
console.log(this.message);
},
created() {
// ajax请求
console.log(this.message);
console.log(this.$refs.testh2);
},
mounted() {
console.log("mounted: ",this.$refs.testh2);
},
updated() {
console.log("updated: ");
},
methods: {
alertH2() {
alert(this.message)
this.alertH2_2()
},
alertH2_2() {
alert("点我了2")
}
},
computed: {
testsss() {
return (name) => {
console.log(name);
return name + this.message
}
}
},
watch: {
user_name: {
handler: (value, oldvalue) => {
console.log("watch: ",value, oldvalue);
},
immediate: true
}
}
})
console.log(vm);
</script>
</html>

View File

@@ -0,0 +1,160 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.active {
color: red;
}
</style>
</head>
<body>
<div id="app">
<router-view></router-view>
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router@3.6.5/dist/vue-router.js"></script>
<script>
const Index = {
data() {
return {
list: [
{ id: 1, title: '新闻1' },
{ id: 2, title: '新闻2' },
{ id: 3, title: '新闻3' },
]
}
},
template: `<div class="index">
<ul>
<router-link tag="li" :to="{ name: 'info', query: { id: item.id } }" v-for="item,index in list" :key="index">
{{ item.title }}
</router-link>
</ul>
</div>`,
methods: {
goInfo(id) {
this.$router.push({
name: 'info',
params: {
// id: id,
id
}
})
}
}
}
const Info = {
template: `<div class="info">详情</div>` ,
created() {
console.log(this.$route.query.id);
},
}
const Car = {
template: `<div class="info">购物车</div>` ,
created() {
},
}
const Login = {
template: `<div class="info">
登录页面
<button @click="login">登录</button>
</div>` ,
created() {
},
methods: {
login() {
localStorage.setItem("token", "effdasfgfdasgfnbfddg")
if (this.$route.query.from) {
this.$router.push(this.$route.query.from)
} else {
this.$router.push("/")
}
}
}
}
const Error = {
template: `<div class="error">404 页面不存在</div>` ,
created() {
},
}
const Layout = {
template: `<div class="Layout">
<h1>Hello App!</h1>
<p>
<router-link to="/">Go to Foo</router-link>
<router-link to="/info">Go to Bar</router-link>
</p>
<router-view></router-view>
</div>` ,
created() {
},
}
const routes = [
{ path: '*', component: Error},
{
path: '/',
name: 'layout',
component: Layout,
children: [
{ path: 'login', name: 'login', component: Login, meta: { requiresAuth: false, title: '登录' } },
{ path: 'car', name: 'car', component: Car, meta: { requiresAuth: true, title: '购物车' } },
{ path: '/', name: 'index', component: Index, meta: { requiresAuth: false, title: '首页' } },
{ path: 'info', name: 'info', component: Info, meta: { requiresAuth: false, title: '详情' } }
]
}
]
const router = new VueRouter({
linkExactActiveClass: "active",
routes
})
// 登录状态检查
router.beforeEach((to, from, next) => {
document.title = to.meta.title;
// 未登录
if (localStorage.getItem("token") == null) {
// 你访问的页面还需要登录
if (to.meta.requiresAuth) {
next({
name: 'login',
query: {
from: to.fullPath
}
})
} else {
next()
}
} else {
next()
}
})
const app = new Vue({
el: "#app",
router
})
// 对比原生js为什么需要 vue-router 这样的插件来实现页面跳转
//
</script>
</html>

View File

@@ -0,0 +1,79 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div class="app">
<h2>我是父组件</h2>
<hr>
<span>1 点击 进入详情 id</span>
<swiper :data="lunbo">
<template v-slot:default="{ item }">
<img @click="info(item)" :src="item.url" alt="">
</template>
</swiper>
<hr>
<span>2 点击 显示图片预览 url</span>
<swiper :data="lunbo">
<template v-slot:default="{ item }">
<span @click="showImg(item)">{{ item.id }}</span>
</template>
</swiper>
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
<script>
Vue.component('swiper', {
props: {
data: {
type: Array,
default: () => []
}
},
data() {
return {
}
},
template: `
<div class="header">
<ul>
<li v-for="item,index in data" :key="index">
<slot :item="item"></slot>
</li>
</ul>
</div>
`
});
let vm = new Vue({
el: ".app",
data: {
lunbo: [
{ id: 1, url: 'https://img.alicdn.com/imgextra/i2/O1CN01jH9w4F1sEDtCgpH3r_!!6000000005734-0-tps-846-472.jpg' },
{ id: 2, url: 'https://img.alicdn.com/imgextra/i4/O1CN01GOlEEW1zidUliI8O7_!!6000000006748-2-tps-846-472.png' },
{ id: 3, url: 'https://img.alicdn.com/imgextra/i4/O1CN01LHWdyp1yvAidcNMDR_!!6000000006640-0-tps-846-472.jpg' },
]
},
methods: {
info({ id, url }) {
console.log("进入详情: ", id);
},
showImg({ id, url }) {
console.log("显示大图: ", url);
}
}
})
</script>
</html>

View File

@@ -0,0 +1,113 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>tabs切换</title>
<style>
body,
ul,
li {
margin: 0;
padding: 0;
list-style: none;
}
.title {
display: flex;
}
.title li {
margin-right: 15px;
cursor: pointer;
}
.title .active {
color: red;
}
.content li {
display: none;
}
.content .active {
display: block !important;
}
</style>
</head>
<body>
<div class="app">
<ul class="title">
<li :class=" index == currentIndex ? 'active' : '' "
@click=" currentIndex = index"
v-for="item,index in tabs" :key="index">
{{ item.title }}
</li>
</ul>
<ul class="content">
<li v-for="item,index in tabs" :key="index"
:class=" index == currentIndex ? 'active' : '' ">
<p v-for="v,i in item.content">{{ v.text }}</p>
</li>
</ul>
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
<script>
new Vue({
el: '.app',
data: {
currentIndex: 0,
tabs: [
{
id: 1,
title: '社会',
content: [
{ text: '社会的内容1' },
{ text: '社会的内容2' },
{ text: '社会的内容3' }
]
},
{
id: 2,
title: '经济',
content: [
{ text: '经济 的内容1' },
{ text: '经济 的内容2' },
{ text: '经济 的内容3' },
{ text: '经济 的内容4' },
]
},
{
id: 3,
title: '体育',
content: [
{ text: '体育 的内容1' },
{ text: '体育 的内容2' }
]
},
{
id: 4,
title: '科技',
content: [
{ text: '科技 的内容1' },
{ text: '科技 的内容2' },
{ text: '科技 的内容3' },
]
}
]
},
methods: {
changeActive(index) {
this.currentIndex = index
}
}
})
</script>
</html>

View File

@@ -0,0 +1,117 @@
html css 写在html
也没有div + css
table + css(选择器)
js 发展
div + css
jquery 操作dom的
|
|
nodejs
|
|
过渡年代:前端 m数据v视图c控制器 年代
前端三大框架 m数据v视图 vm视图和模型 框架
spa (框架)单页web应用
操作虚拟dom diff 组件化开发
angular.js
react.js
vue.js
vue 1.x php laravel 作者
vue 2.x 进入国内(全球) vue-router 3.x
es5 语法的 js写的
|
|
typescript
|
|
vue 3.x(next) vue-router 4.x
vue.js 三套语法风格:
vue 1.x vue 2.x options api 选项式
{
data: {}
methods: {}
}
过渡vue2 支持 ts 语法的 插件包 (很多)
class api
vue3.x composition(function) api 组合式
基于 html 来用
基于 nodejs 来用
vue-router
hash
#地址名字
#/about
history
/about
$router 访问 vue-router 内置方法
$route 访问 vue-router 的地址信息
页面跳转
标签跳转 router-link
方法跳转 this.$router.xxx
参数传递:
query传参
http://www.baidu.com/index?id=1&page=2
params
http://www.baidu.com/index/1/2
注意:
params 传参一定不能用 path 进行跳转
导航守卫
全局守卫
全局前置守卫
全局后置钩子
路由独享的守卫
组件内的守卫
beforeRouteEnter
beforeRouteUpdate
beforeRouteLeave
vue
vue-cli 脚手架 (帮我做好了所有基本的事情和准备)
2.x
3.x
vue-cli 2 + vue 2
vue cli 3 + vue 3

View File

@@ -0,0 +1,173 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div class="app">
{{ message }}
<lb_header>
<template v-slot:one>
<h2>测试 one</h2>
</template>
<template v-slot:two>
<h2>测试 two</h2>
</template>
</lb_header>
<lb_footer v-demo="1" @send="getData"></lb_footer>
<h2>{{ tips | copyright }}</h2>
<h2>{{ message }}</h2>
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
<script>
// 组件
// 全局组件 Vue.component
// 局部组件
// 父 --> 子 props
// 子 --> 父 $emit 事件来回传数据
// 插槽 默认插槽
// 别名插槽
// 作用域插槽
// 可以把数据从子组件抛出去给父组件
// 同一个组件在不同地方使用,响应事件的处理方式不一样
// 状态过渡
// 混入 代码封装
// 自定义指令
// 过滤器
// 路由 地址
// vuecli2.x 3.x (不写项目)
// 封装脚手架
// vue 3.x vite Pinia ts 博客 状态管理 vuex
// linux部署(选配)
// 电商(ts)
// react
//
// uniapp flutter ( ts+js+java = dart )
// 小程序
var loadMore = {
data() {
return {
page: 1,
totalPage: 0
}
},
created() {
},
methods: {
load: function () {
console.log('hello from mixin!: ')
}
}
}
Vue.directive('demo', {
bind: function (el, binding, vnode) {
console.log("el: ", el);
console.log("binding: ", binding);
console.log("vnode: ", vnode);
}
})
// 定义局部组件
var footers = {
data() {
return {
text: '公共底部',
children: "我是footer子组件的数据"
}
},
mounted() {
this.$emit("send", this.children)
},
methods: {
// ddd() {
// this.$emit("send", this.children)
// }
},
template: `
<div class="footer">
<h2 >底部 {{ text }}</h2>
</div>
`
}
Vue.component('lb_header', {
// props: ['msg'],
mixins: [loadMore],
props: {
msg: {
type: String,
default: "默认值"
}
},
data() {
return {
text: 1
}
},
created() {
this.load()
},
template: `
<div class="header">
<h2>头部 {{ msg }}</h2>
<hr/>
<slot name="one"></slot>
<hr/>
<slot name="two"></slot>
</div>
`
});
let vm = new Vue({
el: ".app",
mixins: [loadMore],
data: {
message: '父组件',
tips: "我是数据"
},
created() {
this.load()
},
// 注册局部组件
components: {
'lb_footer': footers
},
methods: {
getData(res) {
console.log(res);
}
},
filters: {
copyright(value){
return value + ' --- 版权来自bmy'
}
}
})
</script>
</html>

View File

@@ -0,0 +1,37 @@
uniapp
混合app开发
原生app开发
android java kotlin
ios object-c swift
优点:体验更好,动画更流畅
缺点:代码维护难,成本高,更新难
|
|
webview 部分页面让前端写,然后 使用 webview 在app中显示页面
|
|
webview
webview(src="")
浏览器APP
浏览器内核
jq phonegap Ionic mui APICloud
前端三大框架uniapp(vue.js)mui react native flutter weex(vue) vuenative
flutter ui
dart