release (pm2)
pm2
1 | pm2 start [app] |
list all
1 | pm2 list |
[app] details
1 | pm2 show [app] |
ecosystem.json
1 | { |
deploy
1 | # pm2 deploy <configuration_file> <environment> setup |
我愿在这里做一辈子的前端 o(* ̄︶ ̄*)o
1 | pm2 start [app] |
1 | pm2 list |
1 | pm2 show [app] |
1 | { |
1 | # pm2 deploy <configuration_file> <environment> setup |
1 | sudo iptables -L |
1 | sudo iptables -F |
1 | # 关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放 |
1 | iptables -A INPUT -p tcp --dport 22 -j ACCEPT #ssh |
1 | su root |
1 | iptables-restore < /etc/iptables.up.rules |
1 | sudo service apache2 stop |
1 | sudo apt-get install nginx |
1 | upstream my_server { |
1 | cd /etc/nginx |
1 | sudo nginx -t |
1 | sudo nginx -s reload |
1 | mkdir .ssh |
1 | cat ~/.ssh/id_rsa.pub |
1 | cat ~/.ssh/id_rsa.pub | clip |
1 | ssh -T git@github.com |
1 | git clone 'git@myproject.git' |
1 | git status -s |
1 | git init |
1 | git reset -hard 'log.hash' |
1 | ssh-agent bash |
1 | sudo passwd root |
1 | su root |
1 | pwd |
1 | cd ~ |
1 | gpasswd -a copy sudo |
1 | su [username] |
1 | sudo apt-get install curl |
1 | npm -v |
1 | cnpm install -g pm2 |
伪元素(css3之前也叫伪类),就是假的元素,不是元素的元素,听起来拗口,其实说,它并不存在于DOM节点中,只是在CSS渲染层加入。在强调语义化的HTML5中,你尽量不要使用它展示一些有实际意义的内容。
那么问题来了(这句好熟悉-。-),它有什么实用场景呢?下面我介绍下我工作中使用到的地方
这大概是伪元素使用最广泛的地方了,创建BFC(块级格式化上下文)来清除浮动
1 | clearfix::after{ |
OK,完成,但是工作中我们会使用比较复杂一点的写法
1 | clearfix::before, /*加before是为了防止顶部空白的崩溃(两个盒子之间都有margin的值,会发生重叠)*/ |
有没有这样的场景,UI界面有个小小的东西,可能是按钮,它的样式大小固定,同时也又有相应的事件,而手指的宽度决定了用户不能精确的点击到,就会发生用户多次点击却得不到相应情况。
在不改变样式的情况下,我们利用伪元素before扩大它的可点击区域
1 | button { |
比如导航栏,在hover如果只是改变颜色,会有些单调,现在大部分网页会加些衬线什么的,这样的东西不需要正真的元素,伪元素就粉墨登场了
1 | nav-item:hover::after, |
这里就不贴代码了,可以去icomoon下载相应的图标直接引用。
koa作为下一代web应用框架,尤其是使用了ES7的async和await,更是把简洁渗入血脉。今天我们来看看koa的基本用法,开始之前请安装koa2,Koa2须使用 7.6 以上版本的Node
1 | node -v |
1 | const Koa = require('koa') |
访问 http://127.0.0.1:3000
可以看到 hello world
koa 可以靠ctx.request.url原生实现路由,如果依靠去手动处理路由,将会变得异常繁琐,我们不需要重复造轮子,github上有好多高质量插件,路由我们使用koa-router
1 | const route = require('koa-route') |
一个http请求访问web服务静态资源,如果还是用路由去处理,将会产生很多路由,可是,我们会发现访问静态资源套路都一样,得知资源名称,拿到资源。所以我们使用koa-static来处理静态资源。
1 | const path = require('path') |
koa的重要概念就是中间件,它是一个个函数,用来处在 HTTP Request 和 HTTP Response,app.use()用来加载它,每个中间件默认接受两个参数,第一个参数是 Context 对象,第二个参数是next函数。只要调用next函数,就可以把执行权转交给下一个中间件。
1 | app.use((ctx, next) => { |
关于中间件栈,阮一峰老师的教程非常经典,看下面
1 | const one = (ctx, next) => { |
1 | const one = (ctx, next) => { |
结论: 如果中间件内部没有调用next函数,那么执行权就不会传递下去
异步处理,是web开发中最重要的,同时koa2中的asnyc和await的用法,让异步处理和同步处理一样简单。
1 | const fs = require('fs') |
koa作为下一代web应用框架,尤其是使用了ES7的async和await,更是把简洁渗入血脉。在开始说koa之前,我们先讲讲koa的好搭档MongoDB。
1 | mkdir data |
此电脑 => 属性 => 高级系统设置 => 环境变量 => path
1 | C:\Program Files\MongoDB\Server\3.4\bin |
以管理员权限启动CMD
1 | mongod --dbpath "C:\Program Files\MongoDB\Server\3.4\data" --logpath "C:\Program Files\MongoDB\Server\3.4\log\mongo.log" --logappend --install --serviceName "MongoDB" |
搜索MongoDB服务,设置启动
1 | mongo |
1 | mongod.exe --remove --serviceName "MongoDB" |
1 | show dbs |
1 | use app |
1 | db.user.save({name: "chaoshuai"}) |
1 | db.user.update({"_id" : ObjectId("59d87fc36f962cd49948149c"},{$set:{"name": "xiaoshuai"}}) |
1 | db.user.remove({name: 'xiaoshuai'}) |
1 | db.mytable.drop(); |
1 | db.createUser({user: 'copy',pwd: '123', roles:[{role:'dbOwner',db:'myblog'}]}) |
1 | const db = 'mongodb://localhost/app' |
1 | const mongoose = require('mongoose') |
Schema Types内置类型如下:
String
Number
Boolean | Bool
Array
Buffer
Date
ObjectId | Oid
Mixed
1 | const userModel = mongoose.model('User',UserSchema) |
1 | const mongoose = require('mongoose') |
百度 ‘CSS3实现图片闪光划过效果’,比较好的Blog是也讲清楚了实现原理,但都是通过添加一个标签来实现渐变,让他划过图片。
我觉得,使用css的伪类::before,实现更好。
不用添加无意义标签,代码更简洁。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS3闪光特效</title>
</head>
<style>
.project-item{
width: 262px;
height: 190px;
overflow: hidden;
margin: 0 auto;
box-sizing: border-box;
border-radius: 5px;
position: relative;
background-color: #70c3ff;
}
.project-item::before{
content: '';
position: absolute;
top: 0;
left: -262px;
width: 100%;
height: 100%;
background-image: -moz-linear-gradient(0deg,rgba(255,255,255,0),rgba(255,255,255,0.5),rgba(255,255,255,0));
background-image: -webkit-linear-gradient(0deg,rgba(255,255,255,0),rgba(255,255,255,0.5),rgba(255,255,255,0));
transform: skewx(-25deg);
-o-transform: skewx(-25deg);
-moz-transform: skewx(-25deg);
-webkit-transform: skewx(-25deg);
}
.project-item:hover::before{
left: 262px;
-moz-transition:0.3s ease;
-o-transition:0.3s ease;
-webkit-transition:0.3s ease;
transition:0.3s ease;
}
</style>
<body>
<div class="project-item">
</div>
</body>
</html>
overflow: hidden;
position: relative;
overflow: 让闪光层只在这个元素有效,不要污染到其他元素
relative: 让闪光层相对他的定位
content: '';
position: absolute;
top: 0;
left: -262px;
width: 100%;
height: 100%;
left : 闪光层的位移,负的宽度
absolute: 闪光层大小和父元素一样,绝对定位
.project-item:hover::before{
// 效果
}
上面的意思是,.project-item类的元素添hover时候,它的before伪类要行进的效果
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS3闪光特效</title>
</head>
<style>
.project-item{
width: 262px;
height: 190px;
overflow: hidden;
margin: 0 auto;
box-sizing: border-box;
border-radius: 5px;
position: relative;
background-color: #70c3ff;
}
.project-item::before{
content: '';
position: absolute;
top: 0;
left: -262px;
width: 100%;
height: 100%;
background-image: -moz-linear-gradient(0deg,rgba(255,255,255,0),rgba(255,255,255,0.5),rgba(255,255,255,0));
background-image: -webkit-linear-gradient(0deg,rgba(255,255,255,0),rgba(255,255,255,0.5),rgba(255,255,255,0));
transform: skewx(-25deg);
-o-transform: skewx(-25deg);
-moz-transform: skewx(-25deg);
-webkit-transform: skewx(-25deg);
}
.project-item:hover::before{
left: 262px;
-moz-transition:0.3s ease;
-o-transition:0.3s ease;
-webkit-transition:0.3s ease;
transition:0.3s ease;
}
.cs-item:hover {
transform: translateY(-6px);
-webkit-transform: translateY(-6px);
-moz-transform: translateY(-6px);
box-shadow: 0 26px 40px -24px rgba(0, 36, 100, .5);
-webkit-box-shadow: 0 26px 40px -24px rgba(0, 36, 100, .5);
-moz-box-shadow: 0 26px 40px -24px rgba(0, 36, 100, .5);
-moz-transition:0.5s ease;
-o-transition:0.5s ease;
-webkit-transition:0.5s ease;
transition:0.5s ease;
}
</style>
<body>
<div class="project-item cs-item">
</div>
</body>
</html>