<?xml version="1.0" encoding="utf-8"?>
<search>
  <entry>
    <title>Awesome Swiper 中文文档</title>
    <url>/posts/59c71c4/</url>
    <content><![CDATA[Github仓库地址：https://github.com/cycjimmy/awesome-swiper


.badge-wrapper a {
  display: inline-block;
  margin: 0;
  border-bottom: none;
}
.badge-wrapper img {
  display: inline-block;
  margin: 0 5px 0 0;
}














awesome-swiper 已经迁移到 @cycjimmy&#x2F;awesome-swiper
awesome-swiper 基于 swiper 5+. (Releases | Demo)

English | 中文

安装


# via npm$ npm install @cycjimmy/awesome-swiper --save# or via yarn$ yarn add @cycjimmy/awesome-swiper



使用Awesome Swiper 基于 Swiper 5+. 首先将 swiper 加入你的工程
import Swiper from &#x27;swiper&#x27;;import AwesomeSwiper from &#x27;@cycjimmy/awesome-swiper&#x27;;// 或者const Swiper = require(&#x27;swiper&#x27;);const AwesomeSwiper = require(&#x27;@cycjimmy/awesome-swiper&#x27;);

const awesomeSwiper = new AwesomeSwiper([SwiperModule]).init(context [, ...config] [, ...overlayConfig]);// 如果需要缩略图const awesomeSwiper = new AwesomeSwiper([SwiperModule])                        .init(context [, ...config] [, ...overlayConfig])                        .addThumbs(thumbsContext [, ...thumbsConfig] [, ...thumbsExtraConfig]);

new AwesomeSwiper([SwiperModule]): 新建实例
参数:
SwiperModule: [Object] 可设置自定义的 swiper 构造函数. 注意确保swiper版本为5以上


返回 awesomeSwiper 实例对象

awesomeSwiper 实例方法:init(context [, ...config] [, ...overlayConfig]): 初始化主要swiper实例
参数:
context: [String | Element] swiper的包裹层. 该包裹层的宽高大小必须提前设定.
config: [Object]
speed: [Number] 设置slide切换速度(单位:毫秒). 默认值为 300.
loop: [Boolean] 设为 true 来允许循环播放. 默认值为 false.
autoplay: [Number] 设置自动播放延迟的毫秒数. 0 表示关闭自动播放. 默认值为 0.
direction: [String] 设置方向. 可选项: &#39;horizontal&#39; 和 &#39;vertical&#39;. 默认为 &#39;horizontal&#39;
themeColor: [String] 设置swiper实例的主题颜色（可使用颜色名称、十六进制值等）. 默认为蓝色.
spaceBetween: [Number] 每个slide之前的距离, 单位为px. 默认值为 0.
slidesPerView: [Number | ‘auto’] 视框中能同时看到slide的数量. 默认值为 1.
mousewheel: [Boolean] 设为 true 来允许通过鼠标滚轮控制. 默认值为 false.
autoFixFullImg: [Boolean] 设置 true 来自动适应满图片. 默认值为 false. 提示: 由于对性能有影响, 非必要情况请勿设置.
autoHeight: [Boolean] 设置 true 时，wrapper和container会随着当前slide的高度而发生变化. 默认值为 false.
pagination: [Object] 设置分页器. 如果你不想要分页器, 将其设为 null.
color: [String] 设置分页器的颜色（可使用颜色名称、十六进制值等）. 默认为蓝色.
dynamicBullets: [Boolean] 动态分页器. 默认值为 false. 查看Swiper Pagination
style: [Object] 自定义分页器样式. 建议再此只对位置样式进行调整.


navigation: [Object] 设置导航按钮. 如果你不想要导航按钮, 将其设为 null.
color: [String] 设置导航按钮的颜色（可使用颜色名称、十六进制值等）. 默认为蓝色.
size: [String | Number] 设置导航按钮的尺寸
styles: [Object] 自定义样式
prev [Object] 向前按钮的自定义样式.
next [Object] 向后按钮的自定义样式.


custom: [Object] 设置自定义的导航按钮元素. 默认值为 null.
prevEl: [String | Element] 自定义向前按钮元素.
nextEl: [String | Element] 自定义向后按钮元素.






overlayConfig: [Object] 使用自定义的 swiper api 设置来覆盖.


返回 awesomeSwiper 实例对象

addThumbs(thumbsContext [, ...thumbsConfig] [, ...thumbsExtraConfig]): 添加缩略图swiper实例
参数:
thumbsContext: [String | Element] 缩略图的包裹层. 该包裹层的宽高大小必须提前设定.
thumbsConfig: [Object] 可参照 swiper api 进行设置
direction: [String] 设置方向. 可选项: &#39;horizontal&#39; 和 &#39;vertical&#39;.
spaceBetween: [Number] 每个slide之前的距离, 单位为px. 默认值为 10.
slidesPerView: [Number | ‘auto’] 视框中能同时看到slide的数量. 默认值为 &#39;auto&#39;.


thumbsExtraConfig: [Object] 缩略图的额外配置项.
mouseOverMode: [Boolean] 设置 true 来使用mouseover模式. 默认值为 false.
autoFixFullImg: [Boolean] 设置 true 来自动适应满图片. 默认值为 false. 提示: 由于对性能有影响, 非必要情况请勿设置.




返回 awesomeSwiper 实例对象

setInitialSlide(initialSlide): 设定初始slide的索引
参数:
initialSlide: [Number] 初始slide的索引


返回 awesomeSwiper 实例对象

on(event, handler): 添加事件处理器
同swiper.on(event, handler)
返回 awesomeSwiper 实例对象

off(event, handler): 移除事件处理器
同swiper.off(event, handler)
返回 awesomeSwiper 实例对象

AwesomeSwiper中新增的css类
.swiper-full-img: 满照片容器.
.swiper-full-bg: 满背景容器.
.swiper-explain: 解释说明文字容器.
.active-thumb: 正处在激活状态的缩略图.

快速体验（在浏览器中使用）&lt;link href=&quot;swiper.min.css&quot; rel=&quot;stylesheet&quot;&gt;&lt;div id=&quot;basic&quot; class=&quot;swiper swiper-container&quot;&gt;  &lt;div class=&quot;swiper-wrapper&quot;&gt;    &lt;div class=&quot;swiper-slide&quot;&gt;slide1&lt;/div&gt;    ...  &lt;/div&gt;&lt;/div&gt;&lt;script src=&quot;swiper.min.js&quot;&gt;&lt;/script&gt;&lt;script src=&quot;awesome-swiper.umd.min.js&quot;&gt;&lt;/script&gt;&lt;script&gt;  new AwesomeSwiper().init(&#x27;#basic&#x27;);&lt;/script&gt;

或者使用独立版本:
&lt;div id=&quot;basic&quot; class=&quot;swiper swiper-container&quot;&gt;  ...&lt;/div&gt;&lt;script src=&quot;awesome-swiper.standalone.umd.min.js&quot;&gt;&lt;/script&gt;&lt;script&gt;  new AwesomeSwiper().init(&#x27;#basic&#x27;);&lt;/script&gt;

CDN&lt;script src=&quot;https://unpkg.com/npm/@cycjimmy/awesome-swiper@3/dist/awesome-swiper.umd.min.js&quot;&gt;&lt;/script&gt;// 独立版本&lt;script src=&quot;https://unpkg.com/npm/@cycjimmy/awesome-swiper@3/dist/awesome-swiper.standalone.umd.min.js&quot;&gt;&lt;/script&gt;

兼容性
chrome &gt;&#x3D; 49
safari &gt;&#x3D; 11
firefox &gt;&#x3D; 31
ios &gt;&#x3D; 11
android &gt;&#x3D; 7
Samsung &gt;&#x3D; 5

注意: 不支持IE，如需兼容IE，请退回到awesome-swiper

]]></content>
      <categories>
        <category>技术</category>
        <category>文档</category>
      </categories>
      <tags>
        <tag>swiper</tag>
      </tags>
  </entry>
  <entry>
    <title>Git 设置代理以解决 Github 访问缓慢的问题</title>
    <url>/posts/e3189183/</url>
    <content><![CDATA[说明: http或socks5代理自备
配置代理# http代理$ git config --global http.https://github.com.proxy http://127.0.0.1:1080# socks5代理$ git config --global http.https://github.com.proxy socks5://127.0.0.1:1080

取消代理(还原)$ git config --global --unset http.https://github.com.proxy
]]></content>
      <categories>
        <category>技术</category>
        <category>proxy</category>
      </categories>
      <tags>
        <tag>git</tag>
        <tag>github</tag>
        <tag>proxy</tag>
      </tags>
  </entry>
  <entry>
    <title>H5 视觉设计尺寸说明</title>
    <url>/posts/21128040/</url>
    <content><![CDATA[
以手机微信浏览器作为H5主容器进行视觉设计




设计稿总尺寸(或画布尺寸): 750 x 1500
用于兼容不同手机屏幕边缘区域，确保不会露白
上下边缘各有 200 高度为背景填充区域

核心区域为 750 x 1100
核心区域里的内容确保在所有手机屏幕上完整显示
所有核心画面、交互按钮、文字务必在此区域中

最佳展示区域 750 x 1206
目前iphone6&#x2F;7&#x2F;8仍然是用户量最大的机型，设计时应当以该尺寸作为最佳的显示尺寸

其他
视觉设计软件: PS, AI, …
单位: px
PPI: 72
色彩模式: RGB(sRGB)
字体大小不小于24px

]]></content>
      <categories>
        <category>设计</category>
        <category>UI</category>
      </categories>
      <tags>
        <tag>UI</tag>
        <tag>h5</tag>
      </tags>
  </entry>
  <entry>
    <title>LESS 学习笔记</title>
    <url>/posts/b29d4409/</url>
    <content><![CDATA[
Less 是一门 CSS 预处理语言，它扩展了 CSS 语言，增加了变量、Mixin、函数等特性，使 CSS 更易维护和扩展。Less 可以运行在 Node 或浏览器端。

编译工具
Koala
node.js
浏览器端编译

LESS语法申明编码格式头部仍然不能忘记申明编码格式@charset &quot;utf-8&quot;;



注释/*这种形式会被编译保留*///这种形式不会被编译保留

变量变量以@[变量名]:[value]的形式申明// 申明变量@fontColor: red;// 使用变量.word &#123;  color: @fontColor;  &#125;
变量也有作用域，局部变量可写在混合模式的 &#123; &#125; 中间
混合Mixin不带参数的混合：和普通class写法类似不带参数的混合变量也可以加括号，此时编译的时候不会生成该class的样式
.border &#123;  border: 5px solid green;&#125;.box &#123;  width: 100px;  height: 100px;	  .border;//不需要加括号&#125;

带参数的混合.border(@border_width) &#123;  border: @border_width solid green;&#125;.box &#123;  width: 100px;  height: 100px;	  .border(30px);&#125;

带参数的混合还可设定默认值.border(@border_width:10px) &#123;  border: @border_width solid yellow;&#125;.box &#123;  width: 100px;  height: 100px;	  .border(30px);&#125;.box2 &#123;  width: 200px;  height: 200px;	  .border();//默认用10px&#125;

匹配模式相当于JS中的 if，满足条件后才能匹配，例如下面代码：
用LESS画一个三角形.triangle(top, @width: 5px, @color: red ) &#123;  // 关键词为top时用这个样式（三角朝上）  border-width: @width;  border-color: transparent transparent @color transparent;  border-style: dashed dashed solid dashed;&#125;.triangle(bottom, @width: 5px, @color: red ) &#123;  // 关键词为bottom时用这个样式（三角朝下）  border-width: @width;  border-color: @color transparent transparent transparent;  border-style: solid dashed dashed dashed;&#125;.triangle(left, @width: 5px, @color: red ) &#123;  // 关键词为left时用这个样式（三角朝左）  border-width: @width;  border-color: transparent @color transparent transparent;  border-style: dashed solid dashed dashed;&#125;.triangle(right, @width: 5px, @color: red ) &#123;  // 关键词为right时用这个样式（三角朝右）  border-width: @width;  border-color: transparent transparent transparent @color;  border-style: dashed dashed dashed solid;&#125;.triangle(@_, @width: 5px, @color: red ) &#123;  // 公用样式，参数名为&quot;@_&quot;(固定)  // 且原先的变量&quot;@width&quot; &quot;@color&quot;必须带上  width: 0;  height: 0;  overflow: hidden;&#125;.down-icon &#123;  .triangle(bottom,10px);&#125;

运算任何数字、颜色或者变量都可以参与运算（+ - * &#x2F;），运算应该被包裹在括号中
@font-big: 20px;.word &#123;  font-size: @font-big + 2;  //只要一个带单位就行&#125;

嵌套规则
一般嵌套
两种特殊嵌套
&amp;对伪类使用: hover, focus等
&amp;对链接的使用: 例如 &amp;-item



另外，嵌套最好不要超过三层
&lt;ul class=&quot;list&quot;&gt;  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;条目1&lt;/a&gt;&lt;span&gt;xxxx-xx-xx&lt;span&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;条目2&lt;/a&gt;&lt;span&gt;xxxx-xx-xx&lt;span&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;条目3&lt;/a&gt;&lt;span&gt;xxxx-xx-xx&lt;span&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;条目4&lt;/a&gt;&lt;span&gt;xxxx-xx-xx&lt;span&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;条目4&lt;/a&gt;&lt;span&gt;xxxx-xx-xx&lt;span&gt;&lt;/li&gt;&lt;/ul&gt;
.list &#123;  width: 600px;  margin: 30px auto;  padding: 0;  list-style: none;	  li &#123;    height: 30px;    line-height: 30px;    margin-bottom: 5px;  &#125;    a &#123;    float: left;  	    // 和sass一样，&amp;代表他的上一层选择器    &amp;:hover &#123;      color:red;    &#125;  &#125;    span &#123;    float: left;  &#125;&#125;

@arguments变量@arguments包含了所有传递进来的参数如果你不想单独处理每一个参数的话就可以像下面这样写：
.border_arg(@width: 30px, @color: red, @style: solid) &#123;  border: @arguments;&#125;.box &#123;  width: 200px;  height: 100px;	  .border_arg(40px);&#125;

避免编译有时候我们可能需要

输出一些不正确的CSS语法
使用一些LESS不认识的专有语法

我们可以在字符串前加上一个~&#39;[code]&#39;，例如：
.box &#123;  width: ~&#x27;calc(300px-30px)&#x27;;&#125;

!important关键字
会为该混合样式中的所有样式带上!important关键字
一般在调试的时候使用

导入导入一个LESS文件//导入一个reset.less，可以不加扩展名@import &quot;reset&quot;;

导入一个CSS文件//导入一个reset.css@import(less) &quot;reset.css&quot;;
]]></content>
      <categories>
        <category>技术</category>
        <category>css</category>
      </categories>
      <tags>
        <tag>less</tag>
      </tags>
  </entry>
  <entry>
    <title>MacOS 生成图标文件</title>
    <url>/posts/5acdfbd/</url>
    <content><![CDATA[本文所在环境为 MacOS
事先准备好各个尺寸的png图标图片，放入将要操作的目录
生成ico图标(windows 与 linux 用)安装 icoutils$ brew install icoutils

执行命令生成ico图标# 指定模式$ icotool -c icon32.png -o icon32.ico$ icotool -c icon256.png -o icon256.ico$ icotool -c icon16.png icon32.png icon64.png icon128.png icon256.png icon512.png -o icon.ico# 批量模式$ mkdir icons.iconset # 创建一个临时目录存放不同大小的图片$ icotool -c ./icons.iconset/*.png -o icon.ico

生成icns图标(MacOS 用)准备一个 1024 x 1024 的 png 图片执行以下命令行，创建一个临时目录存放不同大小的图片$ mkdir icons.iconset

把原图片转为不同大小的图片(放入上面的临时目录)sips -z 16 16     icon1024.png --out icons.iconset/icon_16x16.pngsips -z 32 32     icon1024.png --out icons.iconset/icon_16x16@2x.pngsips -z 32 32     icon1024.png --out icons.iconset/icon_32x32.pngsips -z 64 64     icon1024.png --out icons.iconset/icon_32x32@2x.pngsips -z 128 128   icon1024.png --out icons.iconset/icon_128x128.pngsips -z 256 256   icon1024.png --out icons.iconset/icon_128x128@2x.pngsips -z 256 256   icon1024.png --out icons.iconset/icon_256x256.pngsips -z 512 512   icon1024.png --out icons.iconset/icon_256x256@2x.pngsips -z 512 512   icon1024.png --out icons.iconset/icon_512x512.pngsips -z 1024 1024 icon1024.png --out icons.iconset/icon_512x512@2x.png

执行命令生成icns图标$ iconutil -c icns icons.iconset -o icon.icns
]]></content>
      <categories>
        <category>技术</category>
      </categories>
      <tags>
        <tag>图标</tag>
        <tag>icon</tag>
        <tag>icns</tag>
      </tags>
  </entry>
  <entry>
    <title>记一次 CentOS 从零开始安装 NodeJs</title>
    <url>/posts/196db4f6/</url>
    <content><![CDATA[这几天用虚拟机搭了个CentOS7研(wan)究(shua)，准备再装个Node环境，作为centOS的纯新手就网上谷歌了篇CentOS安装node的博客跟着做啦，基本挺顺利的，当中有几个小坑（其实根本不算是坑），后面简单说一说…
第1步: 下载node这虚拟机就是当实验用的，我选择了最新特性版本8.4.0
[cyc@localhost download]$ wget https://nodejs.org/dist/v8.4.0/node-v8.4.0.tar.gz

键入上边代码回车，发现报错了，wget未找到，原来之前图方便装的centOS是最小版的，里面并不包含wget，好吧，安装之…
[cyc@localhost download]$ yum -y install wget

安装成功后，继续按照上述代码就可以顺利下载node了。


第2步: 解压包[cyc@localhost download]$ tar -xvf node-v8.4.0.tar.gz

第3步: 进入源码目录，执行配置脚本configure[cyc@localhost download]$ cd ./node-v8.4.0[cyc@localhost node-v8.4.0]$ ./configure

咦，又报错了，这次是No acceptable C compiler found!，谷歌之，好吧原来还是老问题，最小版安装的centOS不包含开发者工具，知道问题所在就好解决了，装呗
[cyc@localhost node-v8.4.0]$ yum groupinstall &quot;Development tools&quot;

安装完成后，再执行配置文件就没有报错了。
第4步: 执行编译代码[cyc@localhost node-v8.4.0]$ make
这一步感觉时间很久，导致我等了一会后面不想等了，直接提前去吃了午饭，吃完午饭回来看一下好了
第5步: 执行安装[cyc@localhost node-v8.4.0]$ make install
最后一步了，完成后，node安装成功，让我们来验证一下
[cyc@localhost node-v8.4.0]$ node -vv8.4.0[cyc@localhost node-v8.4.0]$ npm -v5.3.0
完美！接下来就可以更加愉快研(wan)究(shua)了
]]></content>
      <categories>
        <category>技术</category>
        <category>linux</category>
      </categories>
      <tags>
        <tag>node</tag>
        <tag>CentOS</tag>
        <tag>linux</tag>
      </tags>
  </entry>
  <entry>
    <title>CentOS 升级 Git</title>
    <url>/posts/22c72bce/</url>
    <content><![CDATA[[cyc@localhost download]$ yum upgrade git
上面的常规方法显示无更新，打印一下git版本号发现是1.8.3.1，不对啊，当前git官网都到2.14.1了，感觉到这一定是一个坑，果断谷歌，果然，原因是yum仓库里的Git版本更新不及时，也找到了不少手动更新方法，那么就自己进行手动更新喽。
卸载低版本的Git[cyc@localhost download]$ yum remove git



下载最新版的git包[cyc@localhost download]$ wget https://github.com/git/git/archive/v2.14.1.tar.gz

解压到app目录(如果没有目录先创建)[cyc@localhost download]$ tar -xzvf v2.14.1.tar.gz -C ~/app/

进入解压后的目录，安装Git[cyc@localhost app]$ cd git-2.14.1/[cyc@localhost git-2.14.1]$ make prefix=/usr/local/git all[cyc@localhost git-2.14.1]$ make prefix=/usr/local/git install
启动编译的时候报错了，原来是编译需要的依赖库未安装
[cyc@localhost git-2.14.1]$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel[cyc@localhost git-2.14.1]$ yum install  gcc perl-ExtUtils-MakeMaker
安装完依赖包后重新编译OK了
添加git到环境变量[cyc@localhost git-2.14.1]$ echo &quot;export PATH=$PATH:/usr/local/git/bin&quot; &gt;&gt; /etc/bashrc[cyc@localhost git-2.14.1]$ source /etc/bashrc
安装OK了，验证一下
[cyc@localhost git-2.14.1]$ git --versiongit version 2.14.1

收工！
]]></content>
      <categories>
        <category>技术</category>
        <category>linux</category>
      </categories>
      <tags>
        <tag>git</tag>
        <tag>CentOS</tag>
        <tag>linux</tag>
      </tags>
  </entry>
  <entry>
    <title>记一次在 Heroku 上部署 Node 应用</title>
    <url>/posts/5c093b43/</url>
    <content><![CDATA[第一次部署Heroku应用，做一下记录和总结。

Heroku是一个云平台服务（PaaS），使开发人员能够在云中构建，运行和运行应用程序。

建立Heroku账号并下载安装https://www.heroku.com
克隆或初始化自己的项目主要是要建立好package.json文件以及写好里面的依赖包
在项目根目录建立Procfile文件web: node index.js
Procfile是用来启动项目的，具体可以去看一下https://devcenter.heroku.com/articles/procfile


如果脚本中有监听端口要做相应修改app.listen(process.env.PORT || 5000);

登陆heroku$ heroku login

建立heroku应用(仓库)$ heroku create
建立成功后，会随机配一个应用名给你（后面在网站上能改）
部署应用到heroku$ git init$ heroku git:remote -a [my-app-name]$ git add .$ git commit -m &#x27;first deploy&#x27;$ git push heroku master
推送到heroku后，heroku会自动安装依赖文件，运行项目构建。
可以通过 $ heroku open 查看部署好的项目。
]]></content>
      <categories>
        <category>技术</category>
        <category>node</category>
      </categories>
      <tags>
        <tag>node</tag>
        <tag>heroku</tag>
      </tags>
  </entry>
  <entry>
    <title>Git 常用自用命令总结</title>
    <url>/posts/a14386f1/</url>
    <content><![CDATA[个人常用Git命令总结，持续更新…
创建版本库$ git clone &lt;url&gt;        # 克隆远程版本库$ git init               # 初始化本地版本库

修改和提交$ git status                           # 查看状态$ git diff                             # 查看变更内容$ git add .                            # 跟踪所有改动过的文件$ git add &lt;file&gt;                       # 跟踪指定文件$ git mv &lt;old&gt; &lt;new&gt;                   # 文件改名$ git rm &lt;file&gt;                        # 删除文件$ git rm --cached &lt;file&gt;               # 停止跟踪文件但不删除$ git commit -m &quot;commit message&quot;       # 提交所有更新过的文件$ git commit --amend                   # 修改最后一次提交



查看提交历史$ git log                 # 查看提交历史$ git log -p &lt;file&gt;       # 查看指定文件的提交历史$ git blame &lt;file&gt;        # 以列表方式查看指定文件的提交历史

撤销$ git reset --hard HEAD         # 撤销工作目录中所有未提交文件的修改内容                                # --hard要慎用$ git reset HEAD^               # 回退所有内容到上一个版本$ git reset HEAD^ &lt;file&gt;        # 回退指定文件的版本到上一个版本$ git reset –soft HEAD~3        # 向前回退3个版本$ git reset –hard origin/master # 将本地的状态回退到和远程的一样$ git reset &lt;commit&gt;            # 回退到某个版本$ git commit --amend            # 修改最后一次提交。                                # 用于修改上一次的提交信息，或漏提交文件等情况。$ git checkout -- &lt;file&gt;$ git checkout HEAD &lt;file&gt;      # 撤销指定的未提交文件的的修改内容$ git revert &lt;commit&gt;           # 撤销指定的提交$ git revert HEAD               # 回退到上一次提交的状态                                # 按照某一次的commit完全反向的进行一次commit                                # 代码回滚到上个版本，并提交git

分支与标签$ git branch                                      # 显示所有本地分支$ git checkout &lt;branch/tag&gt;                       # 切换到指定分支或标签$ git branch &lt;new-branch&gt;                         # 创建新分支$ git branch -d &lt;branch&gt;                          # 删除本地分支$ git branch (-m|-M) &lt;old branch&gt; &lt;new branch&gt;    # 删除本地分支                                                  # -M: 强制重命名                                                  # 如重命名远程分支:                                                  # 删除远程待重命名分支，重新push本地新分支$ git checkout -b &lt;new-branch&gt; &lt;existing-branch&gt;  # 基于已有分支，创建新分支$ git tag                                         # 列出所有本地标签$ git tag &lt;tag-name&gt;                              # 基于最新提交创建标签$ git tag -d &lt;tag-name&gt;                           # 删除标签

release 基本流程$ git status                           # 查看状态$ git tag &lt;tag-name&gt;                   # 基于最新提交创建标签$ git push --tags                      # 上传所有标签$ release                              # 发行版本(需事先安装release包 https://github.com/zeit/release)

合并$ git merge &lt;branch&gt;          # 合并指定分支到当前分支$ git rebase &lt;branch&gt;         # 衍合指定分支到当前分支

远程操作$ git remote -v                            # 查看远程版本库信息$ git remote show &lt;remote&gt;                 # 查看指定远程版本库信息$ git remote add &lt;remote&gt; &lt;url&gt;            # 添加远程版本库$ git fetch &lt;remote&gt;                       # 从远程库获取代码$ git pull &lt;remote&gt; &lt;branch&gt;               # 下载代码及快速合并$ git push &lt;remote&gt; &lt;branch&gt;               # 上传代码及快速合并$ git push &lt;remote&gt; :&lt;branch/tag-name&gt;     # 删除远程分支或标签$ git push --tags                          # 上传所有标签
]]></content>
      <categories>
        <category>技术</category>
        <category>git</category>
      </categories>
      <tags>
        <tag>git</tag>
      </tags>
  </entry>
  <entry>
    <title>Linux 常用命令总结(笔记)</title>
    <url>/posts/1fe3367f/</url>
    <content><![CDATA[一些基础Linux命令学习笔记
系统常用命令命令基本格式命令 [选项] [参数]
ls [选项] [文件或目录]
选项
-a 所有文件（包括隐藏）
-l 详细信息
-d 目录属性
-h 人性化显示文件大小
-i 显示innode




ll 是 ls -l 的别名



文件处理命令目录或文件处理命令
建立目录 mkdir -p [目录名]
切换目录 cd [目录]
查询所在目录位置 pwd
删除空目录(一般不用) rmdir [目录名]
删除文件或目录 rm [选项] [文件或目录]
选项
-r 删除目录
-f 强制




复制文件或目录 cp [选项] [源文件或目录] [目标目录]
选项
-r 复制目录
-p 连带文件属性复制
-d 若源文件是链接文件，则复制链接属性
-a 相当于-pdr




剪切或改密命令 mv [原文件或目录] [目标目录]

常用类型目录
/ 根目录
/bin 命令保存目录
/boot 启动目录
/dev 设备文件
/etc 配置文件
/home 普通用户家目录
/lib 系统库
/mnt 挂载目录
/root 超级用户的家目录
/tmp 临时目录
/sbin 命令保存目录（超级用户）
/proc 内存的过载点
/sys 内存的过载点
/usr 系统软件资源
/var 系统相关文档内容

链接命令
生成链接文件 ln [选项] [目标文件]
选项
-s 创建软链接


注意：不在同一目录创建软链接时，目标文件需要写绝对路径



硬链接特征
拥有相同的i节点和存储block块
可通过i节点识别
不能跨分区
不能针对目录是用

软链接特征
类似windows快捷方式
拥有自己的i节点和block块，但数据块种只保存原文件的文件名和i节点好，并没有时机的文件数据
lrwxrwxrwx
修改任意文件，另一个都改变
删除原文件，软链接不能使用

文件搜索命令文件名搜索命令locate
locate 文件名
在后台数据库种进行搜索，数据库大概每天自动更新一次，也可以手动用 updatedb 更新
locate的配置文件 &#x2F;etc&#x2F;updatedb.conf
PRUNE_BIND_MOUNTS 是否开启搜索限制
PRUNEFS 搜索时，不搜索的文件系统
PRUNENAMES 搜索时，不搜索的文件类型
PRUNEPATHS 搜索时，不搜索的路径





命令搜索命令whereis&#x2F;which
whereis 命令名
搜索命令所在路径及帮助文档所在地址
选项：
-b 只查找可执行文件
-m 只查找帮助文件




which 命令名
搜索命令所在的路径及别名



文件搜索命令find
find [搜索范围] [搜索条件]
搜索范围
搜索条件：选项+条件
选项：
搜索选项：
-name 按照文件名搜索
-iname 不区分大小写
-user 按照所有者搜索
-nouser 按照没有所有者的文件
-mtime 按照修改文件内容的时间搜索
-atime 按照文件访问时间搜索
-ctime 按照改变文件属性时间搜索
-size 按照文件大小查找
-inum 按照i节点查找


其他：
-a 逻辑与 and
-o 逻辑或 or
-exec 命令 &#123;&#125; \; 对搜索结果执行操作









字符串搜索命令grep
grep [选项] 字符串 文件名 
在文件当中匹配符合条件的字符串
选项：
-i 忽略大小写
-v 排除指定字符串





find命令与grep命令的区别
find命令：在系统中搜索符合条件的文件，使用通配符，完全匹配
grep命令：在文件中搜索符合条件的字符串，使用正则表达式，包含匹配

帮助命令
man 命令
获取指定命令的帮助
man的级别
1 查看命令的帮助
2 查看可被内核调用的函数的帮助
3 查看函数和函数库的帮助
4 查看特殊文件的帮助（主要是&#x2F;dev目录下的文件）
5 查看配置文件的帮助
6 查看游戏的帮助
7 查看其他杂项的帮助
8 查看系统管理员可用的帮助
9 查看和内核相关文件的帮助


man -级别 命令
查看该级别命令的帮助


man -f 命令
查看命令拥有哪个级别的帮助
相当于 whatis 命令


man -k 命令
查看和命令相关的所有帮助
相当于 apropos 命令




其他帮助命令
选项帮助
命令 --help 获取命令选项的帮助


shell内部命令帮助
help shell内部命令 获取shell内部命令的帮助
可以用 whereis 命令 确定是否是shell内部命令


详细命令帮助info
info 命令
-回车 进入子帮助页面（带有*号标记）
-u 进入上层页面
-n 进入下一个帮助小节
-p 进入上一个帮助小节
-q 退出







压缩与解压缩命令
常用压缩格式
.zip
.gz
.bz2
.tar.gz
.tar.bz2


.zip格式
zip 压缩文件名 源文件 压缩文件
zip -r 压缩文件名 源目录 压缩目录
unzip 压缩文件 解压缩


.gz格式
gzip 源文件 压缩为.gz格式，源文件会消失
gzip -c 源文件 &gt; 压缩文件 压缩为.gz格式，源文件保留
gzip -r 目录 压缩目录下所有的子文件，但是不能压缩目录
gzip -d 压缩文件 解压缩
gunzip 压缩文件 解压缩


.bz2格式
bzip2 源文件 压缩为.bz2格式，不保留源文件
bzip2 -k 源文件 压缩为.bz2格式，保留源文件
bzip2命令不能压缩目录
bzip2 -d 压缩文件 解压缩，-k保留压缩文件
bunzip2 压缩文件 解压缩，-k保留压缩文件


.tar.gz格式和.tar.bz2格式
tar命令
tar -cvf 打包文件名 源文件 打包命令
选项
-c 打包
-v 显示过程
-f 指定打包后的文件名




tar -xvf 打包文件名 解打包命令
选项
-x 解打包






打包压缩
tar -zcvf 压缩包名.tar.gz 源文件 
选项
-z 压缩为.tar.gz格式




tar -jcvf 压缩包名.tar.gz 源文件 
选项
-j 压缩为.tar.bz2格式






解压缩打包文件
tar -zxvf 压缩包名.tar.gz 后面可以跟 -C 指定解压缩位置
选项
-zx 解压缩.tar.gz格式




tar -jxvf 压缩包名.tar.gz 后面可以跟 -C 指定解压缩位置
选项
-jx 压缩为.tar.bz2格式









关机和重启命令
shutdown [选项] 时间 比较安全，推荐使用
选项：
-c 取消前一个关机命令
-h 关机
-r 重启




其他关机命令
halt
poweroff
init 0


其他重启命令
reboot
init 6


系统运行级别
级别
0 关机
1 单用户
2 不完全多用户，不含NFS服务
3 完全多用户
4 未分配
5 图形界面
6 重启


cat /etc/inittab 修改系统默认运行级别
runlevel 查询系统运行级别


logout 退出登录

其他常用命令挂载命令
mount 查询系统中已经挂载的设备
mount -a 依据配置文件/etc/fstab的内容，自动挂载
mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点
-t 文件系统 加入文件系统类型来指定挂载的类型，可以ext3、ext4、iso9660等文件系统
-o 特殊选项 可以指定挂载的额外选项
atime/noatime 更新访问时间&#x2F;不更新访问时间
async/sync 异步&#x2F;同步
auto/noauto 自动&#x2F;手动
defaults 定义默认值，相当于rw,suid,dev,exec,auto,nouser,async这七个选项
exec/noexec 执行&#x2F;不执行
remount 重新花在已经挂载的文件系统，一般用于指定修改特殊权限
rw/ro 读写&#x2F;只读
suid/nosuid 具有SUID权限&#x2F;不具有SUID权限
user/nouser 允许普通用户挂载&#x2F;不允许普通用户挂载
userquota 写入代表文件系统支持用户磁盘配额，默认不支持 
grpquota 写入代表文件系统支持组磁盘配额，默认不支持




umount 设备文件名或挂载点 卸载命令
光盘挂载
mkdir /mnt/cdrom 建立挂载点
mount [-t iso9660] /dev/sr0 /mnt/cdrom 挂载光盘
umount /mnt/cdrom 卸载光盘


U盘挂载
fdisk -l 查看U盘设备文件名
mount -t vfat /dev/sdb1 /mnt/usb/ 挂载U盘（注意：Linux默认不支持NTFS文件系统）



用户登录查看和用户交互命令
w [用户名] 查看登录用户信息
who [用户名] 查看登录用户（少量）信息
last 查看当前登录和过去登录的用户信息
lastlog 查看所有用户的最后一次登录时间


shell命令shell概述
vi /etc/shells Linux支持的shell

脚本执行方式输出命令echo [选项] [输出内容]

选项：
-e 支持反斜线控制的字符转换



编写脚本$ vim hello.sh# 进入编辑界面# --------------------#!/bin/Bash# The Frist Programecho -c &quot;\e[1;34m Hello World \e[0m&quot;:wq

脚本执行方法
赋予执行权限，直接运行
chmod 755 hello.sh 赋予权限
./hello.sh 运行


通过Bash调用执行脚本
bash hello.sh



Bash的基本功能命令别名与快捷键
别名
alias 查看默认已经生效的别名
alias 别名=&#39;原命令&#39; （临时）设置别名
vi ~/.bashrc 写入环境变量配置文件使别名永久生效
unalias 别名 （临时）删除别名


命令生效顺序
执行用绝对路径或相对路径执行的命令
执行别名
执行Bash的内部命令
执行按照$PATH幻境变量定义的目录查找顺序找到的第一个命令


常用快捷键
ctrl+c 强行终止当前命令
ctrl+l 清屏
ctrl+a 光标移动到命令行首 
ctrl+e 光标移动到命令行尾
ctrl+u 从光标所在的位置删除到行首
ctrl+z 把命令放入后台
ctrl+r 在历史命令中搜索



历史命令
history [选项] [历史命令保存文件] 历史命令
选项
-c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件~/.bash_history




历史命令默认会保存1000条，可以在环境变量配置文件/etc/profile中进行修改
历史命令的调用
使用上下箭头调用以前的历史命令
使用 !n 重复执行第n条历史命令
使用 !! 重复执行上一条命令
使用 !字符串 重复执行最后一条以该字符串开头的命令


命令和文件补全
在Bash中，命令与文件补全是非常方便与常用的功能，我们只要在输入命令或文件时，按tab键就会自动进行补全



输出(输入)重定向标准输入输出


设备
设备文件名
文件描述符
类型



键盘
&#x2F;dev&#x2F;stdin
0
标准输入


显示器
&#x2F;dev&#x2F;sdtout
1
标准输出


显示器
&#x2F;dev&#x2F;sdterr
2
标准错误输出


输出重定向


类型
符号
作用



标准输出重定向
命令 &gt; 文件
以覆盖的方式，把命令的正确输出输出到指定的文件或设备当中


标准输出重定向
命令 &gt;&gt; 文件
以追加的方式，把命令的正确输出输出到指定的文件或设备当中


标准错误输出重定向
错误命令 2&gt;文件
以覆盖的方式，把命令的错误输出输出到指定的文件或设备当中


标准错误输出重定向
错误命令 2&gt;&gt;文件
以追加的方式，把命令的错误输出输出到指定的文件或设备当中


正确和错误输出同时保存
命令 &gt; 文件 2&gt;&amp;1
以覆盖的方式，把正确和错误输出都保存到同一个文件当中


正确和错误输出同时保存
命令 &gt;&gt; 文件 2&gt;&amp;1
以追加的方式，把正确和错误输出都保存到同一个文件当中


正确和错误输出同时保存
命令 &amp;&gt;文件
以覆盖的方式，把正确和错误输出都保存到同一个文件当中


正确和错误输出同时保存
命令 &amp;&gt;&gt;文件
以追加的方式，把正确和错误输出都保存到同一个文件当中


正确和错误输出同时保存
命令&gt;&gt;文件1 2&gt;&gt;文件2
把正确输出追加到文件1中，把错误输出追加到文件2中


输入重定向
wc [选项] [文件名] 统计
选项
-c 统计字节数
-w 统计单词数
-l 统计行数




命令 &lt; 文件把文件作为命令的输入
命令 &lt;&lt; 标识符
把到标识符为止的内容作为命令的输出



多命令顺序执行多命令执行符
命令1; 命令2
多个命令顺序执行，命令之间没有任何逻辑联系


命令1 &amp;&amp; 命令2
逻辑与
当命令1正确执行，则命令2才会执行
当命令1执行不正确，则命令2不会执行


命令1 || 命令2
逻辑或
当命令1执行不正确，则命令2才会执行
当命令1正确执行，则命令2不会执行



管道符
命令1 | 命令2
命令1的正确输出作为命令2的操作对象



Shell中特殊符号通配符
?
匹配一个任意字符


*
匹配0个或任意多个任意字符，也就是可以匹配任何内容


[]
匹配中括号中任意一个字符(例如：[abc]代表一定匹配一个字符，或者是a，或者是b，或者是c)


[-]
匹配中括号中任意一个字符，-代表一个范围(例如：[a-z]代表匹配一个小写字母)


[^]
逻辑非，表示匹配不是中括号内的一个字符(例如：[^0-9]代表匹配一个不是数字的字符)



其他特殊符号
&#39;&#39; 单引号
单引号中所有的特殊符号都没有特殊含义


&quot;&quot; 双引号
在双引号中特殊字符没有特殊含义
例外：
&quot;$&quot; 调用变量的值
&quot;`&quot; 引用命令
&quot;\&quot; 转义符




`` 反引号
反引号括起来的内容是系统命令，在bash中会先执行它。和$()作用一样。推荐使用$()，因为反引号非常容易看错


$() 
和反引号作用一样，用来引用系统命令


# 
在shell脚本中，#开头的行代表注释


$ 
用于调用变量的值，如需要调用变量name的值时，需要用$name的方式


\ 转义符 
跟在\后面的特殊符号将失去特殊含义，变为普通字符



]]></content>
      <categories>
        <category>技术</category>
        <category>linux</category>
      </categories>
      <tags>
        <tag>linux</tag>
        <tag>shell</tag>
        <tag>bash</tag>
      </tags>
  </entry>
  <entry>
    <title>自用前端 Node 包管理工具总结</title>
    <url>/posts/966ec16e/</url>
    <content><![CDATA[nodeJs 是一个基于 V8 引擎的服务器端 JavaScript 运行环境。对于前端开发者来说node最大的作用是帮助我们完成获取依赖，构建项目，编译代码等工作。NodeJs 自带的包管理器 npm，是全球最大的开源库生态系统。
但是由于本国特殊的网络环境，经常会出现各种各样的问题。以下是本人使用过程中踩过坑的应对手段：
起步安装 nodeJs &amp; npm初次可直接从官网下载安装(内含最新版的 nodeJs 和 npm) https://nodejs.org


管理 nodeJs 版本
安装 n 模块
 $ sudo npm install -g n

升级 nodeJs
 # Use or install the latest official release:$ n latest# Use or install the stable official release:$ n stable# Use or install the latest LTS official release:$ n lts

切换 nodeJs 版本
 $ n  4.6.0ο 6.8.0

删除 nodeJs 版本
 $ n rm 0.9.4

n 模块 github 地址：https://github.com/tj/n

注意：windows 系统不适用以上方法

windows 直接在官网下载最新版本，覆盖安装来升级 nodeJs 版本
win10自带的 Ubuntu bash 代码行也可以试一下（未测试过）



MAC系统 npm 需要管理员权限问题(未测试)$ sudo chown -R $USER /usr/local   

win使用nvm-windows安装&amp;管理node版本
安装nvm-windows
在命令行输入nvm验证安装成功
常用命令 # 查看已安裝的Node版本$ nvm list# 查看提供哪些Node版本$ nvm list available# 安裝指定的Node版本$ nvm install [version]# 指定使用Node版本$ nvm use [version]

管理 npm 模块管理器升级 npm 的版本
通用  $ npm install npm@latest -g
windows 平台插件： npm-windows-upgrade  $ npm i -g npm-windows-upgrade$ npm-windows-upgrade

升级 npm 依赖包npm-check是用来检查npm依赖包是否有更新、错误以及是否在使用的，可以方便的使用npm-check进行包的更新

安装npm-check
 $ npm install -g npm-check

检查全局的 npm 包是否可升级
 $ npm-check -u -g

淘宝NPM镜像cnpm (不推荐，用yarn代替目前好像出错率好多了)
安装cnpm
 $ npm install -g cnpm --registry=https://registry.npm.taobao.org

用cnpm安装模块
 $ cnpm install [name]

npm 个人常用命令# 查看 npm 的版本$ npm -v# 为npm init设置默认值$ npm set init-author-name &#x27;cycjimmy&#x27;$ npm set init-author-email &#x27;cycjimmy@gmail.com&#x27;$ npm set init-author-url &#x27;https://github.com/cycjimmy&#x27;$ npm set init-license &#x27;MIT&#x27;# 初始化生成一个package.json文件。# 使用 -y 可以跳过提问阶段，直接生成package.json文件$ npm init -y# 列出当前项目安装的所有模块包$ npm ls --depth=0# npm install默认会安装dependencies字段和devDependencies字段中的所有依赖包$ npm i# 针对国内可以加上参数$ npm --registry=https://registry.npm.taobao.org i # 安装依赖包# –save：添加到dependencies，可简化为-S# –save-dev: 添加到devDependencies，可简化为-D$ sudo npm i -g [package name]$ npm i [package name]$ npm i [package name] -S$ npm i [package name] -D# 更新依赖包# -S表示保存新的依赖包版本号到package.json$ npm update &lt;package name&gt; -S# npm update只更新顶层依赖包，而不更新依赖的依赖，如果想递归更新取，使用下面的命令$ npm --depth 9999 update# 卸载依赖包$ npm uninstall [package name]$ npm uninstall [package name] -global# 执行任务$ npm run [task name]# 针对国内的设置$ npm config set registry=http://registry.npmjs.org# 使用XX-Net的可设置下http代理$ npm config set proxy http://127.0.0.1:8087$ npm config set https-proxy http://127.0.0.1:8087$ npm config set strict-ssl false -g# 还原设置$ npm config delete registry$ npm config delete proxy$ npm config delete https-proxy$ npm config delete strict-ssl# 列出所有npm配置项目$ npm config ls -l

strict-ssl 需手动修改 .npmrc 文件(located in \Users\ in Windows)
# .npmrc文件中添加strict-ssl=false

其他比较详细的npm命令查看 
用yarn取代npmYarn is a package manager for your code.

安装(升级)yarn
 $ npm install -g yarn

yarn常用命令
 # npm init =&gt;$ yarn init# npm install =&gt;$ yarn install $ yarn install --force     #强制所有包重新下载# npm install --save [package] =&gt;$ yarn add [package]# npm install --save-dev [package] =&gt;$ yarn add [package] --dev# npm install --global [package] =&gt;$ yarn global add [package]# rm -rf node_modules &amp;&amp; npm install =&gt;$ yarn upgrade [package]$ yarn upgrade [package] --ignore-engines  #忽略引擎# npm uninstall --save [package] =&gt;# npm uninstall --save-dev [package] =&gt;$ yarn remove [package]# npm cache clean =&gt;$ yarn cache clean# 针对国内的设置$ yarn config set registry https://registry.npm.taobao.org# 使用XX-Net的可设置下http代理$ yarn config set proxy http://127.0.0.1:8087$ yarn config set https-proxy http://127.0.0.1:8087$ yarn config set strict-ssl false -g# 还原设置$ yarn config delete registry$ yarn config delete proxy$ yarn config delete https-proxy$ yarn config delete strict-ssl

yarn的 strict-ssl 配置目前存在BUG，需手动修改 .yarnrc 文件(located in \Users\ in Windows)【yarn&#x2F;issues#980】


  # 进入vi修改.yarnrc$ vi ~/.yarnrc# .yarnrc内容:# ------------------------------------------------------------------  # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.  # yarn lockfile v1  strict-ssl false# ------------------------------------------------------------------# 修改完毕输入 :wq 保存退出 

国内抓取node-sass失败的解决方案# 使用淘宝镜像$ SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ npm install node-sass# 或者使用淘宝镜像cnpm$ cnpm install node-sass 

发布node模块到npm社区
npm官网注册账号，或使用命令行:

$ npm adduser


登陆账号

# via npm$ npm login# via yarn$ yarn login


验证登陆

$ npm whoami


更新包版本号x.y.z, 通用版本号迭代规则:

如果只是修复bug，更新z
如果是新增了功能，但是向下兼容，更新y
如果有大变动，向下不兼容，更新x


发布


# via npmnpm publish# via yarnyarn publish
]]></content>
      <categories>
        <category>技术</category>
        <category>node</category>
      </categories>
      <tags>
        <tag>node</tag>
        <tag>npm</tag>
        <tag>yarn</tag>
      </tags>
  </entry>
  <entry>
    <title>使用Fiddler配合夜神模拟器进行App抓包</title>
    <url>/posts/37641f88/</url>
    <content><![CDATA[本文所用环境及软件版本
Win10(22H2 19045.3031)
Fiddler(Progress Telerik Fiddler Classic v5.0.20211.51073 for .NET 4.6.1)
夜神模拟器(v7.0.5.7001)

Ps: 列出以上环境仅给予参考，并不要求完全一致。
安装
Fiddler(抓包工具)
夜神模拟器



配置fiddler监听https
菜单栏 Tools &#x3D;&gt; Options &#x3D;&gt; HTTPS
勾选 Capture HTTPS Connects
勾选 Decrypt HTTPS traffic
勾选 Ignore server certificate errors(unsafe)


fiddler允许远程连接
菜单栏 Tools &#x3D;&gt; Options &#x3D;&gt; Connections
勾选 Allow remote computers to connect


在模拟器中安装Xposed框架
应用商店搜索Xposed，并下载安装Xposed安装器，安装完后显示的应用名为“Xposed鸭”。



打开“Xposed鸭”，安装Xposed最新版本(Version 89)



安装成功后重启模拟器，打开“Xposed鸭”将显示“已激活”字样


安装Xposed模块JustTrustMe(禁用SSL证书检查)
下载，并安装。
安装完成后进入“Xposed鸭”模块列表激活模块，勾选激活



重启模拟器

在模拟器中安装fiddler证书
Win10中查看本地主机Ip(右键开始按钮 &#x3D;&gt; Windows PowerShell &#x3D;&gt; 键入ipconfig /all查看)
打开夜神模拟器内置浏览器，取消安全警告(右上角三个点 &#x3D;&gt; 设置 &#x3D;&gt; 隐私和安全 &#x3D;&gt; 取消“显示安全警告”后面的钩)



在浏览器地址栏输入http://[本机ip]:[fiddler端口号(默认8888)]，访问页面，下载证书



点击下载好的证书文件安装证书



设置WLAN代理(设置 &#x3D;&gt; WLAN &#x3D;&gt; 长按WiredSSID &#x3D;&gt; 修改网络 &#x3D;&gt; 展开高级选项，选手动代理，填入本机Ip和端口号)


使用fiddler代理后连不上网的解决方案(网络通畅可跳过)
打开注册表(右键开始按钮 &#x3D;&gt; 运行 &#x3D;&gt; 键入“regedit” &#x3D;&gt; 确定)
在计算机\HKEY_CURRENT_USER\Software\Microsoft\Fiddler2下新建一个DWORD(32位)，值设置为80(十进制)



fiddler中修改自定义规则(菜单 Rules &#x3D;&gt; Customize Rules)
将下面这段代码放入 OnBeforeRequest 方法的尾部(可用ctrl+f搜索):

if (oSession.host.toLowerCase() == &quot;webserver:8888&quot;) &#123;  oSession.host = &quot;webserver:80&quot;;&#125;


至此全部设置完成（恭喜
一些失败的补救完成上述操作后就可以愉快地抓包了。但是由于Xposed框架项目早已冻结，且年久失修。系统和App的安全性越来越高的今天，不少App已经无法抓取，如发生此类情况，可尝试以下的一种方案或者多种方案配合以进行最后补救：
1.使用老版本App进行抓包较新版本的App安全性的比较高，尝试下载老版本App进行抓取
2.使用更低的安卓版本使用安卓5代替安卓7(理论上低版本系统安全等级更低一些)，方法如下：

打开模拟器多开助手



添加模拟器，选择安卓5版本创建


3.使用 TrustMeAlready 代替 JustTrustMe经过几个App测试，TrustMeAlready比JustTrustMe更稳定一些，但也存在JustTrustMe可用，TrustMeAlready不可用的情况。最好两个模块都尝试一下。【TrustMeAlready下载】
一些遗留问题(待后期解决)
32位模拟器无法安装64位App，64位模拟器不支持Xposed安装，导致64位App无法使用本方案抓取。
Xposed框架年久失修，需寻求新的方案。

参考文档
Fiddler+夜神模拟器对安卓app进行抓包

]]></content>
      <categories>
        <category>技术</category>
      </categories>
      <tags>
        <tag>proxy</tag>
        <tag>fiddler</tag>
        <tag>夜神</tag>
        <tag>xposed</tag>
        <tag>ssl</tag>
      </tags>
  </entry>
  <entry>
    <title>使用 Github Actions 进行自动化版本发布</title>
    <url>/posts/2addaece/</url>
    <content><![CDATA[配置 semantic-release-actionsemantic-release-action 是一个运行 Semantic Release 的 GitHub Action.
使用方法步骤1：在您的仓库中设置 Semantic Release的配置文件 , 如不进行设置将使用 Semantic Release 的默认配置步骤2: 在您的 Github 仓库中为 Semantic Release 身份认证 添加 Secrets , 以保证权限正常
GITHUB_TOKEN 无需添加，由 Github 默认生成。如需发布到npm，需要手动添加 NPM_TOKEN 到 Secrets 列表


步骤3：将 工作流文件 添加到您的仓库，来创建自定义的自动化流程。
semantic-release-action 支持以下输入:
branch: [可选] 设定应该在哪个分支上进行发布。它将覆盖你配置文件中的branch属性。如果在此处或者你的配置文件中都没有配置该属性，则默认用 master 分支进行发布
semantic_version: [可选] 指定需要使用的 semantic-release 版本范围
extra_plugins: [可选] 用于预安装额外的 semantic-release 插件，可以指定插件的版本范围
dry_run: [可选] 是否在 dry-run 模式下运行语义发布，它将覆盖您配置文件中的 dryRun 属性


semantic-release-action 支持输出以下变量（如需使用输出变量，需要事先给您的任务分配一个id，可以看后面的进阶例子）:
new_release_published: 是否发布了新版本，返回 true 或者 false
new_release_version: 新版本的版本号
new_release_major_version: 新版本的主要版本号
new_release_minor_version: 新版本的次要版本号
new_release_patch_version: 新版本的补丁版本号



一个简单的例子
steps:  - name: Semantic Release    uses: cycjimmy/semantic-release-action@v2    env:      GITHUB_TOKEN: $&#123;&#123; secrets.GITHUB_TOKEN &#125;&#125;      NPM_TOKEN: $&#123;&#123; secrets.NPM_TOKEN &#125;&#125;

一个进阶的例子
steps:  - name: Semantic Release    uses: cycjimmy/semantic-release-action@v2    id: semantic   # 您需要一个`id`来使用输出变量    with:      branch: master      semantic_version: 15.13.28      # 在这里，您可以为 semantic-release 插件指定版本范围，也可以不指定      extra_plugins: |        @semantic-release/git        @semantic-release/changelog@3.0.0    env:      GITHUB_TOKEN: $&#123;&#123; secrets.GITHUB_TOKEN &#125;&#125;      NPM_TOKEN: $&#123;&#123; secrets.NPM_TOKEN &#125;&#125;        - name: Do something when a new release published    if: steps.semantic.outputs.new_release_published == &#x27;true&#x27;    run: ...



老仓库使用 Semantic Release手动将上次发布的版本打上tag例如, 发布分支为 master, 上一次发布的版本为 1.1.0，该版本的提交sha值为 1234567，确认该提交已经打上 v1.1.0 的标签
# Make sure the commit 1234567 is in the release branch history$ git branch --contains 1234567# If the commit is not in the branch history it means that either:# - you use a different branch than the one your release from before# - or the commit sha has been rewritten (with git rebase)# In both cases you need to configure your repository to have the last release commit in the history of the release branch# List the tags for the commit 1234567$ git tag --contains 1234567# If v1.1.0 is not in the list you add it with$ git tag v1.1.0 1234567$ git push origin v1.1.0

代码提交规范使用 Commitizen安装
$ npm install -g commitizen cz-conventional-changelog

全局配置，创建一个 .czrc 文件在你的 home 目录，并将 path 指向上面所安装的 commitizen 适配器，使其支持 Angular 的 Commit message 格式
$ echo &#x27;&#123; &quot;path&quot;: &quot;cz-conventional-changelog&quot; &#125;&#x27; &gt; ~/.czrc

如需项目级别配置，可在项目目录里，运行下面的命令
$ commitizen init cz-conventional-changelog --save --save-exact

用以下命令代替 git commit -m 命令
$ git cz

配置好 commitizen 后的新流程为:
# 事先拉取更新$ git pull# 开发修改，完成后git add$ git add .# 提交代码$ git cz# 推送代码$ git push

Commit Message 格式&lt;type&gt;(&lt;scope&gt;): &lt;subject&gt;&lt;空一行&gt;&lt;body&gt;&lt;空一行&gt;&lt;footer&gt;

&lt;type&gt;
feat: 新功能（feature）
fix: 修补bug
docs: 文档（documentation）
style: 格式（不影响代码运行的变动）
refactor: 重构（即不是新增功能，也不是修改bug的代码变动）
perf: 更改代码以提高性能
test: 添加测试
chore: 构建过程或辅助工具的变动


&lt;scope&gt;: 选填项，用来说明本次提交的影响的范围，如 $location, $browser。当更改影响的范围不止一个时，可以使用 *
&lt;subject&gt;: 用来简要描述本次改动，尽量遵循:
以动词开头，使用第一人称现在时，比如change，而不是changed或changes
首字母不要大写
结尾不用句号 .


&lt;body&gt;: 对 &lt;subject&gt; 的描述
&lt;footer&gt;: 主要放置不兼容变更和关闭Issue的信息
不兼容变更: 以 BREAKING CHANGE:  开头，描述变动、变动理由和迁移方法。
关闭Issue: 如close #123



特殊格式
Revert: 此外如果需要撤销之前的Commit，那么本次Commit Message中必须以 revert： 开头，后面紧跟前面描述的Header部分，格式不变。并且，&lt;body&gt;部分的格式也是固定的，必须要记录撤销前Commit的SHA值。

以下是一些提交的例子featfeat($browser): onUrlChange event (popstate/hashchange/polling)Added new event to $browser:- forward popstate event if available- forward hashchange event if popstate not available- do polling when neither popstate nor hashchange availableBreaks $browser.onHashChange, which was removed (use onUrlChange instead)
feat(directive): ng:disabled, ng:checked, ng:multiple, ng:readonly, ng:selectedNew directives for proper binding these attributes in older browsers (IE).Added coresponding description, live examples and e2e tests.Closes #351
feat($compile): simplify isolate scope bindingsChanged the isolate scope binding options to:  - @attr - attribute binding (including interpolation)  - =model - by-directional model binding  - &amp;expr - expression execution bindingThis change simplifies the terminology as well asnumber of choices available to the developer. Italso supports local name aliasing from the parent.BREAKING CHANGE: isolate scope bindings definition has changed andthe inject option for the directive controller injection was removed.To migrate the code follow the example below:Before:scope: &#123;  myAttr: &#x27;attribute&#x27;,  myBind: &#x27;bind&#x27;,  myExpression: &#x27;expression&#x27;,  myEval: &#x27;evaluate&#x27;,  myAccessor: &#x27;accessor&#x27;&#125;After:scope: &#123;  myAttr: &#x27;@&#x27;,  myBind: &#x27;@&#x27;,  myExpression: &#x27;&amp;&#x27;,  // myEval - usually not useful, but in cases where the expression is assignable, you can use &#x27;=&#x27;  myAccessor: &#x27;=&#x27; // in directive&#x27;s template change myAccessor() to myAccessor&#125;The removed `inject` wasn&#x27;t generaly useful for directives so there should be no code using it.

fixfix($compile): couple of unit tests for IE9Older IEs serialize html uppercased, but IE9 does not...Would be better to expect case insensitive, unfortunately jasmine doesnot allow to user regexps for throw expectations.Closes #392Breaks foo.bar api, foo.baz should be used instead
fix(package): update read-pkg-up to version 7.0.0fix: clarify message for EGITNOPERMISSION error

docsdocs(guide): updated fixed docs from Google DocsCouple of typos fixed:- indentation- batchLogbatchLog -&gt; batchLog- start periodic checking- missing brace
docs: fix grammardocs: corrections and further clarifications docs: update broken linkdocs(README): update version numberdocs(README): place badgedocs(inputs): remove redundant defaults

stylestyle: fix table indentationstyle($location): add couple of missing semi colons

refactorrefactor: remove unnecessary object destructuringrefactor: use `Object.entries` rather than `Object.keys`

perfperf(*): Update network configuration

testtest: clarify variables nametest(testRelease): set schedule test

chorechore(package): update xo to version 0.25.0chore(package): remove commitizen from our dependencieschore(*): transfer repo to cycjimmy

revertrevert: &quot;fix: do not convert ssh `repositoryUrl` to https&quot;This reverts commit b895231.

相关文档
semantic-release-action
Commit message 和 Change log 编写指南

]]></content>
      <categories>
        <category>技术</category>
        <category>CI</category>
        <category>Github Actions</category>
      </categories>
      <tags>
        <tag>Github Actions</tag>
        <tag>Release</tag>
      </tags>
  </entry>
  <entry>
    <title>同时使用SVN和Git进行版本控制</title>
    <url>/posts/2401e81f/</url>
    <content><![CDATA[由于个人习惯使用Git作为版本控制工具，但有时单位使用的是SVN。在偶然间发现Git也有SVN工具，于是试着融合了一下，发现是可行的。以下是命令：
# 克隆svn仓库$ git svn clone https://192.168.x.xxx/xxx# 添加忽略$ touch .gitignore$ cat &quot;.svn&quot; &gt; .gitignore# 首次提交本地git$ git add .$ git commit -m &quot;init&quot;# 拉取svn避免冲突$ git svn rebase# 提交svn$ git svn dcommit# 提交远程git$ git push
]]></content>
      <categories>
        <category>技术</category>
        <category>git</category>
      </categories>
      <tags>
        <tag>git</tag>
        <tag>svn</tag>
      </tags>
  </entry>
  <entry>
    <title>将 Socks 代理转化为 Http 代理</title>
    <url>/posts/5b638892/</url>
    <content><![CDATA[本文所在环境为 macOS, 其他平台类似
使用
安装 polipo (请确保系统安装了 brew)

$ brew install polipo


运行 polipo, 设置上级 socks 代理的端口号.

# 我的 socks 代理的端口号是 5555, 您需要把它改成您自己的$ polipo socksParentProxy=127.0.0.1:5555# 看到下面的提示说明启动成功了,# polipo 默认在 8123 端口启动了 http 代理,# 您现在可以使用 8123 端口进行网络配置了.Established listening socket on port 8123.



Npm 使用 Http 代理# 设置 http 代理$ npm config set proxy http://127.0.0.1:8123$ npm config set https-proxy http://127.0.0.1:8123$ npm config set strict-ssl false -g# 还原设置$ npm config delete proxy$ npm config delete https-proxy$ npm config delete strict-ssl

Yarn 使用 Http 代理# 设置 http 代理$ yarn config set proxy http://127.0.0.1:8123$ yarn config set https-proxy http://127.0.0.1:8123$ yarn config set strict-ssl false -g# 还原设置$ yarn config delete proxy$ yarn config delete https-proxy$ yarn config delete strict-ssl
]]></content>
      <categories>
        <category>技术</category>
        <category>proxy</category>
      </categories>
      <tags>
        <tag>proxy</tag>
        <tag>socks</tag>
        <tag>http</tag>
      </tags>
  </entry>
  <entry>
    <title>记一次 Hexo + NexT 搭建个人博客系统</title>
    <url>/posts/edac8622/</url>
    <content><![CDATA[搭建一个静态博客是去年的学习计划之一，然而因为种种原因(其实是拖延症加懒癌)，迟迟没有动手。直到最近，空余时间慢慢富裕了起来，才想“要不把去年想做的博客给做了？”，那么说干就干。
简单谷歌了下相关资料，决定采用Hexo博客系统加NexT主题的方案搭建。本以为会花很点时间，没想到当前的静态博客系统功能居然已经如此完善，自己能想到的功能它几乎全有，要做的就是按照自己需求和喜好去改里面的配置文件。大概花了半天时间改配置，一切就OK了！
注：本文使用的Hexo版本为v3.3.7，NexT版本为v5.1.1
搭建当中遇到的一些坑删除文章后，分类和标签统计不正确
删除目录下的 db.json 文件
清理 public 文件夹并重新生成

$ hexo clean$ hexo generate


重启测试服务器（或重新部署）

$ hexo server# or$ hexo deploy --generate



静态文件全部没有经过压缩，不能忍一开始的想法是用 gulp 写几个任务随便搞下，然后就建了个gulp任务文件待定。
后面随便翻hexo插件时候，发现了一个名叫hexo-all-minifier，我这种懒癌患者肯定是马上试用，然后就没有然后了，问题解决，我立马删除了gulp文件。
又发现了个更好用的插件hexo-filter-cleanup，不仅能压缩，还能合并JS(插件集成了useref)。但是合并JS里面也有一个大坑，原以为我把主题里用到的JS一股脑打成一个包就OK了（如下）
NexT主题->layout->_layout.swig&lt;!-- build:js /js/theme-files.min.js --&gt;&#123;% include &#x27;_scripts/commons.swig&#x27; %&#125;&#123;% set scheme_script = &#x27;_scripts/schemes/&#x27; + theme.scheme | lower + &#x27;.swig&#x27; %&#125;&#123;% include scheme_script %&#125;&#123;% block script_extra %&#125;  &#123;% include &#x27;_scripts/pages/post-details.swig&#x27; %&#125;&#123;% endblock %&#125;&#123;% include &#x27;_scripts/boostrap.swig&#x27; %&#125;&lt;!-- endbuild --&gt;

完成！少了将近7个请求，非常兴奋，立马部署了上去。然而部署了半天之后才发现部分页面出了一点小问题，归档页面的年份标签不见了！经过了半天时间排查，才总算锁定的问题，解决如下：
NexT主题->layout->_layout.swig&lt;!-- build:js /js/theme-common.min.js --&gt;&#123;% include &#x27;_scripts/commons.swig&#x27; %&#125;&#123;% set scheme_script = &#x27;_scripts/schemes/&#x27; + theme.scheme | lower + &#x27;.swig&#x27; %&#125;&#123;% include scheme_script %&#125;&#123;% include &#x27;_scripts/boostrap.swig&#x27; %&#125;&lt;!-- endbuild --&gt;# 以下JS文件为判断script_extra添加，在合并打包时造成编译失误，需要单独处理&#123;% block script_extra %&#125;  &lt;!-- build:js /js/theme-extra.min.js --&gt;  &#123;% include &#x27;_scripts/pages/post-details.swig&#x27; %&#125;  &lt;!-- endbuild --&gt;&#123;% endblock %&#125;

NexT默认从本地加载很多JS库建议务必替换成CDN，不然都会从当前站点获取这些库文件。在NexT主题的 _config.yml 配置中找到 vendors，网上找到相应的CDN地址填入。
部分未解决的坑
二级域名无法配置404页面 线上版本已经可以访问，测试服务器中仍然不行

关于SEO
hexo 相关插件
hexo-abbrlink
hexo-autonofollow
hexo-baidu-url-submit
hexo-generator-baidu-sitemap
hexo-generator-sitemap
hexo-generator-feed


站长平台
百度站长平台
谷歌站长平台
必应站长平台
360站长平台
站长之家工具



其他相关
用GitHub Issue 搭建评论系统

]]></content>
      <categories>
        <category>技术</category>
      </categories>
      <tags>
        <tag>Hexo</tag>
        <tag>NexT</tag>
      </tags>
  </entry>
  <entry>
    <title>404 - 页面飞到外太空啦</title>
    <url>//404.html</url>
    <content><![CDATA[
对不起，您所访问的页面不存在或者已删除。

您可以点击此处返回首页。

]]></content>
  </entry>
  <entry>
    <title>分类</title>
    <url>/categories/index.html</url>
    <content><![CDATA[]]></content>
  </entry>
  <entry>
    <title>标签</title>
    <url>/tags/index.html</url>
    <content><![CDATA[]]></content>
  </entry>
</search>
