feat: add vim.md regex.md cheatsheet. 9ff36a3ac3

This commit is contained in:
jaywcjlove
2022-10-01 19:24:21 +00:00
parent 2d29a6c38d
commit 811895f4c5
26 changed files with 13793 additions and 9877 deletions

View File

@@ -36,7 +36,8 @@
}
</script><a href="https://github.com/jaywcjlove/reference" class="" target="__blank"><svg viewBox="0 0 16 16" fill="currentColor" height="1em" width="1em"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path></svg></a></div></div></nav><div class="wrap max-container"><header class="wrap-header h1wrap"><h1 id="cron-备忘清单"><a aria-hidden="true" tabindex="-1" href="#cron-备忘清单"><span class="icon icon-link"></span></a>Cron 备忘清单</h1><div class="wrap-body">
<p><a href="https://en.wikipedia.org/wiki/Cron">Cron</a> 最适合安排重复性任务。 可以使用关联的 at 实用程序来完成一次性任务的调度。</p>
</div></header><div class="h1wrap-body"><div class="wrap"><div class="wrap-header h2wrap"><h2 id="crontab-格式"><a aria-hidden="true" tabindex="-1" href="#crontab-格式"><span class="icon icon-link"></span></a>Crontab 格式</h2><div class="wrap-body"><!--rehype:body-class=cols-2-->
</div></header><div class="h1wrap-body"><div class="wrap"><div class="wrap-header h2wrap"><h2 id="crontab-格式"><a aria-hidden="true" tabindex="-1" href="#crontab-格式"><span class="icon icon-link"></span></a>Crontab 格式</h2><div class="wrap-body">
<!--rehype:body-class=cols-2-->
</div></div><div class="h2wrap-body cols-2"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="格式"><a aria-hidden="true" tabindex="-1" href="#格式"><span class="icon icon-link"></span></a>格式</h3><div class="wrap-body">
<pre><code class="code-highlight"><span class="code-line line-number" line="1">Min Hour Day Mon Weekday
</span><span class="code-line line-number" line="2">分钟 小时 天 月 周
@@ -51,220 +52,223 @@
</span><span class="code-line line-number" line="7">└───────────────────── 分钟 (0..59)
</span></code></pre>
<hr>
<table class="show-header ">
<thead>
<tr>
<th>字段</th>
<th>范围</th>
<th>特殊字符</th>
</tr>
</thead>
<tbody>
<tr>
<td>分钟 Minute</td>
<td>0 - 59</td>
<td>, - * /</td>
</tr>
<tr>
<td>小时 Hour</td>
<td>0 - 23</td>
<td>, - * /</td>
</tr>
<tr>
<td>月份中的某天</td>
<td>1 - 31</td>
<td>, - * ? / L W</td>
</tr>
<tr>
<td>月 Month</td>
<td>1 - 12</td>
<td>, - * /</td>
</tr>
<tr>
<td>星期几</td>
<td>0 - 6</td>
<td>, - * ? / L #</td>
</tr>
</tbody>
</table><!--rehype:className=show-header -->
<table class="show-header "><thead><tr><th>字段</th><th>范围</th><th>特殊字符</th></tr></thead><tbody><tr><td>分钟 Minute</td><td>0 - 59</td><td>, - * /</td></tr><tr><td>小时 Hour</td><td>0 - 23</td><td>, - * /</td></tr><tr><td>月份中的某天</td><td>1 - 31</td><td>, - * ? / L W</td></tr><tr><td>月 Month</td><td>1 - 12</td><td>, - * /</td></tr><tr><td>星期几</td><td>0 - 6</td><td>, - * ? / L #</td></tr></tbody></table>
<!--rehype:className=show-header -->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="示例"><a aria-hidden="true" tabindex="-1" href="#示例"><span class="icon icon-link"></span></a>示例</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>Example</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>*/15 * * * *</code></td>
<td>每 15 分钟</td>
</tr>
<tr>
<td><code>0 * * * *</code></td>
<td>每隔一小时</td>
</tr>
<tr>
<td><code>0 */2 * * *</code></td>
<td>每 2 小时</td>
</tr>
<tr>
<td><code>15 2 * * *</code></td>
<td>每天凌晨 2 点 15 分</td>
</tr>
<tr>
<td><code>15 2 * * ?</code></td>
<td>每天凌晨 2 点 15 分</td>
</tr>
<tr>
<td><code>10 9 * * 5</code></td>
<td>每周五上午 9:10</td>
</tr>
<tr>
<td><code>0 0 * * 0</code></td>
<td>每个星期日的午夜</td>
</tr>
<tr>
<td><code>15 2 * * 1L</code></td>
<td>每月最后一个星期一凌晨 2 点 15 分</td>
</tr>
<tr>
<td><code>15 0 * * 4#2</code></td>
<td>每个月的第二个星期四早上 00:15</td>
</tr>
<tr>
<td><code>0 0 0 1 * *</code></td>
<td>每个月的 1 日(每月)</td>
</tr>
<tr>
<td><code>0 0 0 1 1 *</code></td>
<td>每年 1 月 1 日(每年)</td>
</tr>
<tr>
<td><code>@reboot</code></td>
<td>每次重启 <em>(非标准)</em></td>
</tr>
</tbody>
</table>
<table><thead><tr><th>Example</th><th>Description</th></tr></thead><tbody><tr><td><code>*/15 * * * *</code></td><td>每 15 分钟</td></tr><tr><td><code>0 * * * *</code></td><td>每隔一小时</td></tr><tr><td><code>0 */2 * * *</code></td><td>每 2 小时</td></tr><tr><td><code>15 2 * * *</code></td><td>每天凌晨 2 点 15 分</td></tr><tr><td><code>15 2 * * ?</code></td><td>每天凌晨 2 点 15 分</td></tr><tr><td><code>10 9 * * 5</code></td><td>每周五上午 9:10</td></tr><tr><td><code>0 0 * * 0</code></td><td>每个星期日的午夜</td></tr><tr><td><code>15 2 * * 1L</code></td><td>每月最后一个星期一凌晨 2 点 15 分</td></tr><tr><td><code>15 0 * * 4#2</code></td><td>每个月的第二个星期四早上 00:15</td></tr><tr><td><code>0 0 0 1 * *</code></td><td>每个月的 1 日(每月)</td></tr><tr><td><code>0 0 0 1 1 *</code></td><td>每年 1 月 1 日(每年)</td></tr><tr><td><code>@reboot</code></td><td>每次重启 <em>(非标准)</em></td></tr></tbody></table>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="特殊字符串"><a aria-hidden="true" tabindex="-1" href="#特殊字符串"><span class="icon icon-link"></span></a>特殊字符串</h3><div class="wrap-body">
<table class="show-header ">
<thead>
<tr>
<th>特殊字符串</th>
<th>意义</th>
</tr>
</thead>
<tbody>
<tr>
<td>@reboot</td>
<td>运行一次,在系统启动时 <em>(非标准)</em></td>
</tr>
<tr>
<td>@yearly</td>
<td>每年运行一次“0 0 1 1 *” <em>(非标准)</em></td>
</tr>
<tr>
<td>@annually</td>
<td>(与@yearly 相同)<em>(非标准)</em></td>
</tr>
<tr>
<td>@monthly</td>
<td>每月运行一次“0 0 1 * *” <em>(非标准)</em></td>
</tr>
<tr>
<td>@weekly</td>
<td>每周运行一次“0 0 * * 0” <em>(非标准)</em></td>
</tr>
<tr>
<td>@daily</td>
<td>每天运行一次“0 0 * * *” <em>(非标准)</em></td>
</tr>
<tr>
<td>@midnight</td>
<td>(与@daily 相同)<em>(非标准)</em></td>
</tr>
<tr>
<td>@hourly</td>
<td>每小时运行一次“0 * * * *” <em>(非标准)</em></td>
</tr>
</tbody>
</table><!--rehype:className=show-header -->
<table class="show-header "><thead><tr><th>特殊字符串</th><th>意义</th></tr></thead><tbody><tr><td>@reboot</td><td>运行一次,在系统启动时 <em>(非标准)</em></td></tr><tr><td>@yearly</td><td>每年运行一次“0 0 1 1 *” <em>(非标准)</em></td></tr><tr><td>@annually</td><td>(与@yearly 相同)<em>(非标准)</em></td></tr><tr><td>@monthly</td><td>每月运行一次“0 0 1 * *” <em>(非标准)</em></td></tr><tr><td>@weekly</td><td>每周运行一次“0 0 * * 0” <em>(非标准)</em></td></tr><tr><td>@daily</td><td>每天运行一次“0 0 * * *” <em>(非标准)</em></td></tr><tr><td>@midnight</td><td>(与@daily 相同)<em>(非标准)</em></td></tr><tr><td>@hourly</td><td>每小时运行一次“0 * * * *” <em>(非标准)</em></td></tr></tbody></table>
<!--rehype:className=show-header -->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="crontab-命令"><a aria-hidden="true" tabindex="-1" href="#crontab-命令"><span class="icon icon-link"></span></a>Crontab 命令</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>-</th>
<th>-</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>crontab -e</code></td>
<td>如果不存在,则编辑或创建一个 crontab 文件。</td>
</tr>
<tr>
<td><code>crontab -l</code></td>
<td>显示 crontab 文件。</td>
</tr>
<tr>
<td><code>crontab -r</code></td>
<td>删除 crontab 文件。</td>
</tr>
<tr>
<td><code>crontab -v</code></td>
<td>显示您上次编辑 crontab 文件的时间。 <em>(非标准)</em></td>
</tr>
<tr>
<td>`echo "@reboot echo hi"</td>
<td>crontab`</td>
</tr>
</tbody>
</table>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="特殊字符"><a aria-hidden="true" tabindex="-1" href="#特殊字符"><span class="icon icon-link"></span></a>特殊字符</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
<table class="show-header ">
<thead>
<tr>
<th>特殊字符</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>星号(*)</code></td>
<td>匹配字段中的所有值或任何可能的值。</td>
</tr>
<tr>
<td><code>横杆(-)</code></td>
<td>用于定义范围。例如:第 5 个字段(星期几)中的 1-5 每个工作日,即星期一到星期五</td>
</tr>
<tr>
<td><code>斜线 (/)</code></td>
<td>第一个字段(分钟)/15 表示每十五分钟或范围的增量。</td>
</tr>
<tr>
<td><code>逗号(,)</code></td>
<td>用于分隔项目。例如:第二个字段(小时)中的 2、6、8 在凌晨 2 点、早上 6 点和早上 8 点执行</td>
</tr>
<tr>
<td><code>L</code></td>
<td>仅允许用于 <code>月份中的某天</code><code>星期几</code> 字段,<code>星期几</code> 中的 <code>2L</code> 表示每个月的最后一个星期二</td>
</tr>
<tr>
<td><code>井号 (#)</code></td>
<td>仅允许用于 <code>星期几</code> 字段,后面必须在 1 到 5 的范围内。例如,<code>4#1</code> 表示给定月份的“第一个星期四”。</td>
</tr>
<tr>
<td><code>问号(?)</code></td>
<td>可以代替“*”并允许用于月份和星期几。使用仅限于 cron 表达式中的 <code>月份中的某天</code><code>星期几</code></td>
</tr>
</tbody>
</table><!--rehype:className=show-header -->
<table><thead><tr><th>-</th><th>-</th></tr></thead><tbody><tr><td><code>crontab -e</code></td><td>如果不存在,则编辑或创建一个 crontab 文件。</td></tr><tr><td><code>crontab -l</code></td><td>显示 crontab 文件。</td></tr><tr><td><code>crontab -r</code></td><td>删除 crontab 文件。</td></tr><tr><td><code>crontab -v</code></td><td>显示您上次编辑 crontab 文件的时间。 <em>(非标准)</em></td></tr><tr><td>`echo "@reboot echo hi"</td><td>crontab`</td></tr></tbody></table>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="特殊字符"><a aria-hidden="true" tabindex="-1" href="#特殊字符"><span class="icon icon-link"></span></a>特殊字符</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<table class="show-header "><thead><tr><th>特殊字符</th><th>说明</th></tr></thead><tbody><tr><td><code>星号(*)</code></td><td>匹配字段中的所有值或任何可能的值。</td></tr><tr><td><code>横杆(-)</code></td><td>用于定义范围。例如:第 5 个字段(星期几)中的 1-5 每个工作日,即星期一到星期五</td></tr><tr><td><code>斜线 (/)</code></td><td>第一个字段(分钟)/15 表示每十五分钟或范围的增量。</td></tr><tr><td><code>逗号(,)</code></td><td>用于分隔项目。例如:第二个字段(小时)中的 2、6、8 在凌晨 2 点、早上 6 点和早上 8 点执行</td></tr><tr><td><code>L</code></td><td>仅允许用于 <code>月份中的某天</code><code>星期几</code> 字段,<code>星期几</code> 中的 <code>2L</code> 表示每个月的最后一个星期二</td></tr><tr><td><code>井号 (#)</code></td><td>仅允许用于 <code>星期几</code> 字段,后面必须在 1 到 5 的范围内。例如,<code>4#1</code> 表示给定月份的“第一个星期四”。</td></tr><tr><td><code>问号(?)</code></td><td>可以代替“*”并允许用于月份和星期几。使用仅限于 cron 表达式中的 <code>月份中的某天</code><code>星期几</code></td></tr></tbody></table>
<!--rehype:className=show-header -->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="also-see"><a aria-hidden="true" tabindex="-1" href="#also-see"><span class="icon icon-link"></span></a>Also see</h2><div class="wrap-body">
<ul>
<li><a href="https://devhints.io/cron">Devhints</a> <em>(devhints.io)</em></li>
<li><a href="https://crontab-generator.org/">Crontab Generator</a> <em>(crontab-generator.org)</em></li>
<li><a href="https://crontab.guru/">Crontab guru</a> <em>(crontab.guru)</em></li>
<li><a href="https://devhints.io/cron">Devhints</a> <em>(devhints.io)</em></li>
<li><a href="https://crontab-generator.org/">Crontab Generator</a> <em>(crontab-generator.org)</em></li>
<li><a href="https://crontab.guru/">Crontab guru</a> <em>(crontab.guru)</em></li>
</ul>
</div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

View File

@@ -36,178 +36,180 @@
}
</script><a href="https://github.com/jaywcjlove/reference" class="" target="__blank"><svg viewBox="0 0 16 16" fill="currentColor" height="1em" width="1em"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path></svg></a></div></div></nav><div class="wrap max-container"><header class="wrap-header h1wrap"><h1 id="docker-备忘清单"><a aria-hidden="true" tabindex="-1" href="#docker-备忘清单"><span class="icon icon-link"></span></a>Docker 备忘清单</h1><div class="wrap-body">
<p>这是 <a href="https://docs.docker.com/get-started/">Docker</a> 的快速参考备忘单。 你可以在这里找到最常见的 Docker 命令。</p>
</div></header><div class="h1wrap-body"><div class="wrap"><div class="wrap-header h2wrap"><h2 id="入门"><a aria-hidden="true" tabindex="-1" href="#入门"><span class="icon icon-link"></span></a>入门</h2><div class="wrap-body"><!--rehype:body-class=cols-2-->
</div></header><div class="h1wrap-body"><div class="wrap"><div class="wrap-header h2wrap"><h2 id="入门"><a aria-hidden="true" tabindex="-1" href="#入门"><span class="icon icon-link"></span></a>入门</h2><div class="wrap-body">
<!--rehype:body-class=cols-2-->
</div></div><div class="h2wrap-body cols-2"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="入门-1"><a aria-hidden="true" tabindex="-1" href="#入门-1"><span class="icon icon-link"></span></a>入门</h3><div class="wrap-body">
<p>在后台创建和运行容器</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">docker</span> run <span class="token parameter variable">-d</span> <span class="token parameter variable">-p</span> <span class="token number">80</span>:80 docker/getting-started
</span></code></pre>
<hr>
<ul>
<li><code>-d</code> - 以分离模式运行容器</li>
<li><code>-p 80:80</code> - 将端口 80 映射到容器中的端口 80</li>
<li><code>docker/getting-started</code> - 要使用的镜像</li>
<li><code>-d</code> - 以分离模式运行容器</li>
<li><code>-p 80:80</code> - 将端口 80 映射到容器中的端口 80</li>
<li><code>docker/getting-started</code> - 要使用的镜像</li>
</ul>
<p>在前台创建并运行容器</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">docker</span> run <span class="token parameter variable">-it</span> <span class="token parameter variable">-p</span> <span class="token number">8001</span>:8080 <span class="token parameter variable">--name</span> my-nginx nginx
</span></code></pre>
<hr>
<ul>
<li><code>-it</code> - 交互式 bash 模式</li>
<li><code>-p 8001:8080</code> - 将 <code>8001</code> 端口映射到容器中的 <code>8080</code> 端口</li>
<li><code>--name my-nginx</code> - 指定名称</li>
<li><code>nginx</code> - 要使用的镜像</li>
<li><code>-it</code> - 交互式 bash 模式</li>
<li><code>-p 8001:8080</code> - 将 <code>8001</code> 端口映射到容器中的 <code>8080</code> 端口</li>
<li><code>--name my-nginx</code> - 指定名称</li>
<li><code>nginx</code> - 要使用的镜像</li>
</ul>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="一般命令"><a aria-hidden="true" tabindex="-1" href="#一般命令"><span class="icon icon-link"></span></a>一般命令</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>Example</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>docker ps</code></td>
<td>列出正在运行的容器</td>
</tr>
<tr>
<td><code>docker ps -a</code></td>
<td>列出所有容器</td>
</tr>
<tr>
<td><code>docker ps -s</code></td>
<td>列出正在运行的容器 <em>(带 CPU / 内存)</em></td>
</tr>
<tr>
<td><code>docker images</code></td>
<td>列出所有镜像</td>
</tr>
<tr>
<td><code>docker exec -it &#x3C;container> bash</code></td>
<td>连接到容器</td>
</tr>
<tr>
<td><code>docker logs &#x3C;container></code></td>
<td>显示容器的控制台日志</td>
</tr>
<tr>
<td><code>docker stop &#x3C;container></code></td>
<td>停止容器</td>
</tr>
<tr>
<td><code>docker restart &#x3C;container></code></td>
<td>重启一个容器</td>
</tr>
<tr>
<td><code>docker rm &#x3C;container></code></td>
<td>移除一个容器</td>
</tr>
<tr>
<td><code>docker port &#x3C;container></code></td>
<td>显示容器的端口映射</td>
</tr>
<tr>
<td><code>docker top &#x3C;container></code></td>
<td>列出进程</td>
</tr>
<tr>
<td><code>docker kill &#x3C;container></code></td>
<td>杀死一个容器</td>
</tr>
</tbody>
</table>
<table><thead><tr><th>Example</th><th>Description</th></tr></thead><tbody><tr><td><code>docker ps</code></td><td>列出正在运行的容器</td></tr><tr><td><code>docker ps -a</code></td><td>列出所有容器</td></tr><tr><td><code>docker ps -s</code></td><td>列出正在运行的容器 <em>(带 CPU / 内存)</em></td></tr><tr><td><code>docker images</code></td><td>列出所有镜像</td></tr><tr><td><code>docker exec -it &#x3C;container> bash</code></td><td>连接到容器</td></tr><tr><td><code>docker logs &#x3C;container></code></td><td>显示容器的控制台日志</td></tr><tr><td><code>docker stop &#x3C;container></code></td><td>停止容器</td></tr><tr><td><code>docker restart &#x3C;container></code></td><td>重启一个容器</td></tr><tr><td><code>docker rm &#x3C;container></code></td><td>移除一个容器</td></tr><tr><td><code>docker port &#x3C;container></code></td><td>显示容器的端口映射</td></tr><tr><td><code>docker top &#x3C;container></code></td><td>列出进程</td></tr><tr><td><code>docker kill &#x3C;container></code></td><td>杀死一个容器</td></tr></tbody></table>
<p>参数 <code>&#x3C;container></code> 可以是容器 id 或名称</p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="docker-容器"><a aria-hidden="true" tabindex="-1" href="#docker-容器"><span class="icon icon-link"></span></a>Docker 容器</h2><div class="wrap-body"><!--rehype:body-class=cols-2-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="docker-容器"><a aria-hidden="true" tabindex="-1" href="#docker-容器"><span class="icon icon-link"></span></a>Docker 容器</h2><div class="wrap-body">
<!--rehype:body-class=cols-2-->
</div></div><div class="h2wrap-body cols-2"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="启动和停止"><a aria-hidden="true" tabindex="-1" href="#启动和停止"><span class="icon icon-link"></span></a>启动和停止</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>Description</th>
<th>Example</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>docker start nginx-server</code></td>
<td>开始</td>
</tr>
<tr>
<td><code>docker stop nginx-server</code></td>
<td>停止</td>
</tr>
<tr>
<td><code>docker restart nginx-server</code></td>
<td>重启</td>
</tr>
<tr>
<td><code>docker pause nginx-server</code></td>
<td>暂停</td>
</tr>
<tr>
<td><code>docker unpause nginx-server</code></td>
<td>取消暂停</td>
</tr>
<tr>
<td><code>docker wait nginx-server</code></td>
<td>阻塞容器</td>
</tr>
<tr>
<td><code>docker kill nginx-server</code></td>
<td>发送 SIGKILL</td>
</tr>
<tr>
<td><code>docker attach nginx-server</code></td>
<td>连接到现有容器</td>
</tr>
</tbody>
</table>
<table><thead><tr><th>Description</th><th>Example</th></tr></thead><tbody><tr><td><code>docker start nginx-server</code></td><td>开始</td></tr><tr><td><code>docker stop nginx-server</code></td><td>停止</td></tr><tr><td><code>docker restart nginx-server</code></td><td>重启</td></tr><tr><td><code>docker pause nginx-server</code></td><td>暂停</td></tr><tr><td><code>docker unpause nginx-server</code></td><td>取消暂停</td></tr><tr><td><code>docker wait nginx-server</code></td><td>阻塞容器</td></tr><tr><td><code>docker kill nginx-server</code></td><td>发送 SIGKILL</td></tr><tr><td><code>docker attach nginx-server</code></td><td>连接到现有容器</td></tr></tbody></table>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="说明"><a aria-hidden="true" tabindex="-1" href="#说明"><span class="icon icon-link"></span></a>说明</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>Example</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>docker ps</code></td>
<td>列出正在运行的容器</td>
</tr>
<tr>
<td><code>docker ps -a</code></td>
<td>列出所有容器</td>
</tr>
<tr>
<td><code>docker logs nginx-server</code></td>
<td>容器日志</td>
</tr>
<tr>
<td><code>docker inspect nginx-server</code></td>
<td>检查容器</td>
</tr>
<tr>
<td><code>docker events nginx-server</code></td>
<td>容器事件</td>
</tr>
<tr>
<td><code>docker port nginx-server</code></td>
<td>公共端口</td>
</tr>
<tr>
<td><code>docker top nginx-server</code></td>
<td>运行进程</td>
</tr>
<tr>
<td><code>docker stats nginx-server</code></td>
<td>容器资源使用</td>
</tr>
<tr>
<td><code>docker diff nginx-server</code></td>
<td>列出对容器所做的更改</td>
</tr>
</tbody>
</table>
<table><thead><tr><th>Example</th><th>Description</th></tr></thead><tbody><tr><td><code>docker ps</code></td><td>列出正在运行的容器</td></tr><tr><td><code>docker ps -a</code></td><td>列出所有容器</td></tr><tr><td><code>docker logs nginx-server</code></td><td>容器日志</td></tr><tr><td><code>docker inspect nginx-server</code></td><td>检查容器</td></tr><tr><td><code>docker events nginx-server</code></td><td>容器事件</td></tr><tr><td><code>docker port nginx-server</code></td><td>公共端口</td></tr><tr><td><code>docker top nginx-server</code></td><td>运行进程</td></tr><tr><td><code>docker stats nginx-server</code></td><td>容器资源使用</td></tr><tr><td><code>docker diff nginx-server</code></td><td>列出对容器所做的更改</td></tr></tbody></table>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="创建容器"><a aria-hidden="true" tabindex="-1" href="#创建容器"><span class="icon icon-link"></span></a>创建容器</h3><div class="wrap-body">
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1"><span class="token function">docker</span> create <span class="token punctuation">[</span>options<span class="token punctuation">]</span> IMAGE
</span><span class="code-line line-number" line="2"> -a, <span class="token parameter variable">--attach</span> <span class="token comment"># 附加标准输出/错误</span>
@@ -234,54 +236,55 @@
<p>更新容器</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1"><span class="token function">docker</span> update --cpu-shares <span class="token number">512</span> <span class="token parameter variable">-m</span> 300M nginx-server
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="docker-镜像"><a aria-hidden="true" tabindex="-1" href="#docker-镜像"><span class="icon icon-link"></span></a>Docker 镜像</h2><div class="wrap-body"><!--rehype:body-class=cols-2-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="docker-镜像"><a aria-hidden="true" tabindex="-1" href="#docker-镜像"><span class="icon icon-link"></span></a>Docker 镜像</h2><div class="wrap-body">
<!--rehype:body-class=cols-2-->
</div></div><div class="h2wrap-body cols-2"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="操控-1"><a aria-hidden="true" tabindex="-1" href="#操控-1"><span class="icon icon-link"></span></a>操控</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th><code>Example</code></th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>docker images</code></td>
<td>列出镜像</td>
</tr>
<tr>
<td><code>docker rmi nginx</code></td>
<td>删除镜像</td>
</tr>
<tr>
<td><code>docker load &#x3C; ubuntu.tar.gz</code></td>
<td>加载一个 tarred 存储库</td>
</tr>
<tr>
<td><code>docker load --input ubuntu.tar</code></td>
<td>加载一个 tarred 存储库</td>
</tr>
<tr>
<td><code>docker save busybox > ubuntu.tar</code></td>
<td>将镜像保存到 tar 存档</td>
</tr>
<tr>
<td><code>docker history</code></td>
<td>显示镜像的历史</td>
</tr>
<tr>
<td><code>docker commit nginx</code></td>
<td>将容器另存为镜像。</td>
</tr>
<tr>
<td><code>docker tag nginx eon01/nginx</code></td>
<td>标记镜像</td>
</tr>
<tr>
<td><code>docker push eon01/nginx</code></td>
<td>推送镜像</td>
</tr>
</tbody>
</table>
<table><thead><tr><th><code>Example</code></th><th>Description</th></tr></thead><tbody><tr><td><code>docker images</code></td><td>列出镜像</td></tr><tr><td><code>docker rmi nginx</code></td><td>删除镜像</td></tr><tr><td><code>docker load &#x3C; ubuntu.tar.gz</code></td><td>加载一个 tarred 存储库</td></tr><tr><td><code>docker load --input ubuntu.tar</code></td><td>加载一个 tarred 存储库</td></tr><tr><td><code>docker save busybox > ubuntu.tar</code></td><td>将镜像保存到 tar 存档</td></tr><tr><td><code>docker history</code></td><td>显示镜像的历史</td></tr><tr><td><code>docker commit nginx</code></td><td>将容器另存为镜像。</td></tr><tr><td><code>docker tag nginx eon01/nginx</code></td><td>标记镜像</td></tr><tr><td><code>docker push eon01/nginx</code></td><td>推送镜像</td></tr></tbody></table>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="构建镜像"><a aria-hidden="true" tabindex="-1" href="#构建镜像"><span class="icon icon-link"></span></a>构建镜像</h3><div class="wrap-body">
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">docker</span> build <span class="token builtin class-name">.</span>
</span><span class="code-line line-number" line="2">$ <span class="token function">docker</span> build github.com/creack/docker-firefox
@@ -291,7 +294,8 @@
</span><span class="code-line line-number" line="6">$ <span class="token function">docker</span> build <span class="token parameter variable">-f</span> myOtherDockerfile <span class="token builtin class-name">.</span>
</span><span class="code-line line-number" line="7">$ <span class="token function">curl</span> example.com/remote/Dockerfile <span class="token operator">|</span> <span class="token function">docker</span> build <span class="token parameter variable">-f</span> - <span class="token builtin class-name">.</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="docker-网络"><a aria-hidden="true" tabindex="-1" href="#docker-网络"><span class="icon icon-link"></span></a>Docker 网络</h2><div class="wrap-body"><!--rehype:body-class=cols-2-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="docker-网络"><a aria-hidden="true" tabindex="-1" href="#docker-网络"><span class="icon icon-link"></span></a>Docker 网络</h2><div class="wrap-body">
<!--rehype:body-class=cols-2-->
</div></div><div class="h2wrap-body cols-2"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="操作"><a aria-hidden="true" tabindex="-1" href="#操作"><span class="icon icon-link"></span></a>操作</h3><div class="wrap-body">
<p>删除网络</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1"><span class="token function">docker</span> network <span class="token function">rm</span> MyOverlayNetwork
@@ -326,35 +330,37 @@
</span><span class="code-line line-number" line="12"> --aux-address<span class="token operator">=</span><span class="token string">"my-nas=192.170.1.6"</span> <span class="token punctuation">\</span>
</span><span class="code-line line-number" line="13"> MyOverlayNetwork
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="各种各样的"><a aria-hidden="true" tabindex="-1" href="#各种各样的"><span class="icon icon-link"></span></a>各种各样的</h2><div class="wrap-body"><!--rehype:body-class=cols-2-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="各种各样的"><a aria-hidden="true" tabindex="-1" href="#各种各样的"><span class="icon icon-link"></span></a>各种各样的</h2><div class="wrap-body">
<!--rehype:body-class=cols-2-->
</div></div><div class="h2wrap-body cols-2"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="docker-hub"><a aria-hidden="true" tabindex="-1" href="#docker-hub"><span class="icon icon-link"></span></a>Docker Hub</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>Docker 语法</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>docker search search_word</code></td>
<td>在 docker hub 中搜索镜像。</td>
</tr>
<tr>
<td><code>docker pull user/image</code></td>
<td>从 docker hub 下载镜像。</td>
</tr>
<tr>
<td><code>docker login</code></td>
<td>向 docker hub 进行身份验证</td>
</tr>
<tr>
<td><code>docker push user/image</code></td>
<td>将镜像上传到 docker hub。</td>
</tr>
</tbody>
</table>
</div></div></div><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="注册表命令"><a aria-hidden="true" tabindex="-1" href="#注册表命令"><span class="icon icon-link"></span></a>注册表命令</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-3-->
<table><thead><tr><th>Docker 语法</th><th>说明</th></tr></thead><tbody><tr><td><code>docker search search_word</code></td><td>在 docker hub 中搜索镜像。</td></tr><tr><td><code>docker pull user/image </code></td><td>从 docker hub 下载镜像。</td></tr><tr><td><code>docker login </code></td><td>向 docker hub 进行身份验证</td></tr><tr><td><code>docker push user/image </code></td><td>将镜像上传到 docker hub。</td></tr></tbody></table>
</div></div></div><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="注册表命令"><a aria-hidden="true" tabindex="-1" href="#注册表命令"><span class="icon icon-link"></span></a>注册表命令</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-3-->
<p>登录到注册表</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">docker</span> login
</span><span class="code-line line-number" line="2">$ <span class="token function">docker</span> login localhost:8080
@@ -376,28 +382,28 @@
</span><span class="code-line line-number" line="2">$ <span class="token function">docker</span> push eon01/nginx localhost:5000/myadmin/nginx
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="批量清除"><a aria-hidden="true" tabindex="-1" href="#批量清除"><span class="icon icon-link"></span></a>批量清除</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>实例</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>docker stop -f $(docker ps -a -q)</code></td>
<td>停止所有容器</td>
</tr>
<tr>
<td><code>docker rm -f $(docker ps -a -q)</code></td>
<td>删除所有容器</td>
</tr>
<tr>
<td><code>docker rmi -f $(docker images -q)</code></td>
<td>删除所有图像</td>
</tr>
</tbody>
</table>
<table><thead><tr><th>实例</th><th>说明</th></tr></thead><tbody><tr><td><code>docker stop -f $(docker ps -a -q)</code></td><td>停止所有容器</td></tr><tr><td><code>docker rm -f $(docker ps -a -q)</code></td><td>删除所有容器</td></tr><tr><td><code>docker rmi -f $(docker images -q)</code></td><td>删除所有图像</td></tr></tbody></table>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="卷-volume"><a aria-hidden="true" tabindex="-1" href="#卷-volume"><span class="icon icon-link"></span></a>卷 volume</h3><div class="wrap-body">
<p>检查卷</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">docker</span> volume <span class="token function">ls</span>
@@ -407,10 +413,9 @@
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="另见"><a aria-hidden="true" tabindex="-1" href="#另见"><span class="icon icon-link"></span></a>另见</h2><div class="wrap-body">
<ul>
<li><a href="./dockerfile.html">Dockerfile 备忘清单</a> <em>(github.io)</em></li>
<li><a href="https://docs.docker.com/get-started/">Docker 官方入门教程</a> <em>(docker.com)</em></li>
<li><a href="https://jaywcjlove.github.io/docker-tutorial">Docker入门学习笔记</a> <em>(github.io)</em></li>
<li><a href="./dockerfile.html">Dockerfile 备忘清单</a> <em>(github.io)</em></li>
<li><a href="https://docs.docker.com/get-started/">Docker 官方入门教程</a> <em>(docker.com)</em></li>
<li><a href="https://jaywcjlove.github.io/docker-tutorial">Docker入门学习笔记</a> <em>(github.io)</em></li>
</ul>
</div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

View File

@@ -40,14 +40,15 @@
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="继承"><a aria-hidden="true" tabindex="-1" href="#继承"><span class="icon icon-link"></span></a>继承</h3><div class="wrap-body">
<p>默认 <code>Dockerfile</code> 位于上下文的根目录中。</p>
<ul>
<li><a href="./docker.html">Docker 备忘清单</a> <em>(github.io)</em></li>
<li><a href="./docker.html">Docker 备忘清单</a> <em>(github.io)</em></li>
</ul>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1"><span class="token function">docker</span> build <span class="token parameter variable">-f</span> /path/to/a/Dockerfile <span class="token builtin class-name">.</span>
</span></code></pre>
<p>使用 <code>-f</code> 指向文件系统中任何位置的 <code>Dockerfile</code></p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="继承-1"><a aria-hidden="true" tabindex="-1" href="#继承-1"><span class="icon icon-link"></span></a>继承</h3><div class="wrap-body">
<pre class="wrap-text "><code class="language-dockerfile code-highlight"><span class="code-line line-number" line="1"><span class="token instruction"><span class="token keyword">FROM</span> [--platform=&#x3C;platform>] &#x3C;image> [AS &#x3C;name>]</span>
</span></code></pre><!--rehype:className=wrap-text -->
</span></code></pre>
<!--rehype:className=wrap-text -->
<p>示例</p>
<pre class="language-dockerfile"><code class="language-dockerfile code-highlight"><span class="code-line line-number" line="1"><span class="token instruction"><span class="token keyword">FROM</span> ruby:2.2.2</span>
</span><span class="code-line line-number" line="2"><span class="token instruction"><span class="token keyword">FROM</span> golang:1.19-alpine3.16 <span class="token keyword">AS</span> build-env</span>
@@ -61,7 +62,8 @@
<pre class="language-dockerfile"><code class="language-dockerfile code-highlight"><span class="code-line line-number" line="1"><span class="token instruction"><span class="token keyword">ENV</span> MY_NAME=<span class="token string">"John Doe"</span> MY_DOG=Rex\ The\ Dog <span class="token operator">\</span>
</span></span><span class="code-line line-number" line="2"><span class="token instruction"> MY_CAT=fluffy</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="初始化"><a aria-hidden="true" tabindex="-1" href="#初始化"><span class="icon icon-link"></span></a>初始化</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2 -->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="初始化"><a aria-hidden="true" tabindex="-1" href="#初始化"><span class="icon icon-link"></span></a>初始化</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2 -->
<pre class="language-dockerfile"><code class="language-dockerfile code-highlight"><span class="code-line line-number" line="1"><span class="token instruction"><span class="token keyword">RUN</span> bundle install</span>
</span></code></pre>
<p><code>WORKDIR</code> 指令为任何 <code>RUN</code><code>CMD</code><code>ENTRYPOINT</code><code>COPY</code><code>ADD</code> 指令设置工作目录。</p>
@@ -74,14 +76,16 @@
<pre class="wrap-text "><code class="language-dockerfile code-highlight"><span class="code-line line-number" line="1"><span class="token instruction"><span class="token keyword">ADD</span> file.xyz /file.xyz</span>
</span><span class="code-line line-number" line="2"><span class="token comment"># 复制</span>
</span><span class="code-line line-number" line="3"><span class="token instruction"><span class="token keyword">COPY</span> <span class="token options"><span class="token property">--chown</span><span class="token punctuation">=</span><span class="token string">user:group</span></span> host_file.xyz /path/container_file.xyz</span>
</span></code></pre><!--rehype:className=wrap-text -->
</span></code></pre>
<!--rehype:className=wrap-text -->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="onbuild"><a aria-hidden="true" tabindex="-1" href="#onbuild"><span class="icon icon-link"></span></a>Onbuild</h3><div class="wrap-body">
<pre class="wrap-text "><code class="language-dockerfile code-highlight"><span class="code-line line-number" line="1"><span class="token instruction"><span class="token keyword">ONBUILD</span> <span class="token keyword">RUN</span> bundle install</span>
</span><span class="code-line line-number" line="2"><span class="token comment"># 与另一个文件一起使用时</span>
</span><span class="code-line line-number" line="3">
</span><span class="code-line line-number" line="4"><span class="token instruction"><span class="token keyword">ONBUILD</span> <span class="token keyword">ADD</span> . /app/src</span>
</span><span class="code-line line-number" line="5"><span class="token instruction"><span class="token keyword">ONBUILD</span> <span class="token keyword">RUN</span> /usr/local/bin/python-build --dir /app/src</span>
</span></code></pre><!--rehype:className=wrap-text -->
</span></code></pre>
<!--rehype:className=wrap-text -->
<p>指令将触发指令添加到镜像中,以便稍后执行,此时镜像用作另一个构建的基础。</p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="在严格的-shell-中运行命令"><a aria-hidden="true" tabindex="-1" href="#在严格的-shell-中运行命令"><span class="icon icon-link"></span></a>在严格的 shell 中运行命令</h3><div class="wrap-body">
<pre class="wrap-text "><code class="language-dockerfile code-highlight"><span class="code-line line-number" line="1"><span class="token instruction"><span class="token keyword">ENV</span> my_var</span>
@@ -90,38 +94,41 @@
</span><span class="code-line line-number" line="4"><span class="token instruction"><span class="token keyword">RUN</span> false # ails 像使用 &#x26;&#x26; 一样构建</span>
</span><span class="code-line line-number" line="5"><span class="token instruction"><span class="token keyword">RUN</span> echo <span class="token string">"$myvar"</span> # 由于拼写错误会抛出错误</span>
</span><span class="code-line line-number" line="6"><span class="token instruction"><span class="token keyword">RUN</span> true | false # 将脱离管道</span>
</span></code></pre><!--rehype:className=wrap-text -->
</span></code></pre>
<!--rehype:className=wrap-text -->
<p>使用 <code>shell</code> 将为 shell 命令打开严格模式。</p>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="命令-cmd"><a aria-hidden="true" tabindex="-1" href="#命令-cmd"><span class="icon icon-link"></span></a>命令 CMD</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
<table>
<thead>
<tr>
<th align="left">:-</th>
<th>-</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>CMD ["executable","param1","param2"]</code></td>
<td>(exec 形式,这是首选形式)</td>
</tr>
<tr>
<td align="left"><code>CMD ["param1","param2"]</code></td>
<td>(作为 ENTRYPOINT 的默认参数)</td>
</tr>
<tr>
<td align="left"><code>CMD command param1 param2</code></td>
<td>(shell形式)</td>
</tr>
</tbody>
</table>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="命令-cmd"><a aria-hidden="true" tabindex="-1" href="#命令-cmd"><span class="icon icon-link"></span></a>命令 CMD</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<table><thead><tr><th align="left">:-</th><th>-</th></tr></thead><tbody><tr><td align="left"><code>CMD ["executable","param1","param2"]</code></td><td>(exec 形式,这是首选形式)</td></tr><tr><td align="left"><code>CMD ["param1","param2"]</code></td><td>(作为 ENTRYPOINT 的默认参数)</td></tr><tr><td align="left"><code>CMD command param1 param2</code></td><td>(shell形式)</td></tr></tbody></table>
<pre class="language-dockerfile"><code class="language-dockerfile code-highlight"><span class="code-line line-number" line="1"><span class="token instruction"><span class="token keyword">EXPOSE</span> 5900</span>
</span><span class="code-line line-number" line="2"><span class="token instruction"><span class="token keyword">CMD</span> [<span class="token string">"bundle"</span>, <span class="token string">"exec"</span>, <span class="token string">"rails"</span>, <span class="token string">"server"</span>]</span>
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="入口点-entrypoint"><a aria-hidden="true" tabindex="-1" href="#入口点-entrypoint"><span class="icon icon-link"></span></a>入口点 ENTRYPOINT</h3><div class="wrap-body">
<pre class="wrap-text "><code class="language-dockerfile code-highlight"><span class="code-line line-number" line="1"><span class="token instruction"><span class="token keyword">ENTRYPOINT</span> [<span class="token string">"executable"</span>, <span class="token string">"param1"</span>, <span class="token string">"param2"</span>]</span>
</span><span class="code-line line-number" line="2"><span class="token instruction"><span class="token keyword">ENTRYPOINT</span> command param1 param2</span>
</span></code></pre><!--rehype:className=wrap-text -->
</span></code></pre>
<!--rehype:className=wrap-text -->
<p>配置将作为可执行文件运行的容器。</p>
<pre class="language-dockerfile"><code class="language-dockerfile code-highlight"><span class="code-line line-number" line="1"><span class="token instruction"><span class="token keyword">ENTRYPOINT</span> exec top -b</span>
</span></code></pre>
@@ -132,7 +139,8 @@
<pre class="wrap-text "><code class="language-dockerfile code-highlight"><span class="code-line line-number" line="1"><span class="token instruction"><span class="token keyword">LABEL</span> <span class="token string">"com.example.vendor"</span>=<span class="token string">"ACME Incorporated"</span></span>
</span><span class="code-line line-number" line="2"><span class="token instruction"><span class="token keyword">LABEL</span> com.example.label-with-value=<span class="token string">"foo"</span></span>
</span><span class="code-line line-number" line="3"><span class="token instruction"><span class="token keyword">LABEL</span> version=<span class="token string">"1.0"</span></span>
</span></code></pre><!--rehype:className=wrap-text -->
</span></code></pre>
<!--rehype:className=wrap-text -->
<pre class="language-dockerfile"><code class="language-dockerfile code-highlight"><span class="code-line line-number" line="1"><span class="token instruction"><span class="token keyword">LABEL</span> description=<span class="token string">"本文说明\
</span></span></span><span class="code-line line-number" line="2"><span class="token instruction"><span class="token string">标签值可以跨越多行。"</span></span>
</span><span class="code-line line-number" line="3"><span class="token instruction"><span class="token keyword">LABEL</span> multi.label1=<span class="token string">"value1"</span> <span class="token operator">\</span>
@@ -155,85 +163,87 @@
</span><span class="code-line line-number" line="4"><span class="token entry string">temp<span class="token operator">?</span></span>
</span></code></pre>
<hr>
<table>
<thead>
<tr>
<th align="left">:-</th>
<th>-</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code># comment</code></td>
<td>忽略</td>
</tr>
<tr>
<td align="left"><code>*/temp*</code></td>
<td>在根的任何直接子目录中<br>排除名称以 <code>temp</code> 开头的文件和目录</td>
</tr>
<tr>
<td align="left"><code>*/*/temp*</code></td>
<td>从根以下两级的任何子目录中<br>排除以 <code>temp</code> 开头的文件和目录</td>
</tr>
<tr>
<td align="left"><code>temp?</code></td>
<td>排除根目录中名称为<br><code>temp</code> 的单字符扩展名的文件和目录</td>
</tr>
</tbody>
</table>
<table><thead><tr><th align="left">:-</th><th>-</th></tr></thead><tbody><tr><td align="left"><code># comment</code></td><td>忽略</td></tr><tr><td align="left"><code>*/temp*</code></td><td>在根的任何直接子目录中<br>排除名称以 <code>temp</code> 开头的文件和目录</td></tr><tr><td align="left"><code>*/*/temp*</code></td><td>从根以下两级的任何子目录中<br>排除以 <code>temp</code> 开头的文件和目录</td></tr><tr><td align="left"><code>temp?</code></td><td>排除根目录中名称为<br> <code>temp</code> 的单字符扩展名的文件和目录</td></tr></tbody></table>
<p>如果此文件存在,排除与其中的模式匹配的文件和目录,有利于避免 <code>ADD</code><code>COPY</code> 将敏感文件添加到镜像中。匹配是使用 Go 的 <a href="https://golang.org/pkg/path/filepath#Match">filepath.Match</a> 规则完成的。</p>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="主要命令"><a aria-hidden="true" tabindex="-1" href="#主要命令"><span class="icon icon-link"></span></a>主要命令</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2 -->
<table>
<thead>
<tr>
<th align="left">命令</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>FROM image</code></td>
<td>构建的基础镜像</td>
</tr>
<tr>
<td align="left"><del><code>MAINTAINER email</code></del></td>
<td>(已弃用)维护者的名字</td>
</tr>
<tr>
<td align="left"><code>COPY [--chown=&#x3C;user>:&#x3C;group>] &#x3C;src>... &#x3C;dest></code></td>
<td>将上下文中的路径复制到位置 <code>dest</code> 的容器中</td>
</tr>
<tr>
<td align="left"><code>ADD [--chown=&#x3C;user>:&#x3C;group>] &#x3C;src>... &#x3C;dest></code></td>
<td><code>COPY</code> 相同,但解压缩存档并接受 http url。</td>
</tr>
<tr>
<td align="left"><code>RUN &#x3C;command></code></td>
<td>在容器内运行任意命令。</td>
</tr>
<tr>
<td align="left"><code>USER &#x3C;user>[:&#x3C;group>]</code></td>
<td>设置默认用户名。</td>
</tr>
<tr>
<td align="left"><code>WORKDIR /path/to/workdir</code></td>
<td>设置默认工作目录。</td>
</tr>
<tr>
<td align="left"><code>CMD command param1 param2</code></td>
<td>设置默认命令</td>
</tr>
<tr>
<td align="left"><code>ENV &#x3C;key>=&#x3C;value> ...</code></td>
<td>设置环境变量</td>
</tr>
<tr>
<td align="left"><code>EXPOSE &#x3C;port> [&#x3C;port>/&#x3C;protocol>...]</code></td>
<td>运行时侦听指定的网络端口</td>
</tr>
</tbody>
</table>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="服务静态网站的最小-docker-镜像"><a aria-hidden="true" tabindex="-1" href="#服务静态网站的最小-docker-镜像"><span class="icon icon-link"></span></a>服务静态网站的最小 Docker 镜像</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="主要命令"><a aria-hidden="true" tabindex="-1" href="#主要命令"><span class="icon icon-link"></span></a>主要命令</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2 -->
<table><thead><tr><th align="left">命令</th><th>说明</th></tr></thead><tbody><tr><td align="left"><code>FROM image</code></td><td>构建的基础镜像</td></tr><tr><td align="left"><del><code>MAINTAINER email</code></del></td><td>(已弃用)维护者的名字</td></tr><tr><td align="left"><code>COPY [--chown=&#x3C;user>:&#x3C;group>] &#x3C;src>... &#x3C;dest></code></td><td>将上下文中的路径复制到位置 <code>dest</code> 的容器中</td></tr><tr><td align="left"><code>ADD [--chown=&#x3C;user>:&#x3C;group>] &#x3C;src>... &#x3C;dest></code></td><td><code>COPY</code> 相同,但解压缩存档并接受 http url。</td></tr><tr><td align="left"><code>RUN &#x3C;command></code></td><td>在容器内运行任意命令。</td></tr><tr><td align="left"><code>USER &#x3C;user>[:&#x3C;group>]</code></td><td>设置默认用户名。</td></tr><tr><td align="left"><code>WORKDIR /path/to/workdir</code></td><td>设置默认工作目录。</td></tr><tr><td align="left"><code>CMD command param1 param2</code></td><td>设置默认命令</td></tr><tr><td align="left"><code>ENV &#x3C;key>=&#x3C;value> ...</code></td><td>设置环境变量</td></tr><tr><td align="left"><code>EXPOSE &#x3C;port> [&#x3C;port>/&#x3C;protocol>...]</code></td><td>运行时侦听指定的网络端口</td></tr></tbody></table>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="服务静态网站的最小-docker-镜像"><a aria-hidden="true" tabindex="-1" href="#服务静态网站的最小-docker-镜像"><span class="icon icon-link"></span></a>服务静态网站的最小 Docker 镜像</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-dockerfile"><code class="language-dockerfile code-highlight"><span class="code-line line-number" line="1"><span class="token instruction"><span class="token keyword">FROM</span> lipanski/docker-static-website:latest</span>
</span><span class="code-line line-number" line="2"><span class="token comment"># 使用 .dockerignore 文件来控制图像中的内容!</span>
</span><span class="code-line line-number" line="3"><span class="token comment"># 复制当前目录内容,到容器中</span>
@@ -248,10 +258,9 @@
<p>缩小镜像过程<a href="https://lipanski.com/posts/smallest-docker-image-static-website">查看原文</a>,镜像 <a href="https://github.com/lipanski/docker-static-website">Dockerfile 源码</a></p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="也可以看看"><a aria-hidden="true" tabindex="-1" href="#也可以看看"><span class="icon icon-link"></span></a>也可以看看</h2><div class="wrap-body">
<ul>
<li><a href="https://docs.docker.com/engine/reference/builder/">Dockerfile reference</a> <em>(docker.com)</em></li>
<li><a href="./docker.html">Docker 备忘清单</a> <em>(github.io)</em></li>
<li><a href="https://jaywcjlove.github.io/docker-tutorial">Docker入门学习笔记</a> <em>(github.io)</em></li>
<li><a href="https://docs.docker.com/engine/reference/builder/">Dockerfile reference</a> <em>(docker.com)</em></li>
<li><a href="./docker.html">Docker 备忘清单</a> <em>(github.io)</em></li>
<li><a href="https://jaywcjlove.github.io/docker-tutorial">Docker入门学习笔记</a> <em>(github.io)</em></li>
</ul>
</div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

File diff suppressed because one or more lines are too long

View File

@@ -47,138 +47,140 @@
</span></code></pre>
<hr>
<ul>
<li><a href="https://gist.github.com/gr1ev0us/3a9b9d9dbdd38f6379288eb2686fc538">Find 备忘清单</a> <em>(gist.github.com)</em></li>
<li><a href="https://gist.github.com/gr1ev0us/3a9b9d9dbdd38f6379288eb2686fc538">Find 备忘清单</a> <em>(gist.github.com)</em></li>
</ul>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="参数示例"><a aria-hidden="true" tabindex="-1" href="#参数示例"><span class="icon icon-link"></span></a>参数示例</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
<table class="show-header">
<thead>
<tr>
<th>参数</th>
<th>示例</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>-type</code></td>
<td>find . -type d</td>
<td>仅查找目录</td>
</tr>
<tr>
<td><code>-name</code></td>
<td>find . -type f -name "*.txt"</td>
<td>按名称查找文件</td>
</tr>
<tr>
<td><code>-iname</code></td>
<td>find . -type f -iname "hello"</td>
<td>按名称查找文件(不区分大小写)</td>
</tr>
<tr>
<td><code>-size</code></td>
<td>find . -size +1G</td>
<td>查找大于 1G 的文件</td>
</tr>
<tr>
<td><code>-user</code></td>
<td>find . -type d -user jack</td>
<td>查找杰克的文件</td>
</tr>
<tr>
<td><code>-regex</code></td>
<td>find /var -regex '.*/tmp/.*[0-9]*.file'</td>
<td>将正则表达式与查找一起使用</td>
</tr>
<tr>
<td><code>-maxdepth</code></td>
<td>find . -maxdepth 1 -name "a.txt"</td>
<td>在当前目录和子目录中</td>
</tr>
<tr>
<td><code>-mindepth</code></td>
<td>find / -mindepth 3 -maxdepth 5 -name pass</td>
<td>在子目录级别 2 和 4 之间</td>
</tr>
</tbody>
</table><!--rehype:className=show-header-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="参数示例"><a aria-hidden="true" tabindex="-1" href="#参数示例"><span class="icon icon-link"></span></a>参数示例</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<table class="show-header"><thead><tr><th>参数</th><th>示例</th><th>描述</th></tr></thead><tbody><tr><td><code>-type</code></td><td>find . -type d</td><td>仅查找目录</td></tr><tr><td><code>-name</code></td><td>find . -type f -name "*.txt"</td><td>按名称查找文件</td></tr><tr><td><code>-iname</code></td><td>find . -type f -iname "hello"</td><td>按名称查找文件(不区分大小写)</td></tr><tr><td><code>-size</code></td><td>find . -size +1G</td><td>查找大于 1G 的文件</td></tr><tr><td><code>-user</code></td><td>find . -type d -user jack</td><td>查找杰克的文件</td></tr><tr><td><code>-regex</code></td><td>find /var -regex '.*/tmp/.*[0-9]*.file'</td><td>将正则表达式与查找一起使用</td></tr><tr><td><code>-maxdepth</code></td><td>find . -maxdepth 1 -name "a.txt"</td><td>在当前目录和子目录中</td></tr><tr><td><code>-mindepth</code></td><td>find / -mindepth 3 -maxdepth 5 -name pass</td><td>在子目录级别 2 和 4 之间</td></tr></tbody></table>
<!--rehype:className=show-header-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="类型"><a aria-hidden="true" tabindex="-1" href="#类型"><span class="icon icon-link"></span></a>类型</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>-type d</code></td>
<td>目录</td>
</tr>
<tr>
<td><code>-type f</code></td>
<td>文件</td>
</tr>
<tr>
<td><code>-type l</code></td>
<td>符号链接</td>
</tr>
<tr>
<td><code>-type b</code></td>
<td>缓冲块</td>
</tr>
<tr>
<td><code>-type c</code></td>
<td>无缓冲字符</td>
</tr>
<tr>
<td><code>-type p</code></td>
<td>命名管道</td>
</tr>
<tr>
<td><code>-type s</code></td>
<td>插座</td>
</tr>
</tbody>
</table>
<table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><code>-type d</code></td><td>目录</td></tr><tr><td><code>-type f</code></td><td>文件</td></tr><tr><td><code>-type l</code></td><td>符号链接</td></tr><tr><td><code>-type b</code></td><td>缓冲块</td></tr><tr><td><code>-type c</code></td><td>无缓冲字符</td></tr><tr><td><code>-type p</code></td><td>命名管道</td></tr><tr><td><code>-type s</code></td><td>插座</td></tr></tbody></table>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="大小"><a aria-hidden="true" tabindex="-1" href="#大小"><span class="icon icon-link"></span></a>大小</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>-size b</code></td>
<td>512 字节块(默认)</td>
</tr>
<tr>
<td><code>-size c</code></td>
<td>字节</td>
</tr>
<tr>
<td><code>-size k</code></td>
<td>千字节</td>
</tr>
<tr>
<td><code>-size M</code></td>
<td>兆字节</td>
</tr>
<tr>
<td><code>-size G</code></td>
<td>千兆字节</td>
</tr>
<tr>
<td><code>-size T</code></td>
<td>太字节_仅限 BSD_</td>
</tr>
<tr>
<td><code>-size P</code></td>
<td>PB <em>(仅 BSD</em></td>
</tr>
</tbody>
</table>
<table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><code>-size b</code></td><td>512 字节块(默认)</td></tr><tr><td><code>-size c</code></td><td>字节</td></tr><tr><td><code>-size k</code></td><td>千字节</td></tr><tr><td><code>-size M</code></td><td>兆字节</td></tr><tr><td><code>-size G</code></td><td>千兆字节</td></tr><tr><td><code>-size T</code></td><td>太字节_仅限 BSD_</td></tr><tr><td><code>-size P</code></td><td>PB <em>(仅 BSD</em></td></tr></tbody></table>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="大小--"><a aria-hidden="true" tabindex="-1" href="#大小--"><span class="icon icon-link"></span></a>大小 +/-</h3><div class="wrap-body">
<p>查找所有大于 10MB 的文件</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">find</span> / <span class="token parameter variable">-size</span> +10M
@@ -246,11 +248,13 @@
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="多个文件名"><a aria-hidden="true" tabindex="-1" href="#多个文件名"><span class="icon icon-link"></span></a>多个文件名</h3><div class="wrap-body">
<pre class="wrap-text "><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">find</span> <span class="token builtin class-name">.</span> <span class="token parameter variable">-type</span> f <span class="token punctuation">\</span><span class="token punctuation">(</span> <span class="token parameter variable">-name</span> <span class="token string">"*.sh"</span> <span class="token parameter variable">-o</span> <span class="token parameter variable">-name</span> <span class="token string">"*.txt"</span> <span class="token punctuation">\</span><span class="token punctuation">)</span>
</span></code></pre><!--rehype:className=wrap-text -->
</span></code></pre>
<!--rehype:className=wrap-text -->
<p>查找带有 <code>.sh</code><code>.txt</code> 扩展名的文件</p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="多个目录"><a aria-hidden="true" tabindex="-1" href="#多个目录"><span class="icon icon-link"></span></a>多个目录</h3><div class="wrap-body">
<pre class="wrap-text "><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">find</span> /opt /usr /var <span class="token parameter variable">-name</span> foo.scala <span class="token parameter variable">-type</span> f
</span></code></pre><!--rehype:className=wrap-text -->
</span></code></pre>
<!--rehype:className=wrap-text -->
<p>查找具有多个目录的文件</p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="空的"><a aria-hidden="true" tabindex="-1" href="#空的"><span class="icon icon-link"></span></a>空的</h3><div class="wrap-body">
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">find</span> <span class="token builtin class-name">.</span> <span class="token parameter variable">-type</span> d <span class="token parameter variable">-empty</span>
@@ -259,94 +263,89 @@
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">find</span> <span class="token builtin class-name">.</span> <span class="token parameter variable">-type</span> f <span class="token parameter variable">-empty</span> <span class="token parameter variable">-delete</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="查找日期和时间"><a aria-hidden="true" tabindex="-1" href="#查找日期和时间"><span class="icon icon-link"></span></a>查找日期和时间</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="方法"><a aria-hidden="true" tabindex="-1" href="#方法"><span class="icon icon-link"></span></a>方法</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
<table>
<thead>
<tr>
<th>Option</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>atime</code></td>
<td>访问时间(上次文件
<yel>打开</yel>
</td>
</tr>
<tr>
<td><code>mtime</code></td>
<td>修改时间(上次文件
<yel>内容被修改</yel>
</td>
</tr>
<tr>
<td><code>ctime</code></td>
<td>更改时间(上次文件
<yel>inode 已更改</yel>
</td>
</tr>
</tbody>
</table>
</div></div><div class="h2wrap-body"><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="方法"><a aria-hidden="true" tabindex="-1" href="#方法"><span class="icon icon-link"></span></a>方法</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<table><thead><tr><th>Option</th><th>Description</th></tr></thead><tbody><tr><td><code>atime</code></td><td>访问时间(上次文件<yel>打开</yel></td></tr><tr><td><code>mtime</code></td><td>修改时间(上次文件<yel>内容被修改</yel></td></tr><tr><td><code>ctime</code></td><td>更改时间(上次文件 <yel>inode 已更改</yel></td></tr></tbody></table>
</div></div><div class="h3wrap-body"><div class="wrap"><div class="wrap-header h4wrap"><h4 id="示例"><a aria-hidden="true" tabindex="-1" href="#示例"><span class="icon icon-link"></span></a>示例</h4><div class="wrap-body">
<table>
<thead>
<tr>
<th>Option</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>-mtime +0</code></td>
<td>24 小时前修改</td>
</tr>
<tr>
<td><code>-mtime 0</code></td>
<td>从现在到 1 天前修改</td>
</tr>
<tr>
<td><code>-mtime -1</code></td>
<td>不到 1 天前修改(与 <code>-mtime 0</code> 相同)</td>
</tr>
<tr>
<td><code>-mtime 1</code></td>
<td>24 至 48 小时前修改</td>
</tr>
<tr>
<td><code>-mtime +1</code></td>
<td>超过 48 小时前修改</td>
</tr>
<tr>
<td><code>-mtime +1w</code></td>
<td>上次修改时间超过 1 周前</td>
</tr>
<tr>
<td><code>-atime 0</code></td>
<td>从现在到 24 小时前最后一次访问</td>
</tr>
<tr>
<td><code>-atime +0</code></td>
<td>访问时间超过 24 小时</td>
</tr>
<tr>
<td><code>-atime 1</code></td>
<td>在 24 至 48 小时前访问</td>
</tr>
<tr>
<td><code>-atime +1</code></td>
<td>访问时间超过 48 小时</td>
</tr>
<tr>
<td><code>-atime -1</code></td>
<td>不到 24 小时前访问过(与 <code>-atime 0</code> 相同)</td>
</tr>
<tr>
<td><code>-ctime -6h30m</code></td>
<td>文件状态在过去 6 小时 30 分钟内发生变化</td>
</tr>
</tbody>
</table>
<table><thead><tr><th>Option</th><th>Description</th></tr></thead><tbody><tr><td><code>-mtime +0</code></td><td>24 小时前修改</td></tr><tr><td><code>-mtime 0</code></td><td>从现在到 1 天前修改</td></tr><tr><td><code>-mtime -1</code></td><td>不到 1 天前修改(与 <code>-mtime 0</code> 相同)</td></tr><tr><td><code>-mtime 1</code></td><td>24 至 48 小时前修改</td></tr><tr><td><code>-mtime +1</code></td><td>超过 48 小时前修改</td></tr><tr><td><code>-mtime +1w</code></td><td>上次修改时间超过 1 周前</td></tr><tr><td><code>-atime 0</code></td><td>从现在到 24 小时前最后一次访问</td></tr><tr><td><code>-atime +0</code></td><td>访问时间超过 24 小时</td></tr><tr><td><code>-atime 1</code></td><td>在 24 至 48 小时前访问</td></tr><tr><td><code>-atime +1</code></td><td>访问时间超过 48 小时</td></tr><tr><td><code>-atime -1</code></td><td>不到 24 小时前访问过(与 <code>-atime 0</code> 相同)</td></tr><tr><td><code>-ctime -6h30m</code></td><td>文件状态在过去 6 小时 30 分钟内发生变化</td></tr></tbody></table>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="更多示例"><a aria-hidden="true" tabindex="-1" href="#更多示例"><span class="icon icon-link"></span></a>更多示例</h3><div class="wrap-body">
<p>查找最近 50 天修改的文件</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">find</span> / <span class="token parameter variable">-mtime</span> <span class="token number">50</span>
@@ -366,8 +365,10 @@
<p>查找最近 1 小时内访问过的文件</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">find</span> / <span class="token parameter variable">-amin</span> <span class="token parameter variable">-60</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="查找并"><a aria-hidden="true" tabindex="-1" href="#查找并"><span class="icon icon-link"></span></a>查找并</h2><div class="wrap-body"><!--rehype:body-class=cols-2-->
</div></div><div class="h2wrap-body cols-2"><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="查找和删除"><a aria-hidden="true" tabindex="-1" href="#查找和删除"><span class="icon icon-link"></span></a>查找和删除</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-3-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="查找并"><a aria-hidden="true" tabindex="-1" href="#查找并"><span class="icon icon-link"></span></a>查找并</h2><div class="wrap-body">
<!--rehype:body-class=cols-2-->
</div></div><div class="h2wrap-body cols-2"><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="查找和删除"><a aria-hidden="true" tabindex="-1" href="#查找和删除"><span class="icon icon-link"></span></a>查找和删除</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-3-->
<p>查找并删除多个文件</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">find</span> <span class="token builtin class-name">.</span> <span class="token parameter variable">-type</span> f <span class="token parameter variable">-name</span> <span class="token string">"*.mp3"</span> <span class="token parameter variable">-exec</span> <span class="token function">rm</span> <span class="token parameter variable">-f</span> <span class="token punctuation">{</span><span class="token punctuation">}</span> <span class="token punctuation">\</span><span class="token punctuation">;</span>
</span></code></pre>
@@ -405,7 +406,8 @@
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">find</span> <span class="token builtin class-name">.</span> <span class="token parameter variable">-printf</span> <span class="token string">"%T+<span class="token entity" title="\t">\t</span>%p<span class="token entity" title="\n">\n</span>"</span> <span class="token operator">|</span> <span class="token function">sort</span>
</span><span class="code-line line-number" line="2">$ <span class="token function">find</span> <span class="token builtin class-name">.</span> <span class="token parameter variable">-printf</span> <span class="token string">"%T+<span class="token entity" title="\t">\t</span>%p<span class="token entity" title="\n">\n</span>"</span> <span class="token operator">|</span> <span class="token function">sort</span> <span class="token parameter variable">-r</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="查找和-chmod"><a aria-hidden="true" tabindex="-1" href="#查找和-chmod"><span class="icon icon-link"></span></a>查找和 chmod</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="查找和-chmod"><a aria-hidden="true" tabindex="-1" href="#查找和-chmod"><span class="icon icon-link"></span></a>查找和 chmod</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<p>查找文件并将权限设置为 644。</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">find</span> / <span class="token parameter variable">-type</span> f <span class="token parameter variable">-perm</span> 0777 <span class="token parameter variable">-print</span> <span class="token parameter variable">-exec</span> <span class="token function">chmod</span> <span class="token number">644</span> <span class="token punctuation">{</span><span class="token punctuation">}</span> <span class="token punctuation">\</span><span class="token punctuation">;</span>
</span></code></pre>
@@ -416,6 +418,5 @@
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">find</span> <span class="token builtin class-name">.</span> <span class="token parameter variable">-type</span> f <span class="token parameter variable">-name</span> <span class="token string">"*.java"</span> <span class="token operator">|</span> <span class="token function">xargs</span> <span class="token function">tar</span> cvf myfile.tar
</span><span class="code-line line-number" line="2">$ <span class="token function">find</span> <span class="token builtin class-name">.</span> <span class="token parameter variable">-type</span> f <span class="token parameter variable">-name</span> <span class="token string">"*.java"</span> <span class="token operator">|</span> <span class="token function">xargs</span> <span class="token function">tar</span> rvf myfile.tar
</span></code></pre>
</div></div></div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

View File

@@ -47,7 +47,8 @@
<p>将存储库克隆到指定目录</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">git</span> clone git_url 指定目录
</span></code></pre>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="做出改变"><a aria-hidden="true" tabindex="-1" href="#做出改变"><span class="icon icon-link"></span></a>做出改变</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="做出改变"><a aria-hidden="true" tabindex="-1" href="#做出改变"><span class="icon icon-link"></span></a>做出改变</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<p>在工作目录中<strong>显示</strong>修改后的文件,为您的下一次提交暂存</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">git</span> status
</span></code></pre>
@@ -223,8 +224,10 @@
</span></code></pre>
<p>打印出很酷的日志可视化</p>
<pre class="wrap-text"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">git</span> log <span class="token parameter variable">--pretty</span><span class="token operator">=</span>oneline <span class="token parameter variable">--graph</span> <span class="token parameter variable">--decorate</span> <span class="token parameter variable">--all</span>
</span></code></pre><!--rehype:className=wrap-text-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="分支"><a aria-hidden="true" tabindex="-1" href="#分支"><span class="icon icon-link"></span></a>分支</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</span></code></pre>
<!--rehype:className=wrap-text-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="分支"><a aria-hidden="true" tabindex="-1" href="#分支"><span class="icon icon-link"></span></a>分支</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<p>列出所有分支及其上游</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">git</span> branch <span class="token parameter variable">-vv</span>
</span></code></pre>
@@ -263,7 +266,8 @@
</span><span class="code-line line-number" line="5"><span class="token comment"># 远程有俩相同目录,通过这种方式清除掉,然后提交记录</span>
</span><span class="code-line line-number" line="6">$ <span class="token function">git</span> <span class="token function">rm</span> <span class="token parameter variable">-r</span> <span class="token parameter variable">--cached</span> <span class="token operator">&#x3C;</span>目录/文件<span class="token operator">></span>
</span></code></pre>
</div></div></div><div class="wrap row-span-4"><div class="wrap-header h3wrap"><h3 id="修改远程-commit-记录"><a aria-hidden="true" tabindex="-1" href="#修改远程-commit-记录"><span class="icon icon-link"></span></a>修改远程 Commit 记录</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-4-->
</div></div></div><div class="wrap row-span-4"><div class="wrap-header h3wrap"><h3 id="修改远程-commit-记录"><a aria-hidden="true" tabindex="-1" href="#修改远程-commit-记录"><span class="icon icon-link"></span></a>修改远程 Commit 记录</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-4-->
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">git</span> rebase <span class="token parameter variable">-i</span> HEAD~3
</span><span class="code-line line-number" line="2"><span class="token comment"># 表示要修改当前版本的倒数第三次状态</span>
</span><span class="code-line line-number" line="3"><span class="token comment"># 将要更改的记录行首单词 pick 改为 edit</span>
@@ -321,7 +325,8 @@
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="删除已经合并到-master-的分支"><a aria-hidden="true" tabindex="-1" href="#删除已经合并到-master-的分支"><span class="icon icon-link"></span></a>删除已经合并到 master 的分支</h3><div class="wrap-body">
<pre class="wrap-text"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">git</span> branch <span class="token parameter variable">--merged</span> master <span class="token operator">|</span> <span class="token function">grep</span> <span class="token parameter variable">-v</span> <span class="token string">'^\*\| master'</span> <span class="token operator">|</span> <span class="token function">xargs</span> <span class="token parameter variable">-n</span> <span class="token number">1</span> <span class="token function">git</span> branch <span class="token parameter variable">-d</span>
</span></code></pre><!--rehype:className=wrap-text-->
</span></code></pre>
<!--rehype:className=wrap-text-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="中文乱码的解决方案"><a aria-hidden="true" tabindex="-1" href="#中文乱码的解决方案"><span class="icon icon-link"></span></a>中文乱码的解决方案</h3><div class="wrap-body">
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">git</span> config <span class="token parameter variable">--global</span> core.quotepath <span class="token boolean">false</span>
</span></code></pre>
@@ -331,6 +336,5 @@
</span><span class="code-line line-number" line="3"><span class="token comment"># 将 A 分支 &#x3C;hash-id> 的内容 pick 到 B 分支</span>
</span><span class="code-line line-number" line="4">$ <span class="token function">git</span> cherry-pick <span class="token operator">&#x3C;</span>hash-id<span class="token operator">></span>
</span></code></pre>
</div></div></div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

File diff suppressed because one or more lines are too long

View File

@@ -39,222 +39,224 @@
</div></header><div class="h1wrap-body"><div class="wrap"><div class="wrap-header h2wrap"><h2 id="http-状态码"><a aria-hidden="true" tabindex="-1" href="#http-状态码"><span class="icon icon-link"></span></a>HTTP 状态码</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="means"><a aria-hidden="true" tabindex="-1" href="#means"><span class="icon icon-link"></span></a>Means</h3><div class="wrap-body">
<ul>
<li><a href="#1xx-information" class="tooltip">1xx: Informational<em class="tooltiptext">这意味着已收到请求并且该过程正在继续。</em></a></li>
<li><a href="#2xx-successful" class="tooltip">2xx: Success<em class="tooltiptext">这意味着该操作已成功接收、理解和接受。</em></a></li>
<li><a href="#3xx-redirection" class="tooltip">3xx: Redirection<em class="tooltiptext">这意味着必须采取进一步行动才能完成请求。</em></a></li>
<li><a href="#4xx-client-error" class="tooltip">4xx: Client Error<em class="tooltiptext">这意味着请求包含不正确的语法或无法完成。</em></a></li>
<li><a href="#5xx-server-error" class="tooltip">5xx: Server Error<em class="tooltiptext">这意味着服务器未能满足明显有效的请求。</em></a></li>
<li><a href="#1xx-information" class="tooltip">1xx: Informational<em class="tooltiptext">这意味着已收到请求并且该过程正在继续。</em></a></li>
<li><a href="#2xx-successful" class="tooltip">2xx: Success<em class="tooltiptext">这意味着该操作已成功接收、理解和接受。</em></a></li>
<li><a href="#3xx-redirection" class="tooltip">3xx: Redirection<em class="tooltiptext">这意味着必须采取进一步行动才能完成请求。</em></a></li>
<li><a href="#4xx-client-error" class="tooltip">4xx: Client Error<em class="tooltiptext">这意味着请求包含不正确的语法或无法完成。</em></a></li>
<li><a href="#5xx-server-error" class="tooltip">5xx: Server Error<em class="tooltiptext">这意味着服务器未能满足明显有效的请求。</em></a></li>
</ul>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="2xx-成功的"><a aria-hidden="true" tabindex="-1" href="#2xx-成功的"><span class="icon icon-link"></span></a>2xx. 成功的</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="2xx-成功的"><a aria-hidden="true" tabindex="-1" href="#2xx-成功的"><span class="icon icon-link"></span></a>2xx. 成功的</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<ul>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1" class="tooltip">200: OK<em class="tooltiptext">请求没问题。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.3.2" class="tooltip">201: Created<em class="tooltiptext">请求完成,并创建了一个新资源。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.3.3" class="tooltip">202: Accepted<em class="tooltiptext">接受请求进行处理,但处理未完成。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.3.4" class="tooltip">203: Non-Authoritative Information<em class="tooltiptext">实体标头中的信息来自本地或第三方副本,而不是来自原始服务器。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.3.5" class="tooltip">204: No Content<em class="tooltiptext">响应中给出了状态码和标头,但响应中没有实体主体。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.3.6" class="tooltip">205: Reset Content<em class="tooltiptext">浏览器应清除用于此事务的表单以获取其他输入。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7233#section-4.1" class="tooltip">206: Partial Content<em class="tooltiptext">服务器正在返回请求大小的部分数据。 用于响应指定 Range 标头的请求。 服务器必须使用 Content-Range 标头指定响应中包含的范围。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1" class="tooltip">200: OK<em class="tooltiptext">请求没问题。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.3.2" class="tooltip">201: Created<em class="tooltiptext">请求完成,并创建了一个新资源。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.3.3" class="tooltip">202: Accepted<em class="tooltiptext">接受请求进行处理,但处理未完成。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.3.4" class="tooltip">203: Non-Authoritative Information<em class="tooltiptext">实体标头中的信息来自本地或第三方副本,而不是来自原始服务器。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.3.5" class="tooltip">204: No Content<em class="tooltiptext">响应中给出了状态码和标头,但响应中没有实体主体。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.3.6" class="tooltip">205: Reset Content<em class="tooltiptext">浏览器应清除用于此事务的表单以获取其他输入。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7233#section-4.1" class="tooltip">206: Partial Content<em class="tooltiptext">服务器正在返回请求大小的部分数据。 用于响应指定 Range 标头的请求。 服务器必须使用 Content-Range 标头指定响应中包含的范围。</em></a></li>
</ul>
</div></div></div><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="4xx-客户端错误"><a aria-hidden="true" tabindex="-1" href="#4xx-客户端错误"><span class="icon icon-link"></span></a>4xx. 客户端错误</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-3-->
</div></div></div><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="4xx-客户端错误"><a aria-hidden="true" tabindex="-1" href="#4xx-客户端错误"><span class="icon icon-link"></span></a>4xx. 客户端错误</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-3-->
<ul>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.1" class="tooltip">400: Bad Request<em class="tooltiptext">服务器不理解该请求。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7235#section-3.1" class="tooltip">401: Unauthorized<em class="tooltiptext">请求的页面需要用户名和密码。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.2" class="tooltip">402: Payment Required<em class="tooltiptext">您还不能使用此代码。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.3" class="tooltip">403: Forbidden<em class="tooltiptext">禁止访问请求的页面。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.4" class="tooltip">404: Not Found<em class="tooltiptext">服务器找不到请求的页面。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.5" class="tooltip">405: Method Not Allowed<em class="tooltiptext">请求中指定的方法是不允许的。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.6" class="tooltip">406: Not Acceptable<em class="tooltiptext">服务器只能生成客户端不接受的响应。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7235#section-3.2" class="tooltip">407: Proxy Authentication Required<em class="tooltiptext">您必须先通过代理服务器进行身份验证,然后才能提供此请求。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.7" class="tooltip">408: Request Timeout<em class="tooltiptext">请求花费的时间比服务器准备等待的时间长。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.8" class="tooltip">409: Conflict<em class="tooltiptext">由于冲突,请求无法完成。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.9" class="tooltip">410: Gone<em class="tooltiptext">请求的页面不再可用。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.10" class="tooltip">411: Length Required<em class="tooltiptext">“Content-Length”未定义。 没有它,服务器将不会接受请求。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7232#section-4.2" class="tooltip">412: Precondition Failed<em class="tooltiptext">请求中给出的前提条件被服务器评估为 false。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.11" class="tooltip">413: Payload Too Large<em class="tooltiptext">服务器不会接受请求,因为请求实体太大。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.12" class="tooltip">414: URI Too Long<em class="tooltiptext">服务器不会接受请求,因为 url 太长。 当您将“发布”请求转换为具有长查询信息的“获取”请求时发生。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.13" class="tooltip">415: Unsupported Media Type<em class="tooltiptext">服务器不会接受请求,因为不支持媒体类型。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7233#section-4.4" class="tooltip">416: Range Not Satisfiable<em class="tooltiptext">请求的字节范围不可用且超出范围。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.14" class="tooltip">417: Expectation Failed<em class="tooltiptext">此服务器无法满足在 Expect 请求标头字段中给出的期望。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.15" class="tooltip">426: Upgrade Required<em class="tooltiptext">服务器拒绝使用当前协议执行请求,但在客户端升级到不同协议后可能愿意这样做。</em></a></li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc7725#section-3" class="tooltip">451: Unavailable For Legal Reasons<em class="tooltiptext">此状态代码表示服务器拒绝访问资源作为法律要求的结果。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.1" class="tooltip">400: Bad Request<em class="tooltiptext">服务器不理解该请求。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7235#section-3.1" class="tooltip">401: Unauthorized<em class="tooltiptext">请求的页面需要用户名和密码。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.2" class="tooltip">402: Payment Required<em class="tooltiptext">您还不能使用此代码。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.3" class="tooltip">403: Forbidden<em class="tooltiptext">禁止访问请求的页面。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.4" class="tooltip">404: Not Found<em class="tooltiptext">服务器找不到请求的页面。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.5" class="tooltip">405: Method Not Allowed<em class="tooltiptext">请求中指定的方法是不允许的。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.6" class="tooltip">406: Not Acceptable<em class="tooltiptext">服务器只能生成客户端不接受的响应。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7235#section-3.2" class="tooltip">407: Proxy Authentication Required<em class="tooltiptext">您必须先通过代理服务器进行身份验证,然后才能提供此请求。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.7" class="tooltip">408: Request Timeout<em class="tooltiptext">请求花费的时间比服务器准备等待的时间长。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.8" class="tooltip">409: Conflict<em class="tooltiptext">由于冲突,请求无法完成。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.9" class="tooltip">410: Gone<em class="tooltiptext">请求的页面不再可用。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.10" class="tooltip">411: Length Required<em class="tooltiptext">“Content-Length”未定义。 没有它,服务器将不会接受请求。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7232#section-4.2" class="tooltip">412: Precondition Failed<em class="tooltiptext">请求中给出的前提条件被服务器评估为 false。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.11" class="tooltip">413: Payload Too Large<em class="tooltiptext">服务器不会接受请求,因为请求实体太大。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.12" class="tooltip">414: URI Too Long<em class="tooltiptext">服务器不会接受请求,因为 url 太长。 当您将“发布”请求转换为具有长查询信息的“获取”请求时发生。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.13" class="tooltip">415: Unsupported Media Type<em class="tooltiptext">服务器不会接受请求,因为不支持媒体类型。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7233#section-4.4" class="tooltip">416: Range Not Satisfiable<em class="tooltiptext">请求的字节范围不可用且超出范围。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.14" class="tooltip">417: Expectation Failed<em class="tooltiptext">此服务器无法满足在 Expect 请求标头字段中给出的期望。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.5.15" class="tooltip">426: Upgrade Required<em class="tooltiptext">服务器拒绝使用当前协议执行请求,但在客户端升级到不同协议后可能愿意这样做。</em></a></li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc7725#section-3" class="tooltip">451: Unavailable For Legal Reasons<em class="tooltiptext">此状态代码表示服务器拒绝访问资源作为法律要求的结果。</em></a></li>
</ul>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="1xx-信息"><a aria-hidden="true" tabindex="-1" href="#1xx-信息"><span class="icon icon-link"></span></a>1xx. 信息</h3><div class="wrap-body">
<ul>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.2.1" class="tooltip">100: Continue<em class="tooltiptext">服务器只收到了请求的一部分,但只要没有被拒绝,客户端就应该继续请求。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.2.2" class="tooltip">101: Switching Protocols<em class="tooltiptext">服务器切换协议。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc2518#section-10.1" class="tooltip">102: Processing<em class="tooltiptext">用于通知客户端服务器已接受完整请求但尚未完成的临时响应。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.2.1" class="tooltip">100: Continue<em class="tooltiptext">服务器只收到了请求的一部分,但只要没有被拒绝,客户端就应该继续请求。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.2.2" class="tooltip">101: Switching Protocols<em class="tooltiptext">服务器切换协议。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc2518#section-10.1" class="tooltip">102: Processing<em class="tooltiptext">用于通知客户端服务器已接受完整请求但尚未完成的临时响应。</em></a></li>
</ul>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="3xx-重定向"><a aria-hidden="true" tabindex="-1" href="#3xx-重定向"><span class="icon icon-link"></span></a>3xx. 重定向</h3><div class="wrap-body">
<ul>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.4.1" class="tooltip">300: Multiple Choices<em class="tooltiptext">一个链接列表。 用户可以选择一个链接并转到该位置。 最多五个地址。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.4.2" class="tooltip">301: Moved Permanently<em class="tooltiptext">请求的页面已移至新的 url 。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.4.3" class="tooltip">302: Found<em class="tooltiptext">请求的页面已临时移动到新的 url 。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.4.4" class="tooltip">303: See Other<em class="tooltiptext">请求的页面可以在不同的 url 下找到。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7232#section-4.1" class="tooltip">304: Not Modified<em class="tooltiptext">这是对 If-Modified-Since 或 If-None-Match 标头的响应代码,其中 URL 自指定日期以来未修改。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.4.5" class="tooltip">305: Use Proxy<em class="tooltiptext">请求的 URL 必须通过 Location 标头中提到的代理访问。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.4.6" class="tooltip">306: Unused<em class="tooltiptext">此代码在以前的版本中使用过。 它不再使用,但代码被保留。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.4.7" class="tooltip">307: Temporary Redirect<em class="tooltiptext">请求的页面已临时移动到新的 url。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.4.1" class="tooltip">300: Multiple Choices<em class="tooltiptext">一个链接列表。 用户可以选择一个链接并转到该位置。 最多五个地址。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.4.2" class="tooltip">301: Moved Permanently<em class="tooltiptext">请求的页面已移至新的 url 。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.4.3" class="tooltip">302: Found<em class="tooltiptext">请求的页面已临时移动到新的 url 。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.4.4" class="tooltip">303: See Other<em class="tooltiptext">请求的页面可以在不同的 url 下找到。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7232#section-4.1" class="tooltip">304: Not Modified<em class="tooltiptext">这是对 If-Modified-Since 或 If-None-Match 标头的响应代码,其中 URL 自指定日期以来未修改。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.4.5" class="tooltip">305: Use Proxy<em class="tooltiptext">请求的 URL 必须通过 Location 标头中提到的代理访问。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.4.6" class="tooltip">306: Unused<em class="tooltiptext">此代码在以前的版本中使用过。 它不再使用,但代码被保留。</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.4.7" class="tooltip">307: Temporary Redirect<em class="tooltiptext">请求的页面已临时移动到新的 url。</em></a></li>
</ul>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="5xx-服务器错误"><a aria-hidden="true" tabindex="-1" href="#5xx-服务器错误"><span class="icon icon-link"></span></a>5xx. 服务器错误</h3><div class="wrap-body">
<ul>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.6.1" class="tooltip">500: Internal Server Error<em class="tooltiptext">请求未完成。 服务器遇到了意外情况</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.6.2" class="tooltip">501: Not Implemented<em class="tooltiptext">请求未完成。 服务器不支持所需的功能</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.6.3" class="tooltip">502: Bad Gateway<em class="tooltiptext">请求未完成。 服务器收到来自上游服务器的无效响应</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.6.4" class="tooltip">503: Service Unavailable<em class="tooltiptext">请求未完成。 服务器暂时超载或停机</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.6.5" class="tooltip">504: Gateway Timeout<em class="tooltiptext">网关已超时</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.6.6" class="tooltip">505: HTTP Version Not Supported<em class="tooltiptext">服务器不支持“http 协议”版本</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.6.1" class="tooltip">500: Internal Server Error<em class="tooltiptext">请求未完成。 服务器遇到了意外情况</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.6.2" class="tooltip">501: Not Implemented<em class="tooltiptext">请求未完成。 服务器不支持所需的功能</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.6.3" class="tooltip">502: Bad Gateway<em class="tooltiptext">请求未完成。 服务器收到来自上游服务器的无效响应</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.6.4" class="tooltip">503: Service Unavailable<em class="tooltiptext">请求未完成。 服务器暂时超载或停机</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.6.5" class="tooltip">504: Gateway Timeout<em class="tooltiptext">网关已超时</em></a></li>
<li><a href="https://tools.ietf.org/html/rfc7231#section-6.6.6" class="tooltip">505: HTTP Version Not Supported<em class="tooltiptext">服务器不支持“http 协议”版本</em></a></li>
</ul>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="restful-api"><a aria-hidden="true" tabindex="-1" href="#restful-api"><span class="icon icon-link"></span></a>RESTful API</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>:-</th>
<th>-</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>200</code></td>
<td>返回成功GETDELETE 请求成功。</td>
</tr>
<tr>
<td><code>204</code></td>
<td>无内容POST 请求成功。</td>
</tr>
<tr>
<td><code>301</code></td>
<td>永久重定向。</td>
</tr>
<tr>
<td><code>302/307</code></td>
<td>临时重定向。</td>
</tr>
<tr>
<td><code>304</code></td>
<td>未修改,自上次请求以来。</td>
</tr>
<tr>
<td><code>331</code></td>
<td>用户名正确,需要密码。</td>
</tr>
<tr>
<td><code>332</code></td>
<td>需要登录帐户。</td>
</tr>
<tr>
<td><code>400</code></td>
<td>错误请求,缺少 API 请求的必需属性。</td>
</tr>
<tr>
<td><code>401</code></td>
<td>未授权,无效凭据进行身份验证将。</td>
</tr>
<tr>
<td><code>403</code></td>
<td>禁地,该请求不被允许。</td>
</tr>
<tr>
<td><code>404</code></td>
<td>未找到,无法访问资源</td>
</tr>
<tr>
<td><code>405</code></td>
<td>方法不允许,不支持该请求。</td>
</tr>
<tr>
<td><code>409</code></td>
<td>冲突,冲突资源已存在。</td>
</tr>
<tr>
<td><code>412</code></td>
<td>该请求被拒绝。</td>
</tr>
<tr>
<td><code>422</code></td>
<td>无法处理,无法处理该实体。</td>
</tr>
<tr>
<td><code>429</code></td>
<td>请求过多,用户超出了应用速率限制。</td>
</tr>
<tr>
<td><code>500</code></td>
<td>服务器错误,在处理请求时,服务器出现问题。</td>
</tr>
<tr>
<td><code>530</code></td>
<td>未登录。</td>
</tr>
</tbody>
</table>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="5xx-永久性否定"><a aria-hidden="true" tabindex="-1" href="#5xx-永久性否定"><span class="icon icon-link"></span></a>5xx 永久性否定</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
<table>
<thead>
<tr>
<th>:-</th>
<th>-</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>500</code></td>
<td>语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。</td>
</tr>
<tr>
<td><code>501</code></td>
<td>在参数中有语法错误。</td>
</tr>
<tr>
<td><code>502</code></td>
<td>未执行命令。</td>
</tr>
<tr>
<td><code>503</code></td>
<td>错误的命令序列。</td>
</tr>
<tr>
<td><code>504</code></td>
<td>未执行该参数的命令。</td>
</tr>
<tr>
<td><code>530</code></td>
<td>未登录。</td>
</tr>
<tr>
<td><code>532</code></td>
<td>存储文件需要帐户。</td>
</tr>
<tr>
<td><code>550</code></td>
<td>未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)。</td>
</tr>
<tr>
<td><code>551</code></td>
<td>请求的操作异常终止:未知的页面类型。</td>
</tr>
<tr>
<td><code>552</code></td>
<td>请求的文件操作异常终止:超出存储分配(对于当前目录或数据集)。</td>
</tr>
<tr>
<td><code>553</code></td>
<td>未执行请求的操作。不允许的文件名。</td>
</tr>
</tbody>
</table>
<table><thead><tr><th>:-</th><th>-</th></tr></thead><tbody><tr><td><code>200</code></td><td>返回成功GETDELETE 请求成功。</td></tr><tr><td><code>204</code></td><td>无内容POST 请求成功。</td></tr><tr><td><code>301</code></td><td>永久重定向。</td></tr><tr><td><code>302/307</code></td><td>临时重定向。</td></tr><tr><td><code>304</code></td><td>未修改,自上次请求以来。</td></tr><tr><td><code>331</code></td><td>用户名正确,需要密码。</td></tr><tr><td><code>332</code></td><td>需要登录帐户。</td></tr><tr><td><code>400</code></td><td>错误请求,缺少 API 请求的必需属性。</td></tr><tr><td><code>401</code></td><td>未授权,无效凭据进行身份验证将。</td></tr><tr><td><code>403</code></td><td>禁地,该请求不被允许。</td></tr><tr><td><code>404</code></td><td>未找到,无法访问资源</td></tr><tr><td><code>405</code></td><td>方法不允许,不支持该请求。</td></tr><tr><td><code>409</code></td><td>冲突,冲突资源已存在。</td></tr><tr><td><code>412</code></td><td>该请求被拒绝。</td></tr><tr><td><code>422</code></td><td>无法处理,无法处理该实体。</td></tr><tr><td><code>429</code></td><td>请求过多,用户超出了应用速率限制。</td></tr><tr><td><code>500</code></td><td>服务器错误,在处理请求时,服务器出现问题。</td></tr><tr><td><code>530</code></td><td>未登录。</td></tr></tbody></table>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="5xx-永久性否定"><a aria-hidden="true" tabindex="-1" href="#5xx-永久性否定"><span class="icon icon-link"></span></a>5xx 永久性否定</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<table><thead><tr><th>:-</th><th>-</th></tr></thead><tbody><tr><td><code>500</code></td><td>语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。</td></tr><tr><td><code>501</code></td><td>在参数中有语法错误。</td></tr><tr><td><code>502</code></td><td>未执行命令。</td></tr><tr><td><code>503</code></td><td>错误的命令序列。</td></tr><tr><td><code>504</code></td><td>未执行该参数的命令。</td></tr><tr><td><code>530</code></td><td>未登录。</td></tr><tr><td><code>532</code></td><td>存储文件需要帐户。</td></tr><tr><td><code>550</code></td><td>未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)。</td></tr><tr><td><code>551</code></td><td>请求的操作异常终止:未知的页面类型。</td></tr><tr><td><code>552</code></td><td>请求的文件操作异常终止:超出存储分配(对于当前目录或数据集)。</td></tr><tr><td><code>553</code></td><td>未执行请求的操作。不允许的文件名。</td></tr></tbody></table>
<p>永久性否定的完成答复,该命令不成功,错误是永久性的。如果客户端重试命令,将再次出现同样的错误。</p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="另见"><a aria-hidden="true" tabindex="-1" href="#另见"><span class="icon icon-link"></span></a>另见</h2><div class="wrap-body">
<ul>
<li><a href="https://jaywcjlove.github.io/handbook/other/HTTP-status-codes.html">常见 HTTP/FTP/WebSocket 错误代码大全</a> <em>(github.io)</em></li>
<li><a href="https://en.wikipedia.org/wiki/List_of_HTTP_status_codes">HTTP 状态码列表</a> <em>(wikipedia.org)</em></li>
<li><a href="https://en.wikipedia.org/wiki/List_of_FTP_server_return_codes">FTP 状态码列表</a> <em>(wikipedia.org)</em></li>
<li><a href="https://developer.mozilla.org/zh-CN/docs/Web/API/CloseEvent">MDN CloseEvent</a> <em>(mozilla.org)</em></li>
<li><a href="https://en.wikipedia.org/wiki/HTTP_404#Custom_error_pages">HTTP 404</a> <em>(wikipedia.org)</em></li>
<li><a href="https://en.wikipedia.org/wiki/List_of_FTP_server_return_codes">List of FTP server return codes</a> <em>(wikipedia.org)</em></li>
<li><a href="https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Overview">HTTP概述</a> <em>(mozilla.org)</em></li>
<li><a href="http://www.getnetgoing.com/HTTP-403.html">Help for HTTP error 403: “Forbidden”</a> <em>(getnetgoing.com)</em></li>
<li><a href="https://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api">实用的 RESTful API 最佳实践</a> <em>(vinaysahni.com)</em></li>
<li><a href="https://jaywcjlove.github.io/handbook/other/HTTP-status-codes.html">常见 HTTP/FTP/WebSocket 错误代码大全</a> <em>(github.io)</em></li>
<li><a href="https://en.wikipedia.org/wiki/List_of_HTTP_status_codes">HTTP 状态码列表</a> <em>(wikipedia.org)</em></li>
<li><a href="https://en.wikipedia.org/wiki/List_of_FTP_server_return_codes">FTP 状态码列表</a> <em>(wikipedia.org)</em></li>
<li><a href="https://developer.mozilla.org/zh-CN/docs/Web/API/CloseEvent">MDN CloseEvent</a> <em>(mozilla.org)</em></li>
<li><a href="https://en.wikipedia.org/wiki/HTTP_404#Custom_error_pages">HTTP 404</a> <em>(wikipedia.org)</em></li>
<li><a href="https://en.wikipedia.org/wiki/List_of_FTP_server_return_codes">List of FTP server return codes</a> <em>(wikipedia.org)</em></li>
<li><a href="https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Overview">HTTP概述</a> <em>(mozilla.org)</em></li>
<li><a href="http://www.getnetgoing.com/HTTP-403.html">Help for HTTP error 403: “Forbidden”</a> <em>(getnetgoing.com)</em></li>
<li><a href="https://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api">实用的 RESTful API 最佳实践</a> <em>(vinaysahni.com)</em></li>
</ul>
</div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

View File

@@ -40,9 +40,9 @@
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="介绍"><a aria-hidden="true" tabindex="-1" href="#介绍"><span class="icon icon-link"></span></a>介绍</h3><div class="wrap-body">
<p>JavaScript 是一种轻量级的解释型编程语言。</p>
<ul>
<li><a href="json.html">JSON 备忘清单</a></li>
<li><a href="/regex#regex-in-javascript">JavaScript 中的正则表达式</a></li>
<li><a href="./typescript.html">TypeScript 备忘清单</a></li>
<li><a href="json.html">JSON 备忘清单</a></li>
<li><a href="/regex#regex-in-javascript">JavaScript 中的正则表达式</a></li>
<li><a href="./typescript.html">TypeScript 备忘清单</a></li>
</ul>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="打印调试"><a aria-hidden="true" tabindex="-1" href="#打印调试"><span class="icon icon-link"></span></a>打印调试</h3><div class="wrap-body">
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token comment">// => Hello world!</span>
@@ -121,7 +121,8 @@
</span><span class="code-line line-number" line="4"><span class="token comment">// 字符串插值</span>
</span><span class="code-line line-number" line="5"><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">Tommy is </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>age<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> years old.</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">;</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="字符串-1"><a aria-hidden="true" tabindex="-1" href="#字符串-1"><span class="icon icon-link"></span></a>字符串</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="字符串-1"><a aria-hidden="true" tabindex="-1" href="#字符串-1"><span class="icon icon-link"></span></a>字符串</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">var</span> abc <span class="token operator">=</span> <span class="token string">"abcdefghijklmnopqrstuvwxyz"</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="2"><span class="token keyword">var</span> esc <span class="token operator">=</span> <span class="token string">'I don\'t \n know'</span><span class="token punctuation">;</span> <span class="token comment">// \n 换行</span>
</span><span class="code-line line-number" line="3"><span class="token keyword">var</span> len <span class="token operator">=</span> abc<span class="token punctuation">.</span><span class="token property-access">length</span><span class="token punctuation">;</span> <span class="token comment">// 字符串长度</span>
@@ -143,7 +144,8 @@
</span><span class="code-line line-number" line="19"><span class="token comment">// 数字转为十六进制 (16)、八进制 (8) 或二进制 (2)</span>
</span><span class="code-line line-number" line="20"><span class="token number">128.</span><span class="token method function property-access">toString</span><span class="token punctuation">(</span><span class="token number">16</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="数字-1"><a aria-hidden="true" tabindex="-1" href="#数字-1"><span class="icon icon-link"></span></a>数字</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="数字-1"><a aria-hidden="true" tabindex="-1" href="#数字-1"><span class="icon icon-link"></span></a>数字</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">var</span> pi <span class="token operator">=</span> <span class="token number">3.141</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="2">pi<span class="token punctuation">.</span><span class="token method function property-access">toFixed</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 返回 3 </span>
</span><span class="code-line line-number" line="3">pi<span class="token punctuation">.</span><span class="token method function property-access">toFixed</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 返回 3.14 - 使用金钱</span>
@@ -192,7 +194,8 @@
</span><span class="code-line line-number" line="24"><span class="token comment">// 随机整数,从 1</span>
</span><span class="code-line line-number" line="25">Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">5</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="全局函数"><a aria-hidden="true" tabindex="-1" href="#全局函数"><span class="icon icon-link"></span></a>全局函数</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="全局函数"><a aria-hidden="true" tabindex="-1" href="#全局函数"><span class="icon icon-link"></span></a>全局函数</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1"><span class="token comment">// 像脚本代码一样执行字符串</span>
</span><span class="code-line line-number" line="2"><span class="token function">eval</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="3"><span class="token comment">// 从数字返回字符串</span>
@@ -219,7 +222,8 @@
</span><span class="code-line line-number" line="24"><span class="token function">parseInt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="javascript-条件"><a aria-hidden="true" tabindex="-1" href="#javascript-条件"><span class="icon icon-link"></span></a>JavaScript 条件</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="操作符"><a aria-hidden="true" tabindex="-1" href="#操作符"><span class="icon icon-link"></span></a>操作符</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-3-->
</div></div><div class="h2wrap-body"><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="操作符"><a aria-hidden="true" tabindex="-1" href="#操作符"><span class="icon icon-link"></span></a>操作符</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-3-->
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token boolean">true</span> <span class="token operator">||</span> <span class="token boolean">false</span><span class="token punctuation">;</span> <span class="token comment">// true</span>
</span><span class="code-line line-number" line="2"><span class="token number">10</span> <span class="token operator">></span> <span class="token number">5</span> <span class="token operator">||</span> <span class="token number">10</span> <span class="token operator">></span> <span class="token number">20</span><span class="token punctuation">;</span> <span class="token comment">// true</span>
</span><span class="code-line line-number" line="3"><span class="token boolean">false</span> <span class="token operator">||</span> <span class="token boolean">false</span><span class="token punctuation">;</span> <span class="token comment">// false</span>
@@ -329,7 +333,8 @@
</span><span class="code-line line-number" line="7"> <span class="token keyword control-flow">return</span> <span class="token string">'BOOM!'</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="8"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="箭头函数-es6"><a aria-hidden="true" tabindex="-1" href="#箭头函数-es6"><span class="icon icon-link"></span></a>箭头函数 (ES6)</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="箭头函数-es6"><a aria-hidden="true" tabindex="-1" href="#箭头函数-es6"><span class="icon icon-link"></span></a>箭头函数 (ES6)</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
</div></div><div class="h3wrap-body"><div class="wrap"><div class="wrap-header h4wrap"><h4 id="有两个参数"><a aria-hidden="true" tabindex="-1" href="#有两个参数"><span class="icon icon-link"></span></a>有两个参数</h4><div class="wrap-body">
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">const</span> <span class="token function-variable function">sum</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">param1<span class="token punctuation">,</span> param2</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token keyword control-flow">return</span> param1 <span class="token operator">+</span> param2<span class="token punctuation">;</span>
@@ -389,7 +394,8 @@
</span><span class="code-line line-number" line="3"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="javascript-范围"><a aria-hidden="true" tabindex="-1" href="#javascript-范围"><span class="icon icon-link"></span></a>JavaScript 范围</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="范围"><a aria-hidden="true" tabindex="-1" href="#范围"><span class="icon icon-link"></span></a>范围</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div><div class="h2wrap-body"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="范围"><a aria-hidden="true" tabindex="-1" href="#范围"><span class="icon icon-link"></span></a>范围</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">function</span> <span class="token function">myFunction</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token keyword">var</span> pizzaName <span class="token operator">=</span> <span class="token string">"Margarita"</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="3"> <span class="token comment">// 这里的代码可以使用 PizzaName</span>
@@ -475,47 +481,48 @@
</span><span class="code-line line-number" line="4"><span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span>myArray<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 200</span>
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="可变图表"><a aria-hidden="true" tabindex="-1" href="#可变图表"><span class="icon icon-link"></span></a>可变图表</h3><div class="wrap-body">
<table class="show-header">
<thead>
<tr>
<th align="left"></th>
<th align="center">添加</th>
<th align="center">删除</th>
<th align="center">开始</th>
<th align="center">结束</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>push</code></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="left"><code>pop</code></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="left"><code>unshift</code></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="left"><code>shift</code></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
</tr>
</tbody>
</table><!--rehype:className=show-header-->
<table class="show-header"><thead><tr><th align="left"></th><th align="center">添加</th><th align="center">删除</th><th align="center">开始</th><th align="center">结束</th></tr></thead><tbody><tr><td align="left"><code>push</code></td><td align="center"></td><td align="center"></td><td align="center"></td><td align="center"></td></tr><tr><td align="left"><code>pop</code></td><td align="center"></td><td align="center"></td><td align="center"></td><td align="center"></td></tr><tr><td align="left"><code>unshift</code></td><td align="center"></td><td align="center"></td><td align="center"></td><td align="center"></td></tr><tr><td align="left"><code>shift</code></td><td align="center"></td><td align="center"></td><td align="center"></td><td align="center"></td></tr></tbody></table>
<!--rehype:className=show-header-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="方法-push"><a aria-hidden="true" tabindex="-1" href="#方法-push"><span class="icon icon-link"></span></a>方法 .push()</h3><div class="wrap-body">
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token comment">// 添加单个元素:</span>
</span><span class="code-line line-number" line="2"><span class="token keyword">const</span> cart <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'apple'</span><span class="token punctuation">,</span> <span class="token string">'orange'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
@@ -629,7 +636,8 @@
</span><span class="code-line line-number" line="6"><span class="token comment">// => 1</span>
</span><span class="code-line line-number" line="7"><span class="token comment">// => 2</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="label-语句"><a aria-hidden="true" tabindex="-1" href="#label-语句"><span class="icon icon-link"></span></a>label 语句</h3><div class="wrap-body"><!--rehype:wrap-class= row-span-2-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="label-语句"><a aria-hidden="true" tabindex="-1" href="#label-语句"><span class="icon icon-link"></span></a>label 语句</h3><div class="wrap-body">
<!--rehype:wrap-class= row-span-2-->
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">var</span> num <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="2">
</span><span class="code-line line-number" line="3"><span class="token literal-property property">outPoint</span><span class="token operator">:</span>
@@ -654,7 +662,8 @@
</span><span class="code-line line-number" line="6"><span class="token comment">// => orange</span>
</span><span class="code-line line-number" line="7"><span class="token comment">// => banana</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="for-awaitof"><a aria-hidden="true" tabindex="-1" href="#for-awaitof"><span class="icon icon-link"></span></a>for await...of</h3><div class="wrap-body"><!--rehype:wrap-class= row-span-2-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="for-awaitof"><a aria-hidden="true" tabindex="-1" href="#for-awaitof"><span class="icon icon-link"></span></a>for await...of</h3><div class="wrap-body">
<!--rehype:wrap-class= row-span-2-->
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">async</span> <span class="token keyword">function</span><span class="token operator">*</span> <span class="token function">asyncGenerator</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token keyword">var</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="3"> <span class="token keyword control-flow">while</span> <span class="token punctuation">(</span>i <span class="token operator">&#x3C;</span> <span class="token number">3</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
@@ -681,7 +690,8 @@
</span><span class="code-line line-number" line="6"> i<span class="token operator">++</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="7"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="javascript-迭代器iterators"><a aria-hidden="true" tabindex="-1" href="#javascript-迭代器iterators"><span class="icon icon-link"></span></a>JavaScript 迭代器(Iterators)</h2><div class="wrap-body"><!--rehype:body-class=cols-2-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="javascript-迭代器iterators"><a aria-hidden="true" tabindex="-1" href="#javascript-迭代器iterators"><span class="icon icon-link"></span></a>JavaScript 迭代器(Iterators)</h2><div class="wrap-body">
<!--rehype:body-class=cols-2-->
</div></div><div class="h2wrap-body cols-2"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="分配给变量的函数"><a aria-hidden="true" tabindex="-1" href="#分配给变量的函数"><span class="icon icon-link"></span></a>分配给变量的函数</h3><div class="wrap-body">
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">let</span> <span class="token function-variable function">plusFive</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">number</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token keyword control-flow">return</span> number <span class="token operator">+</span> <span class="token number">5</span><span class="token punctuation">;</span>
@@ -730,7 +740,8 @@
</span><span class="code-line line-number" line="3"> <span class="token keyword control-flow">return</span> n <span class="token operator">></span> <span class="token number">5</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="4"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="javascript-对象objects"><a aria-hidden="true" tabindex="-1" href="#javascript-对象objects"><span class="icon icon-link"></span></a>JavaScript 对象(Objects)</h2><div class="wrap-body"><!--rehype:body-class=cols-2-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="javascript-对象objects"><a aria-hidden="true" tabindex="-1" href="#javascript-对象objects"><span class="icon icon-link"></span></a>JavaScript 对象(Objects)</h2><div class="wrap-body">
<!--rehype:body-class=cols-2-->
</div></div><div class="h2wrap-body cols-2"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="访问属性"><a aria-hidden="true" tabindex="-1" href="#访问属性"><span class="icon icon-link"></span></a>访问属性</h3><div class="wrap-body">
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">const</span> apple <span class="token operator">=</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token literal-property property">color</span><span class="token operator">:</span> <span class="token string">'Green'</span><span class="token punctuation">,</span>
@@ -756,7 +767,8 @@
</span><span class="code-line line-number" line="3"><span class="token punctuation">}</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="4"><span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span>classElection<span class="token punctuation">.</span><span class="token property-access">place</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// undefined</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="可变的"><a aria-hidden="true" tabindex="-1" href="#可变的"><span class="icon icon-link"></span></a>可变的</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="可变的"><a aria-hidden="true" tabindex="-1" href="#可变的"><span class="icon icon-link"></span></a>可变的</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">const</span> student <span class="token operator">=</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token literal-property property">name</span><span class="token operator">:</span> <span class="token string">'Sheldon'</span><span class="token punctuation">,</span>
</span><span class="code-line line-number" line="3"> <span class="token literal-property property">score</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>
@@ -811,7 +823,8 @@
</span><span class="code-line line-number" line="11"><span class="token comment">// 通过引用,因此是可变的。</span>
</span><span class="code-line line-number" line="12"><span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span>origObj<span class="token punctuation">.</span><span class="token property-access">color</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="工厂函数"><a aria-hidden="true" tabindex="-1" href="#工厂函数"><span class="icon icon-link"></span></a>工厂函数</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="工厂函数"><a aria-hidden="true" tabindex="-1" href="#工厂函数"><span class="icon icon-link"></span></a>工厂函数</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token comment">// 一个接受 'name''age' 和 'breed' 的工厂函数,</span>
</span><span class="code-line line-number" line="2"><span class="token comment">// 参数返回一个自定义的 dog 对象。</span>
</span><span class="code-line line-number" line="3"><span class="token keyword">const</span> <span class="token function-variable function">dogFactory</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">name<span class="token punctuation">,</span> age<span class="token punctuation">,</span> breed</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
@@ -870,7 +883,8 @@
</span><span class="code-line line-number" line="13">myCat<span class="token punctuation">.</span><span class="token property-access">name</span> <span class="token operator">=</span> <span class="token string">'Yankee'</span><span class="token punctuation">;</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="javascript-classes"><a aria-hidden="true" tabindex="-1" href="#javascript-classes"><span class="icon icon-link"></span></a>JavaScript Classes</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="静态方法字段"><a aria-hidden="true" tabindex="-1" href="#静态方法字段"><span class="icon icon-link"></span></a>静态方法/字段</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div><div class="h2wrap-body"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="静态方法字段"><a aria-hidden="true" tabindex="-1" href="#静态方法字段"><span class="icon icon-link"></span></a>静态方法/字段</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">class</span> <span class="token class-name">Dog</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token function">constructor</span><span class="token punctuation">(</span><span class="token parameter">name</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="3"> <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token property-access">_name</span> <span class="token operator">=</span> name<span class="token punctuation">;</span>
@@ -961,7 +975,8 @@
</span><span class="code-line line-number" line="8"> <span class="token punctuation">}</span>
</span><span class="code-line line-number" line="9"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="javascript-modules"><a aria-hidden="true" tabindex="-1" href="#javascript-modules"><span class="icon icon-link"></span></a>JavaScript Modules</h2><div class="wrap-body"><!--rehype:body-class=cols-2-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="javascript-modules"><a aria-hidden="true" tabindex="-1" href="#javascript-modules"><span class="icon icon-link"></span></a>JavaScript Modules</h2><div class="wrap-body">
<!--rehype:body-class=cols-2-->
</div></div><div class="h2wrap-body cols-2"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="export--import"><a aria-hidden="true" tabindex="-1" href="#export--import"><span class="icon icon-link"></span></a>Export / Import</h3><div class="wrap-body">
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token comment">// myMath.js</span>
</span><span class="code-line line-number" line="2"><span class="token comment">// 默认导出 Default export</span>
@@ -1024,7 +1039,8 @@
</span><span class="code-line line-number" line="6"><span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span>myMath<span class="token punctuation">.</span><span class="token method function property-access">duplicate</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// 10</span>
</span></code></pre>
</div></div></div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="javascript-promises"><a aria-hidden="true" tabindex="-1" href="#javascript-promises"><span class="icon icon-link"></span></a>JavaScript Promises</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="promise"><a aria-hidden="true" tabindex="-1" href="#promise"><span class="icon icon-link"></span></a>Promise</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div><div class="h2wrap-body"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="promise"><a aria-hidden="true" tabindex="-1" href="#promise"><span class="icon icon-link"></span></a>Promise</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<p>创建 promises</p>
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">resolve<span class="token punctuation">,</span> reject</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token keyword control-flow">if</span> <span class="token punctuation">(</span>ok<span class="token punctuation">)</span> <span class="token punctuation">{</span>
@@ -1102,7 +1118,8 @@
</span><span class="code-line line-number" line="13"> <span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">error</span><span class="token punctuation">(</span>err<span class="token punctuation">)</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="14"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="promiseall"><a aria-hidden="true" tabindex="-1" href="#promiseall"><span class="icon icon-link"></span></a>Promise.all()</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="promiseall"><a aria-hidden="true" tabindex="-1" href="#promiseall"><span class="icon icon-link"></span></a>Promise.all()</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">const</span> promise1 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">resolve<span class="token punctuation">,</span> reject</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="3"> <span class="token function">resolve</span><span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
@@ -1135,7 +1152,8 @@
</span><span class="code-line line-number" line="14"> <span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">error</span><span class="token punctuation">(</span>err<span class="token punctuation">)</span>
</span><span class="code-line line-number" line="15"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="避免嵌套的-promise-和-then"><a aria-hidden="true" tabindex="-1" href="#避免嵌套的-promise-和-then"><span class="icon icon-link"></span></a>避免嵌套的 Promise 和 .then()</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="避免嵌套的-promise-和-then"><a aria-hidden="true" tabindex="-1" href="#避免嵌套的-promise-和-then"><span class="icon icon-link"></span></a>避免嵌套的 Promise 和 .then()</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">const</span> promise <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">resolve<span class="token punctuation">,</span> reject</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="3"> <span class="token function">resolve</span><span class="token punctuation">(</span><span class="token string">'*'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
@@ -1153,8 +1171,10 @@
</span><span class="code-line line-number" line="15"><span class="token comment">// 将它们链接在一起</span>
</span><span class="code-line line-number" line="16">promise<span class="token punctuation">.</span><span class="token method function property-access">then</span><span class="token punctuation">(</span>twoStars<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token method function property-access">then</span><span class="token punctuation">(</span>oneDot<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token method function property-access">then</span><span class="token punctuation">(</span>print<span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="javascript-async-await"><a aria-hidden="true" tabindex="-1" href="#javascript-async-await"><span class="icon icon-link"></span></a>JavaScript Async-Await</h2><div class="wrap-body"><!--rehype:body-class=cols-2-->
</div></div><div class="h2wrap-body cols-2"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="异步"><a aria-hidden="true" tabindex="-1" href="#异步"><span class="icon icon-link"></span></a>异步</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="javascript-async-await"><a aria-hidden="true" tabindex="-1" href="#javascript-async-await"><span class="icon icon-link"></span></a>JavaScript Async-Await</h2><div class="wrap-body">
<!--rehype:body-class=cols-2-->
</div></div><div class="h2wrap-body cols-2"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="异步"><a aria-hidden="true" tabindex="-1" href="#异步"><span class="icon icon-link"></span></a>异步</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">function</span> <span class="token function">helloWorld</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token keyword control-flow">return</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token parameter">resolve</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="3"> <span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
@@ -1251,7 +1271,8 @@
</span><span class="code-line line-number" line="6"><span class="token punctuation">}</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="7">req<span class="token punctuation">.</span><span class="token method function property-access">send</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="post"><a aria-hidden="true" tabindex="-1" href="#post"><span class="icon icon-link"></span></a>POST</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="post"><a aria-hidden="true" tabindex="-1" href="#post"><span class="icon icon-link"></span></a>POST</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">const</span> data <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token literal-property property">weight</span><span class="token operator">:</span> <span class="token string">'1.5 KG'</span> <span class="token punctuation">}</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="2"><span class="token keyword">const</span> xhr <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">XMLHttpRequest</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="3"><span class="token comment">// 初始化一个请求。</span>
@@ -1269,7 +1290,8 @@
</span><span class="code-line line-number" line="15"> <span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span>xhr<span class="token punctuation">.</span><span class="token property-access">response</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="16"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="fetch-api"><a aria-hidden="true" tabindex="-1" href="#fetch-api"><span class="icon icon-link"></span></a>fetch api</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="fetch-api"><a aria-hidden="true" tabindex="-1" href="#fetch-api"><span class="icon icon-link"></span></a>fetch api</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token function">fetch</span><span class="token punctuation">(</span>url<span class="token punctuation">,</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token literal-property property">method</span><span class="token operator">:</span> <span class="token string">'POST'</span><span class="token punctuation">,</span>
</span><span class="code-line line-number" line="3"> <span class="token literal-property property">headers</span><span class="token operator">:</span> <span class="token punctuation">{</span>
@@ -1316,7 +1338,8 @@
</span><span class="code-line line-number" line="12"> <span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span>jsonResponse<span class="token punctuation">)</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="13"><span class="token punctuation">}</span><span class="token punctuation">)</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="async-await-语法"><a aria-hidden="true" tabindex="-1" href="#async-await-语法"><span class="icon icon-link"></span></a>async await 语法</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="async-await-语法"><a aria-hidden="true" tabindex="-1" href="#async-await-语法"><span class="icon icon-link"></span></a>async await 语法</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">const</span> <span class="token function-variable function">getSuggestions</span> <span class="token operator">=</span> <span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token keyword">const</span> wordQuery <span class="token operator">=</span> inputField<span class="token punctuation">.</span><span class="token property-access">value</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="3"> <span class="token keyword">const</span> endpoint <span class="token operator">=</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>url<span class="token interpolation-punctuation punctuation">}</span></span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>queryParams<span class="token interpolation-punctuation punctuation">}</span></span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>wordQuery<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">`</span></span><span class="token punctuation">;</span>
@@ -1331,6 +1354,5 @@
</span><span class="code-line line-number" line="12"> <span class="token punctuation">}</span>
</span><span class="code-line line-number" line="13"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

View File

@@ -40,13 +40,14 @@
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="介绍"><a aria-hidden="true" tabindex="-1" href="#介绍"><span class="icon icon-link"></span></a>介绍</h3><div class="wrap-body">
<p><a href="https://jestjs.io/">Jest</a> 是一款优雅、简洁的 JavaScript 测试框架。</p>
<ul>
<li>无需配置,大多数 JS 项目中即装即用,无需配置</li>
<li>优秀接口,从 it 到 expect - Jest 将工具包整合在一处。文档齐全、不断维护,非常不错。</li>
<li>隔离的,并行进行测试,发挥每一丝算力。</li>
<li>快照, 轻松编写持续追踪大型对象的测试,并在测试旁或代码内显示实时快照。</li>
<li>代码覆盖, 无需其他操作,您仅需添加 --coverage 参数来生成代码覆盖率报告。</li>
<li><code>无需配置</code> 大多数 JS 项目中即装即用,无需配置</li>
<li><code>优秀接口</code><code>it</code><code>expect</code> - Jest 将工具包整合在一处。文档齐全、不断维护,非常不错。</li>
<li><code>隔离的</code> 并行进行测试,发挥每一丝算力。</li>
<li><code>快照</code> 轻松编写持续追踪大型对象的测试,并在测试旁或代码内显示实时快照。</li>
<li><code>代码覆盖</code> 无需其他操作,您仅需添加 <code>--coverage</code> 参数来生成代码覆盖率报告。</li>
</ul>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="测试结构"><a aria-hidden="true" tabindex="-1" href="#测试结构"><span class="icon icon-link"></span></a>测试结构</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="测试结构"><a aria-hidden="true" tabindex="-1" href="#测试结构"><span class="icon icon-link"></span></a>测试结构</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1"><span class="token function">describe</span><span class="token punctuation">(</span><span class="token string">'makePoniesPink'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token function">beforeAll</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="3"> <span class="token comment">/* 在所有测试之前运行 */</span>
@@ -153,7 +154,8 @@
</span><span class="code-line line-number" line="13"> expect<span class="token punctuation">.</span><span class="token method function property-access">anything</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
</span><span class="code-line line-number" line="14"><span class="token punctuation">]</span><span class="token punctuation">)</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="模拟函数"><a aria-hidden="true" tabindex="-1" href="#模拟函数"><span class="icon icon-link"></span></a>模拟函数</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="模拟函数"><a aria-hidden="true" tabindex="-1" href="#模拟函数"><span class="icon icon-link"></span></a>模拟函数</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1"><span class="token comment">// const fn = jest.fn()</span>
</span><span class="code-line line-number" line="2"><span class="token comment">// const fn = jest.fn().mockName('Unicorn') -- 命名为 mock, Jest 22+</span>
</span><span class="code-line line-number" line="3"><span class="token comment">// 函数被调用</span>
@@ -185,14 +187,14 @@
</span></code></pre>
</div></div><div class="h3wrap-body"><div class="wrap"><div class="wrap-header h4wrap"><h4 id="别名"><a aria-hidden="true" tabindex="-1" href="#别名"><span class="icon icon-link"></span></a>别名</h4><div class="wrap-body">
<ul>
<li><code>toBeCalled</code><code>toHaveBeenCalled</code></li>
<li><code>toBeCalledWith</code><code>toHaveBeenCalledWith</code></li>
<li><code>lastCalledWith</code><code>toHaveBeenLastCalledWith</code></li>
<li><code>nthCalledWith</code><code>toHaveBeenNthCalledWith</code></li>
<li><code>toReturnTimes</code><code>toHaveReturnedTimes</code></li>
<li><code>toReturnWith</code><code>toHaveReturnedWith</code></li>
<li><code>lastReturnedWith</code><code>toHaveLastReturnedWith</code></li>
<li><code>nthReturnedWith</code><code>toHaveNthReturnedWith</code></li>
<li><code>toBeCalled</code><code>toHaveBeenCalled</code></li>
<li><code>toBeCalledWith</code><code>toHaveBeenCalledWith</code></li>
<li><code>lastCalledWith</code><code>toHaveBeenLastCalledWith</code></li>
<li><code>nthCalledWith</code><code>toHaveBeenNthCalledWith</code></li>
<li><code>toReturnTimes</code><code>toHaveReturnedTimes</code></li>
<li><code>toReturnWith</code><code>toHaveReturnedWith</code></li>
<li><code>lastReturnedWith</code><code>toHaveLastReturnedWith</code></li>
<li><code>nthReturnedWith</code><code>toHaveNthReturnedWith</code></li>
</ul>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="杂项"><a aria-hidden="true" tabindex="-1" href="#杂项"><span class="icon icon-link"></span></a>杂项</h3><div class="wrap-body">
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1"><span class="token comment">// 检查对象是否是类的实例。</span>
@@ -270,10 +272,11 @@
</span></code></pre>
</div></div><div class="h3wrap-body"><div class="wrap"><div class="wrap-header h4wrap"><h4 id="别名-1"><a aria-hidden="true" tabindex="-1" href="#别名-1"><span class="icon icon-link"></span></a>别名</h4><div class="wrap-body">
<ul>
<li><code>toThrowError</code><code>toThrow</code></li>
<li><code>toThrowError</code><code>toThrow</code></li>
</ul>
</div></div></div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="异步测试"><a aria-hidden="true" tabindex="-1" href="#异步测试"><span class="icon icon-link"></span></a>异步测试</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="实例"><a aria-hidden="true" tabindex="-1" href="#实例"><span class="icon icon-link"></span></a>实例</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div><div class="h2wrap-body"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="实例"><a aria-hidden="true" tabindex="-1" href="#实例"><span class="icon icon-link"></span></a>实例</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<p>请参阅 Jest 文档中的 <a href="https://jestjs.io/docs/en/tutorial-async">更多示例</a></p>
<p>在异步测试中指定一些预期的断言是一个很好的做法,所以如果你的断言根本没有被调用,测试将会失败。</p>
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1"><span class="token function">test</span><span class="token punctuation">(</span><span class="token string">'async test'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
@@ -296,7 +299,8 @@
</span><span class="code-line line-number" line="5"> <span class="token function">expect</span><span class="token punctuation">(</span>result<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token method function property-access">toBe</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
</span><span class="code-line line-number" line="6"><span class="token punctuation">}</span><span class="token punctuation">)</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="done-回调"><a aria-hidden="true" tabindex="-1" href="#done-回调"><span class="icon icon-link"></span></a>done() 回调</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="done-回调"><a aria-hidden="true" tabindex="-1" href="#done-回调"><span class="icon icon-link"></span></a>done() 回调</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1"><span class="token function">test</span><span class="token punctuation">(</span><span class="token string">'async test'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token parameter">done</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> expect<span class="token punctuation">.</span><span class="token method function property-access">assertions</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span>
</span><span class="code-line line-number" line="3">
@@ -313,7 +317,7 @@
</span><span class="code-line line-number" line="14"> <span class="token punctuation">}</span><span class="token punctuation">)</span>
</span><span class="code-line line-number" line="15"><span class="token punctuation">}</span><span class="token punctuation">)</span>
</span></code></pre>
<p>将断言包装在 try/catch 块中,否则 Jest 将忽略失败</p>
<p>将断言包装在 <code>try/catch</code> 块中,否则 <code>Jest</code> 将忽略失败</p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="promises"><a aria-hidden="true" tabindex="-1" href="#promises"><span class="icon icon-link"></span></a>Promises</h3><div class="wrap-body">
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1"><span class="token function">test</span><span class="token punctuation">(</span><span class="token string">'async test'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> expect<span class="token punctuation">.</span><span class="token method function property-access">assertions</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span>
@@ -323,9 +327,10 @@
</span><span class="code-line line-number" line="6"> <span class="token punctuation">}</span><span class="token punctuation">)</span>
</span><span class="code-line line-number" line="7"><span class="token punctuation">}</span><span class="token punctuation">)</span>
</span></code></pre>
<p>从你的测试中 <em>返回</em> 一个 Promise</p>
<p>从你的测试中 <em>返回</em> 一个 <code>Promise</code></p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="模拟"><a aria-hidden="true" tabindex="-1" href="#模拟"><span class="icon icon-link"></span></a>模拟</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="模拟函数-1"><a aria-hidden="true" tabindex="-1" href="#模拟函数-1"><span class="icon icon-link"></span></a>模拟函数</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div><div class="h2wrap-body"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="模拟函数-1"><a aria-hidden="true" tabindex="-1" href="#模拟函数-1"><span class="icon icon-link"></span></a>模拟函数</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1"><span class="token function">test</span><span class="token punctuation">(</span><span class="token string">'call the callback'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token keyword">const</span> callback <span class="token operator">=</span> jest<span class="token punctuation">.</span><span class="token method function property-access">fn</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
</span><span class="code-line line-number" line="3"> <span class="token function">fn</span><span class="token punctuation">(</span>callback<span class="token punctuation">)</span>
@@ -351,7 +356,8 @@
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">const</span> callback <span class="token operator">=</span> jest<span class="token punctuation">.</span><span class="token method function property-access">fn</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token boolean">true</span><span class="token punctuation">)</span>
</span></code></pre>
<p><a href="https://jestjs.io/docs/en/mock-function-api">模拟函数文档</a></p>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="返回解析和拒绝值"><a aria-hidden="true" tabindex="-1" href="#返回解析和拒绝值"><span class="icon icon-link"></span></a>返回、解析和拒绝值</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="返回解析和拒绝值"><a aria-hidden="true" tabindex="-1" href="#返回解析和拒绝值"><span class="icon icon-link"></span></a>返回、解析和拒绝值</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<p>您的模拟可以返回值:</p>
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">const</span> callback
</span><span class="code-line line-number" line="2"> <span class="token operator">=</span> jest<span class="token punctuation">.</span><span class="token method function property-access">fn</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token method function property-access">mockReturnValue</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
@@ -383,7 +389,7 @@
</span></code></pre>
<p><a href="https://jestjs.io/docs/en/jest-object#jestmockmodulename-factory-options">jest.mock docs</a></p>
<blockquote>
<p>注意:当使用 <code>babel-jest</code> 时,对 <code>jest.mock</code> 的调用将自动提升到代码块的顶部。 如果您想明确避免这种行为,请使用 <code>jest.doMock</code></p>
<p>注意:当使用 <code>babel-jest</code> 时,对 <code>jest.mock</code> 的调用将自动提升到代码块的顶部。 如果您想明确避免这种行为,请使用 <code>jest.doMock</code></p>
</blockquote>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="使用模拟文件模拟模块"><a aria-hidden="true" tabindex="-1" href="#使用模拟文件模拟模块"><span class="icon icon-link"></span></a>使用模拟文件模拟模块</h3><div class="wrap-body">
<p>创建一个类似 <code>__mocks__/lodash/memoize.js</code> 的文件:</p>
@@ -412,7 +418,8 @@
</span><span class="code-line line-number" line="6"> <span class="token punctuation">.</span><span class="token method function property-access">spyOn</span><span class="token punctuation">(</span><span class="token dom variable">location</span><span class="token punctuation">,</span> <span class="token string">'title'</span><span class="token punctuation">,</span> <span class="token string">'set'</span><span class="token punctuation">)</span>
</span><span class="code-line line-number" line="7"> <span class="token punctuation">.</span><span class="token method function property-access">mockImplementation</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="定时器模拟"><a aria-hidden="true" tabindex="-1" href="#定时器模拟"><span class="icon icon-link"></span></a>定时器模拟</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-3-->
</div></div></div><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="定时器模拟"><a aria-hidden="true" tabindex="-1" href="#定时器模拟"><span class="icon icon-link"></span></a>定时器模拟</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-3-->
<p>为使用本机计时器函数(<code>setTimeout</code><code>setInterval</code><code>clearTimeout</code><code>clearInterval</code>)的代码编写同步测试。</p>
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1"><span class="token comment">// 启用假计时器</span>
</span><span class="code-line line-number" line="2">jest<span class="token punctuation">.</span><span class="token method function property-access">useFakeTimers</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
@@ -450,7 +457,8 @@
</span><span class="code-line line-number" line="6"> <span class="token literal-property property">set</span><span class="token operator">:</span> setTitle<span class="token punctuation">,</span>
</span><span class="code-line line-number" line="7"><span class="token punctuation">}</span><span class="token punctuation">)</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="清除和恢复模拟"><a aria-hidden="true" tabindex="-1" href="#清除和恢复模拟"><span class="icon icon-link"></span></a>清除和恢复模拟</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="清除和恢复模拟"><a aria-hidden="true" tabindex="-1" href="#清除和恢复模拟"><span class="icon icon-link"></span></a>清除和恢复模拟</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<p>对于一个模拟</p>
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1"><span class="token comment">// 清除模拟使用日期</span>
</span><span class="code-line line-number" line="2"><span class="token comment">// fn.mock.calls、fn.mock.instances</span>
@@ -461,7 +469,7 @@
</span><span class="code-line line-number" line="7">fn<span class="token punctuation">.</span><span class="token method function property-access">mockRestore</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
</span></code></pre>
<blockquote>
<p>注意:<code>mockRestore</code> 仅适用于由<code>jest.spyOn</code> 创建的模拟。对于所有模拟:</p>
<p>注意:<code>mockRestore</code> 仅适用于由<code>jest.spyOn</code> 创建的模拟。对于所有模拟:</p>
</blockquote>
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1"><span class="token comment">// 清除所有 mock 的 </span>
</span><span class="code-line line-number" line="2"><span class="token comment">// mock.calls、mock.instances、</span>
@@ -508,8 +516,9 @@
</span><span class="code-line line-number" line="6"> <span class="token punctuation">}</span><span class="token punctuation">)</span>
</span><span class="code-line line-number" line="7"><span class="token punctuation">}</span><span class="token punctuation">)</span>
</span></code></pre>
<p><a href="https://jestjs.io/docs/en/api#describeeachtablename-fn-timeout">describe.each() 文档</a><a href="https://jestjs.io/docs/en/api#testeachtablename-fn-timeout">test.each() 文档</a>,</p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="跳过测试"><a aria-hidden="true" tabindex="-1" href="#跳过测试"><span class="icon icon-link"></span></a>跳过测试</h2><div class="wrap-body"><!--rehype:body-class=cols-2-->
<p><a href="https://jestjs.io/docs/en/api#describeeachtablename-fn-timeout">describe.each()</a> 文档<a href="https://jestjs.io/docs/en/api#testeachtablename-fn-timeout">test.each()</a> 文档</p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="跳过测试"><a aria-hidden="true" tabindex="-1" href="#跳过测试"><span class="icon icon-link"></span></a>跳过测试</h2><div class="wrap-body">
<!--rehype:body-class=cols-2-->
</div></div><div class="h2wrap-body cols-2"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="不要运行这些测试"><a aria-hidden="true" tabindex="-1" href="#不要运行这些测试"><span class="icon icon-link"></span></a>不要运行这些测试</h3><div class="wrap-body">
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1">describe<span class="token punctuation">.</span><span class="token method function property-access">skip</span><span class="token punctuation">(</span><span class="token string">'makePoniesPink'</span><span class="token spread operator">...</span>
</span><span class="code-line line-number" line="2">tests<span class="token punctuation">.</span><span class="token method function property-access">skip</span><span class="token punctuation">(</span><span class="token string">'make each pony pink'</span><span class="token spread operator">...</span>
@@ -518,7 +527,8 @@
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1">describe<span class="token punctuation">.</span><span class="token method function property-access">only</span><span class="token punctuation">(</span><span class="token string">'makePoniesPink'</span><span class="token spread operator">...</span>
</span><span class="code-line line-number" line="2">tests<span class="token punctuation">.</span><span class="token method function property-access">only</span><span class="token punctuation">(</span><span class="token string">'make each pony pink'</span><span class="token spread operator">...</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="测试有副作用的模块"><a aria-hidden="true" tabindex="-1" href="#测试有副作用的模块"><span class="icon icon-link"></span></a>测试有副作用的模块</h2><div class="wrap-body"><!--rehype:body-class=cols-1-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="测试有副作用的模块"><a aria-hidden="true" tabindex="-1" href="#测试有副作用的模块"><span class="icon icon-link"></span></a>测试有副作用的模块</h2><div class="wrap-body">
<!--rehype:body-class=cols-1-->
</div></div><div class="h2wrap-body cols-1"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="实例-1"><a aria-hidden="true" tabindex="-1" href="#实例-1"><span class="icon icon-link"></span></a>实例</h3><div class="wrap-body">
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">const</span> modulePath <span class="token operator">=</span> <span class="token string">'../module-to-test'</span>
</span><span class="code-line line-number" line="2"><span class="token function">afterEach</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span>
@@ -535,11 +545,10 @@
</span><span class="code-line line-number" line="13"> <span class="token function">expect</span><span class="token punctuation">(</span>fn<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token method function property-access">toThrow</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
</span><span class="code-line line-number" line="14"><span class="token punctuation">}</span><span class="token punctuation">)</span>
</span></code></pre>
<p>Node.js 和 Jest 会缓存你需要的模块。 要测试具有副作用的模块,您需要在测试之间重置模块注册表</p>
<p><code>Node.js</code><code>Jest</code> 会缓存你需要的模块。 要测试具有副作用的模块,您需要在测试之间重置模块注册表</p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="另见"><a aria-hidden="true" tabindex="-1" href="#另见"><span class="icon icon-link"></span></a>另见</h2><div class="wrap-body">
<ul>
<li><a href="https://github.com/sapegin/jest-cheat-sheet">Jest cheat sheet</a> <em>(github.com)</em></li>
<li><a href="https://github.com/sapegin/jest-cheat-sheet">Jest cheat sheet</a> <em>(github.com)</em></li>
</ul>
</div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

View File

@@ -40,11 +40,11 @@
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="介绍"><a aria-hidden="true" tabindex="-1" href="#介绍"><span class="icon icon-link"></span></a>介绍</h3><div class="wrap-body">
<p><a href="https://json.org/">JSON</a> 是一种基于文本的轻量级开放标准,专为人类可读的数据交换而设计。</p>
<ul>
<li>JSON 代表 JavaScript 对象表示法</li>
<li>JSON 易于读写。</li>
<li>JSON 是与语言无关的数据交换格式</li>
<li>JSON 文件扩展名为 <code>.json</code></li>
<li>JSON Internet 媒体类型为 <code>application/json</code></li>
<li>JSON 代表 JavaScript 对象表示法</li>
<li>JSON 易于读写。</li>
<li>JSON 是与语言无关的数据交换格式</li>
<li>JSON 文件扩展名为 <code>.json</code></li>
<li>JSON Internet 媒体类型为 <code>application/json</code></li>
</ul>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="示例"><a aria-hidden="true" tabindex="-1" href="#示例"><span class="icon icon-link"></span></a>示例</h3><div class="wrap-body">
<pre class="language-json"><code class="language-json code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">{</span>
@@ -61,91 +61,92 @@
</span><span class="code-line line-number" line="12"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="类型"><a aria-hidden="true" tabindex="-1" href="#类型"><span class="icon icon-link"></span></a>类型</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>类型</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Number</code></td>
<td>双精度浮点</td>
</tr>
<tr>
<td><code>String</code></td>
<td>字符系列</td>
</tr>
<tr>
<td><code>Boolean</code></td>
<td>“true”或“false”</td>
</tr>
<tr>
<td><code>Array</code></td>
<td>有序的值序列</td>
</tr>
<tr>
<td><code>Value</code></td>
<td>字符串、数字、布尔值、空值等</td>
</tr>
<tr>
<td><code>Object</code></td>
<td>键/值对的无序集合</td>
</tr>
<tr>
<td><code>null</code></td>
<td>Null 或 Empty</td>
</tr>
</tbody>
</table>
</div></div></div><div class="wrap" style="grid-row: span 3/span 3;"><div class="wrap-header h3wrap"><h3 id="字符串"><a aria-hidden="true" tabindex="-1" href="#字符串"><span class="icon icon-link"></span></a>字符串</h3><div class="wrap-body"><!--rehype:wrap-style=grid-row: span 3/span 3;-->
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>\"</code></td>
<td>双引号 Double quote</td>
</tr>
<tr>
<td><code>\\</code></td>
<td>反斜杠 Backslash</td>
</tr>
<tr>
<td><code>\/</code></td>
<td>正斜杠 Forward slash</td>
</tr>
<tr>
<td><code>\b</code></td>
<td>退格 Backspace</td>
</tr>
<tr>
<td><code>\f</code></td>
<td>换页 Form feed</td>
</tr>
<tr>
<td><code>\n</code></td>
<td>换行 Newline</td>
</tr>
<tr>
<td><code>\r</code></td>
<td>回车 Carriage return</td>
</tr>
<tr>
<td><code>\t</code></td>
<td>标签 Tab</td>
</tr>
<tr>
<td><code>\u</code></td>
<td>后跟四个十六进制数字</td>
</tr>
</tbody>
</table>
<table><thead><tr><th>类型</th><th>描述</th></tr></thead><tbody><tr><td><code>Number</code></td><td>双精度浮点</td></tr><tr><td><code>String</code></td><td>字符系列</td></tr><tr><td><code>Boolean</code></td><td>“true”或“false”</td></tr><tr><td><code>Array</code></td><td>有序的值序列</td></tr><tr><td><code>Value</code></td><td>字符串、数字、布尔值、空值等</td></tr><tr><td><code>Object</code></td><td>键/值对的无序集合</td></tr><tr><td><code>null</code></td><td>Null 或 Empty</td></tr></tbody></table>
</div></div></div><div class="wrap" style="grid-row: span 3/span 3;"><div class="wrap-header h3wrap"><h3 id="字符串"><a aria-hidden="true" tabindex="-1" href="#字符串"><span class="icon icon-link"></span></a>字符串</h3><div class="wrap-body">
<!--rehype:wrap-style=grid-row: span 3/span 3;-->
<table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><code>\"</code></td><td>双引号 Double quote</td></tr><tr><td><code>\\</code></td><td>反斜杠 Backslash</td></tr><tr><td><code>\/</code></td><td>正斜杠 Forward slash</td></tr><tr><td><code>\b</code></td><td>退格 Backspace</td></tr><tr><td><code>\f</code></td><td>换页 Form feed</td></tr><tr><td><code>\n</code></td><td>换行 Newline</td></tr><tr><td><code>\r</code></td><td>回车 Carriage return</td></tr><tr><td><code>\t</code></td><td>标签 Tab</td></tr><tr><td><code>\u</code></td><td>后跟四个十六进制数字</td></tr></tbody></table>
</div></div><div class="h3wrap-body"><div class="wrap"><div class="wrap-header h4wrap"><h4 id="示例-1"><a aria-hidden="true" tabindex="-1" href="#示例-1"><span class="icon icon-link"></span></a>示例</h4><div class="wrap-body">
<pre class="language-json"><code class="language-json code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token property">"url"</span><span class="token operator">:</span> <span class="token string">"https://quickref.me"</span><span class="token punctuation">,</span>
@@ -157,29 +158,31 @@
<pre class="language-json"><code class="language-json code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">{</span> <span class="token property">"foo"</span><span class="token operator">:</span> 'bar' <span class="token punctuation">}</span>
</span></code></pre>
<p>Have to be delimited by double quotes</p>
</div></div></div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="数字"><a aria-hidden="true" tabindex="-1" href="#数字"><span class="icon icon-link"></span></a>数字</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
<table class="show-header ">
<thead>
<tr>
<th>类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Integer</code></td>
<td>数字 1-9、0 和正数或负数</td>
</tr>
<tr>
<td><code>Fraction</code></td>
<td>0.3、3.9 等分数</td>
</tr>
<tr>
<td><code>Exponent</code></td>
<td>指数,如 e、e+、e-、E、E+、E</td>
</tr>
</tbody>
</table><!--rehype:className=show-header -->
</div></div></div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="数字"><a aria-hidden="true" tabindex="-1" href="#数字"><span class="icon icon-link"></span></a>数字</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<table class="show-header "><thead><tr><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>Integer</code></td><td>数字 1-9、0 和正数或负数</td></tr><tr><td><code>Fraction</code></td><td>0.3、3.9 等分数</td></tr><tr><td><code>Exponent</code></td><td>指数,如 e、e+、e-、E、E+、E</td></tr></tbody></table>
<!--rehype:className=show-header -->
</div></div><div class="h3wrap-body"><div class="wrap"><div class="wrap-header h4wrap"><h4 id="示例-2"><a aria-hidden="true" tabindex="-1" href="#示例-2"><span class="icon icon-link"></span></a>示例</h4><div class="wrap-body">
<pre class="language-json"><code class="language-json code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token property">"positive"</span> <span class="token operator">:</span> <span class="token number">12</span><span class="token punctuation">,</span>
@@ -272,37 +275,38 @@
</span><span class="code-line line-number" line="8"><span class="token punctuation">}</span><span class="token punctuation">;</span>
</span></code></pre>
<hr>
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>myObject.name</code></td>
<td>"Jason"</td>
</tr>
<tr>
<td><code>myObject["name"]</code></td>
<td>"Jason"</td>
</tr>
<tr>
<td><code>myObject.age</code></td>
<td>39</td>
</tr>
<tr>
<td><code>myObject.other</code></td>
<td>undefined</td>
</tr>
<tr>
<td><code>myObject[0]</code></td>
<td>undefined</td>
</tr>
</tbody>
</table>
</div></div></div><div class="wrap" style="grid-row: span 2/span 2;"><div class="wrap-header h3wrap"><h3 id="访问嵌套"><a aria-hidden="true" tabindex="-1" href="#访问嵌套"><span class="icon icon-link"></span></a>访问嵌套</h3><div class="wrap-body"><!--rehype:wrap-style=grid-row: span 2/span 2;-->
<table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><code>myObject.name</code></td><td>"Jason"</td></tr><tr><td><code>myObject["name"]</code></td><td>"Jason"</td></tr><tr><td><code>myObject.age</code></td><td>39</td></tr><tr><td><code>myObject.other</code></td><td>undefined</td></tr><tr><td><code>myObject[0]</code></td><td>undefined</td></tr></tbody></table>
</div></div></div><div class="wrap" style="grid-row: span 2/span 2;"><div class="wrap-header h3wrap"><h3 id="访问嵌套"><a aria-hidden="true" tabindex="-1" href="#访问嵌套"><span class="icon icon-link"></span></a>访问嵌套</h3><div class="wrap-body">
<!--rehype:wrap-style=grid-row: span 2/span 2;-->
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">let</span> myObject <span class="token operator">=</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token string-property property">"ref"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="3"> <span class="token string-property property">"name"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
@@ -331,37 +335,38 @@
</span><span class="code-line line-number" line="26"><span class="token punctuation">}</span><span class="token punctuation">;</span>
</span></code></pre>
<hr>
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>myObject.ref.age</code></td>
<td>2</td>
</tr>
<tr>
<td><code>myObject["ref"]["age"]</code></td>
<td>2</td>
</tr>
<tr>
<td><code>myObject.jdoe</code></td>
<td>["Jason", "Doe", 39 ...]</td>
</tr>
<tr>
<td><code>myObject.jsmith[3]</code></td>
<td>"F"</td>
</tr>
<tr>
<td><code>myObject[1]</code></td>
<td>undefined</td>
</tr>
</tbody>
</table>
</div></div></div><div class="wrap" style="grid-row: span 2/span 2;"><div class="wrap-header h3wrap"><h3 id="访问对象数组"><a aria-hidden="true" tabindex="-1" href="#访问对象数组"><span class="icon icon-link"></span></a>访问对象数组</h3><div class="wrap-body"><!--rehype:wrap-style=grid-row: span 2/span 2;-->
<table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><code>myObject.ref.age</code></td><td>2</td></tr><tr><td><code>myObject["ref"]["age"]</code></td><td>2</td></tr><tr><td><code>myObject.jdoe</code></td><td>["Jason", "Doe", 39 ...]</td></tr><tr><td><code>myObject.jsmith[3]</code></td><td>"F"</td></tr><tr><td><code>myObject[1]</code></td><td>undefined</td></tr></tbody></table>
</div></div></div><div class="wrap" style="grid-row: span 2/span 2;"><div class="wrap-header h3wrap"><h3 id="访问对象数组"><a aria-hidden="true" tabindex="-1" href="#访问对象数组"><span class="icon icon-link"></span></a>访问对象数组</h3><div class="wrap-body">
<!--rehype:wrap-style=grid-row: span 2/span 2;-->
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">let</span> myArray <span class="token operator">=</span> <span class="token punctuation">[</span>
</span><span class="code-line line-number" line="2"> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="3"> <span class="token string-property property">"name"</span><span class="token operator">:</span> <span class="token string">"Jason"</span><span class="token punctuation">,</span>
@@ -390,36 +395,36 @@
</span><span class="code-line line-number" line="26"><span class="token punctuation">]</span><span class="token punctuation">;</span>
</span></code></pre>
<hr>
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>myArray[0]</code></td>
<td><code>{</code>"name": "Jason", ...<code>}</code></td>
</tr>
<tr>
<td><code>myArray[1].name</code></td>
<td>"Tom"</td>
</tr>
<tr>
<td><code>myArray[1][2]</code></td>
<td>42</td>
</tr>
<tr>
<td><code>myArray[3]</code></td>
<td>undefined</td>
</tr>
<tr>
<td><code>myArray[3].gender</code></td>
<td>TypeError: Cannot read...</td>
</tr>
</tbody>
</table>
<table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><code>myArray[0]</code></td><td><code>{</code>"name": "Jason", ...<code>}</code></td></tr><tr><td><code>myArray[1].name</code></td><td>"Tom"</td></tr><tr><td><code>myArray[1][2]</code></td><td>42</td></tr><tr><td><code>myArray[3]</code></td><td>undefined</td></tr><tr><td><code>myArray[3].gender</code></td><td>TypeError: Cannot read...</td></tr></tbody></table>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="访问阵列"><a aria-hidden="true" tabindex="-1" href="#访问阵列"><span class="icon icon-link"></span></a>访问阵列</h3><div class="wrap-body">
<pre class="language-javascript"><code class="language-javascript code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">let</span> myArray <span class="token operator">=</span> <span class="token punctuation">[</span>
</span><span class="code-line line-number" line="2"> <span class="token string">"Jason"</span><span class="token punctuation">,</span>
@@ -431,34 +436,33 @@
</span><span class="code-line line-number" line="8"><span class="token punctuation">]</span><span class="token punctuation">;</span>
</span></code></pre>
<hr>
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>myArray[1]</code></td>
<td>"Doe"</td>
</tr>
<tr>
<td><code>myArray[5]</code></td>
<td>true</td>
</tr>
<tr>
<td><code>myArray[6]</code></td>
<td>undefined</td>
</tr>
</tbody>
</table>
<table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><code>myArray[1]</code></td><td>"Doe"</td></tr><tr><td><code>myArray[5]</code></td><td>true</td></tr><tr><td><code>myArray[6]</code></td><td>undefined</td></tr></tbody></table>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="另见"><a aria-hidden="true" tabindex="-1" href="#另见"><span class="icon icon-link"></span></a>另见</h2><div class="wrap-body">
<ul>
<li><a href="https://www.json.org/json-en.html">JSON</a> <em>(json.org)</em></li>
<li><a href="http://jsoneditoronline.org/">JSON Editor Online</a> <em>(jsoneditoronline.org)</em></li>
<li><a href="https://tableconvert.com/json-to-markdown">Convert JSON Array to Markdown Table, CSV and more</a> <em>(tableconvert.com)</em></li>
<li><a href="https://www.json.org/json-en.html">JSON</a> <em>(json.org)</em></li>
<li><a href="http://jsoneditoronline.org/">JSON Editor Online</a> <em>(jsoneditoronline.org)</em></li>
<li><a href="https://tableconvert.com/json-to-markdown">Convert JSON Array to Markdown Table, CSV and more</a> <em>(tableconvert.com)</em></li>
</ul>
</div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

View File

@@ -59,7 +59,8 @@
</span><span class="code-line line-number" line="4"><span class="token blockquote punctuation">> ></span> 嵌套
</span><span class="code-line line-number" line="5"><span class="token blockquote punctuation">> ></span> 块引用
</span></code></pre>
</div></div></div><div class="wrap" style="grid-row: span 2/span 2;"><div class="wrap-header h3wrap"><h3 id="无序列表"><a aria-hidden="true" tabindex="-1" href="#无序列表"><span class="icon icon-link"></span></a>无序列表</h3><div class="wrap-body"><!--rehype:wrap-style=grid-row: span 2/span 2;-->
</div></div></div><div class="wrap" style="grid-row: span 2/span 2;"><div class="wrap-header h3wrap"><h3 id="无序列表"><a aria-hidden="true" tabindex="-1" href="#无序列表"><span class="icon icon-link"></span></a>无序列表</h3><div class="wrap-body">
<!--rehype:wrap-style=grid-row: span 2/span 2;-->
<pre class="language-markdown"><code class="language-markdown code-highlight"><span class="code-line line-number" line="1"><span class="token list punctuation">*</span> Item 1
</span><span class="code-line line-number" line="2"><span class="token list punctuation">*</span> Item 2
</span><span class="code-line line-number" line="3"> <span class="token list punctuation">*</span> item 3a
@@ -125,7 +126,8 @@
</div></div><div class="h3wrap-body"><div class="wrap"><div class="wrap-header h4wrap"><h4 id="内联代码"><a aria-hidden="true" tabindex="-1" href="#内联代码"><span class="icon icon-link"></span></a>内联代码</h4><div class="wrap-body">
<pre class="language-markdown"><code class="language-markdown code-highlight"><span class="code-line line-number" line="1"><span class="token code-snippet code keyword">`Inline code`</span> 周围有反引号
</span></code></pre>
</div></div></div></div></div><div class="wrap" style="grid-column: span 2/span 2;"><div class="wrap-header h3wrap"><h3 id="表格"><a aria-hidden="true" tabindex="-1" href="#表格"><span class="icon icon-link"></span></a>表格</h3><div class="wrap-body"><!--rehype:wrap-style=grid-column: span 2/span 2;-->
</div></div></div></div></div><div class="wrap" style="grid-column: span 2/span 2;"><div class="wrap-header h3wrap"><h3 id="表格"><a aria-hidden="true" tabindex="-1" href="#表格"><span class="icon icon-link"></span></a>表格</h3><div class="wrap-body">
<!--rehype:wrap-style=grid-column: span 2/span 2;-->
<pre class="language-markdown"><code class="language-markdown code-highlight"><span class="code-line line-number" line="1"><span class="token table"><span class="token table-header-row"><span class="token punctuation">|</span><span class="token table-header important"> 左栏 </span><span class="token punctuation">|</span><span class="token table-header important"> 中间栏 </span><span class="token punctuation">|</span><span class="token table-header important"> 右栏 </span><span class="token punctuation">|</span>
</span></span></span><span class="code-line line-number" line="2"><span class="token table"><span class="token table-header-row"></span><span class="token table-line"><span class="token punctuation">|</span><span class="token punctuation">:------------</span><span class="token punctuation">|</span><span class="token punctuation">:-------------:</span><span class="token punctuation">|</span><span class="token punctuation">-------------:</span><span class="token punctuation">|</span>
</span></span></span><span class="code-line line-number" line="3"><span class="token table"><span class="token table-line"></span><span class="token table-data-rows"><span class="token punctuation">|</span><span class="token table-data"> 单元格 1 </span><span class="token punctuation">|</span><span class="token table-data"> 居中 </span><span class="token punctuation">|</span><span class="token table-data"> $1600 </span><span class="token punctuation">|</span>
@@ -138,7 +140,8 @@
</span></span></span><span class="code-line line-number" line="4"><span class="token table"><span class="token table-data-rows"><span class="token table-data"> 单元格 2 </span><span class="token punctuation">|</span><span class="token table-data"> 单元格 3 </span><span class="token punctuation">|</span><span class="token table-data"> $12</span>
</span></span></span></code></pre>
<p>Markdown 表格生成器:<a href="https://tableconvert.com/">tableconvert.com</a></p>
</div></div></div><div class="wrap" style="grid-column: span 2/span 2;"><div class="wrap-header h3wrap"><h3 id="图片"><a aria-hidden="true" tabindex="-1" href="#图片"><span class="icon icon-link"></span></a>图片</h3><div class="wrap-body"><!--rehype:wrap-style=grid-column: span 2/span 2;-->
</div></div></div><div class="wrap" style="grid-column: span 2/span 2;"><div class="wrap-header h3wrap"><h3 id="图片"><a aria-hidden="true" tabindex="-1" href="#图片"><span class="icon icon-link"></span></a>图片</h3><div class="wrap-body">
<!--rehype:wrap-style=grid-column: span 2/span 2;-->
<pre class="language-markdown"><code class="language-markdown code-highlight"><span class="code-line line-number" line="1"><span class="token url"><span class="token operator">!</span>[<span class="token content">GitHub Logo</span>](<span class="token url">/images/logo.png</span>)</span>
</span><span class="code-line line-number" line="2">
</span><span class="code-line line-number" line="3"><span class="token url"><span class="token operator">!</span>[<span class="token content">Alt Text</span>](<span class="token url">url</span>)</span>
@@ -154,77 +157,76 @@
</span><span class="code-line line-number" line="3"><span class="token url-reference url"><span class="token punctuation">[</span><span class="token variable">logo</span><span class="token punctuation">]</span><span class="token punctuation">:</span> /images/logo.png <span class="token string">"Logo Title"</span></span>
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="反斜杠转义"><a aria-hidden="true" tabindex="-1" href="#反斜杠转义"><span class="icon icon-link"></span></a>反斜杠转义</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>字符</th>
<th>转义</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>\</td>
<td>\\</td>
<td>backslash 反斜杠</td>
</tr>
<tr>
<td>`</td>
<td>\`</td>
<td>backtick 反引号</td>
</tr>
<tr>
<td>*</td>
<td>\*</td>
<td>asterisk 星号</td>
</tr>
<tr>
<td>_</td>
<td>\_</td>
<td>underscore 下划线</td>
</tr>
<tr>
<td>{}</td>
<td>\{}</td>
<td>curly braces 花括号</td>
</tr>
<tr>
<td>[]</td>
<td>\[]</td>
<td>square brackets 方括号</td>
</tr>
<tr>
<td>()</td>
<td>\()</td>
<td>parentheses 圆括号</td>
</tr>
<tr>
<td>#</td>
<td>\#</td>
<td>hash mark 哈希标记</td>
</tr>
<tr>
<td>+</td>
<td>\+</td>
<td>plus sign 加号</td>
</tr>
<tr>
<td>-</td>
<td>\-</td>
<td>minus sign (hyphen) 减号(连字符)</td>
</tr>
<tr>
<td>.</td>
<td>\.</td>
<td>dot 点</td>
</tr>
<tr>
<td>!</td>
<td>\!</td>
<td>exclamation mark 感叹号</td>
</tr>
</tbody>
</table>
<table><thead><tr><th>字符</th><th>转义</th><th>描述</th></tr></thead><tbody><tr><td>\</td><td>\\</td><td>backslash 反斜杠</td></tr><tr><td>`</td><td>\`</td><td>backtick 反引号</td></tr><tr><td>*</td><td>\*</td><td>asterisk 星号</td></tr><tr><td>_</td><td>\_</td><td>underscore 下划线</td></tr><tr><td>{}</td><td>\{}</td><td>curly braces 花括号</td></tr><tr><td>[]</td><td>\[]</td><td>square brackets 方括号</td></tr><tr><td>()</td><td>\()</td><td>parentheses 圆括号</td></tr><tr><td>#</td><td>\#</td><td>hash mark 哈希标记</td></tr><tr><td>+</td><td>\+</td><td>plus sign 加号</td></tr><tr><td>-</td><td>\-</td><td>minus sign (hyphen) 减号(连字符)</td></tr><tr><td>.</td><td>\.</td><td>dot 点</td></tr><tr><td>!</td><td>\!</td><td>exclamation mark 感叹号</td></tr></tbody></table>
</div></div></div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

View File

@@ -38,155 +38,156 @@
<p>这个 npm 快速参考备忘单显示了它的常用命令使用清单。</p>
</div></header><div class="h1wrap-body"><div class="wrap"><div class="wrap-header h2wrap"><h2 id="常用命令"><a aria-hidden="true" tabindex="-1" href="#常用命令"><span class="icon icon-link"></span></a>常用命令</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="包管理"><a aria-hidden="true" tabindex="-1" href="#包管理"><span class="icon icon-link"></span></a>包管理</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>命令</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>npm i</code></td>
<td><code>npm install</code>的别名</td>
</tr>
<tr>
<td><code>npm install</code></td>
<td>安装 package.json 中的所有内容</td>
</tr>
<tr>
<td><code>npm install --production</code></td>
<td>安装 package.json 中的所有内容,除了 devDependecies</td>
</tr>
<tr>
<td><code>npm install lodash</code></td>
<td>安装一个包</td>
</tr>
<tr>
<td><code>npm install --save-dev lodash</code></td>
<td>安装为 devDependency</td>
</tr>
<tr>
<td><code>npm install --save-exact lodash</code></td>
<td>准确安装</td>
</tr>
</tbody>
</table>
<table><thead><tr><th>命令</th><th>描述</th></tr></thead><tbody><tr><td><code>npm i</code></td><td><code>npm install</code>的别名</td></tr><tr><td><code>npm install</code></td><td>安装 package.json 中的所有内容</td></tr><tr><td><code>npm install --production</code></td><td>安装 package.json 中的所有内容,除了 devDependecies</td></tr><tr><td><code>npm install lodash</code></td><td>安装一个包</td></tr><tr><td><code>npm install --save-dev lodash</code></td><td>安装为 devDependency</td></tr><tr><td><code>npm install --save-exact lodash</code></td><td>准确安装</td></tr></tbody></table>
<p><code>--save</code> 是 npm@5 的默认值。 以前,使用不带 <code>--save</code><code>npm install</code> 不会更新 package.json。</p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="安装名称"><a aria-hidden="true" tabindex="-1" href="#安装名称"><span class="icon icon-link"></span></a>安装名称</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>命令</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>npm i sax</code></td>
<td>NPM 包</td>
</tr>
<tr>
<td><code>npm i sax@latest</code></td>
<td>指定标签“最新”</td>
</tr>
<tr>
<td><code>npm i sax@3.0.0</code></td>
<td>指定版本 <code>3.0.0</code></td>
</tr>
<tr>
<td><code>npm i sax@">=1 &#x3C;2.0"</code></td>
<td>指定版本范围</td>
</tr>
<tr>
<td><code>npm i @org/sax</code></td>
<td>范围内的 NPM 包</td>
</tr>
<tr>
<td><code>npm i user/repo</code></td>
<td>GitHub</td>
</tr>
<tr>
<td><code>npm i user/repo#master</code></td>
<td>GitHub</td>
</tr>
<tr>
<td><code>npm i github:user/repo</code></td>
<td>GitHub</td>
</tr>
<tr>
<td><code>npm i gitlab:user/repo</code></td>
<td>GitLab</td>
</tr>
<tr>
<td><code>npm i /path/to/repo</code></td>
<td>绝对路径</td>
</tr>
<tr>
<td><code>npm i ./archive.tgz</code></td>
<td>压缩包</td>
</tr>
<tr>
<td><code>npm i https://site.com/archive.tgz</code></td>
<td>通过 HTTP 压缩包</td>
</tr>
</tbody>
</table>
<table><thead><tr><th>命令</th><th>描述</th></tr></thead><tbody><tr><td><code>npm i sax</code></td><td>NPM 包</td></tr><tr><td><code>npm i sax@latest</code></td><td>指定标签“最新”</td></tr><tr><td><code>npm i sax@3.0.0</code></td><td>指定版本 <code>3.0.0</code></td></tr><tr><td><code>npm i sax@">=1 &#x3C;2.0"</code></td><td>指定版本范围</td></tr><tr><td><code>npm i @org/sax</code></td><td>范围内的 NPM 包</td></tr><tr><td><code>npm i user/repo</code></td><td>GitHub</td></tr><tr><td><code>npm i user/repo#master</code></td><td>GitHub</td></tr><tr><td><code>npm i github:user/repo</code></td><td>GitHub</td></tr><tr><td><code>npm i gitlab:user/repo</code></td><td>GitLab</td></tr><tr><td><code>npm i /path/to/repo</code></td><td>绝对路径</td></tr><tr><td><code>npm i ./archive.tgz</code></td><td>压缩包</td></tr><tr><td><code>npm i https://site.com/archive.tgz</code></td><td>通过 HTTP 压缩包</td></tr></tbody></table>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="清单"><a aria-hidden="true" tabindex="-1" href="#清单"><span class="icon icon-link"></span></a>清单</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>命令</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>npm list</code></td>
<td>列出此软件中所有依赖项的已安装版本</td>
</tr>
<tr>
<td><code>npm list -g --depth 0</code></td>
<td>列出所有全局安装包的安装版本</td>
</tr>
<tr>
<td><code>npm view</code></td>
<td>列出此软件中所有依赖项的最新版本</td>
</tr>
<tr>
<td><code>npm outdated</code></td>
<td>仅列出此软件中已过时的依赖项</td>
</tr>
</tbody>
</table>
<table><thead><tr><th>命令</th><th>描述</th></tr></thead><tbody><tr><td><code>npm list</code></td><td>列出此软件中所有依赖项的已安装版本</td></tr><tr><td><code>npm list -g --depth 0</code></td><td>列出所有全局安装包的安装版本</td></tr><tr><td><code>npm view</code></td><td>列出此软件中所有依赖项的最新版本</td></tr><tr><td><code>npm outdated</code></td><td>仅列出此软件中已过时的依赖项</td></tr></tbody></table>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="更新"><a aria-hidden="true" tabindex="-1" href="#更新"><span class="icon icon-link"></span></a>更新</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>命令</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>npm update</code></td>
<td>更新生产包</td>
</tr>
<tr>
<td><code>npm update --dev</code></td>
<td>更新开发包</td>
</tr>
<tr>
<td><code>npm update -g</code></td>
<td>更新全局包</td>
</tr>
<tr>
<td><code>npm update lodash</code></td>
<td>更新 lodash 包</td>
</tr>
</tbody>
</table>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="杂项功能"><a aria-hidden="true" tabindex="-1" href="#杂项功能"><span class="icon icon-link"></span></a>杂项功能</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
<table><thead><tr><th>命令</th><th>描述</th></tr></thead><tbody><tr><td><code>npm update</code></td><td>更新生产包</td></tr><tr><td><code>npm update --dev</code></td><td>更新开发包</td></tr><tr><td><code>npm update -g</code></td><td>更新全局包</td></tr><tr><td><code>npm update lodash</code></td><td>更新 lodash 包</td></tr></tbody></table>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="杂项功能"><a aria-hidden="true" tabindex="-1" href="#杂项功能"><span class="icon icon-link"></span></a>杂项功能</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<p>将某人添加为所有者</p>
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line line-number" line="1"><span class="token function">npm</span> owner <span class="token function">add</span> USERNAME PACKAGENAME
</span></code></pre>
@@ -202,6 +203,5 @@
<p>检查过时的包</p>
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line line-number" line="1"><span class="token function">npm</span> outdated <span class="token punctuation">[</span>PACKAGE<span class="token punctuation">]</span>
</span></code></pre>
</div></div></div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

View File

@@ -40,8 +40,8 @@
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="介绍"><a aria-hidden="true" tabindex="-1" href="#介绍"><span class="icon icon-link"></span></a>介绍</h3><div class="wrap-body">
<p>本快速参考备忘清单是您需要了解的关于 package.json 文件中所需内容的全部内容。 它必须是实际的 JSON而不仅仅是 JavaScript 对象字面量。</p>
<ul>
<li><a href="https://docs.npmjs.com/files/package.json">npm 文档</a> <em>(npmjs.com)</em></li>
<li><a href="https://classic.yarnpkg.com/en/docs/package-json">yarnpkg 文档</a> <em>(yarnpkg.com)</em></li>
<li><a href="https://docs.npmjs.com/files/package.json">npm 文档</a> <em>(npmjs.com)</em></li>
<li><a href="https://classic.yarnpkg.com/en/docs/package-json">yarnpkg 文档</a> <em>(yarnpkg.com)</em></li>
</ul>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="name"><a aria-hidden="true" tabindex="-1" href="#name"><span class="icon icon-link"></span></a><code>name</code></h3><div class="wrap-body">
<pre class="language-json"><code class="language-json code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">{</span>
@@ -50,10 +50,10 @@
</span></code></pre>
<p><strong>规则</strong></p>
<ul>
<li>必须小于或等于214个字符(包括 <code>@scope/</code> 范围包)</li>
<li>不能以点(<code>.</code>)或下划线(<code>_</code>)开头</li>
<li>名称中不得包含大写字母</li>
<li>必须仅使用URL安全字符</li>
<li>必须小于或等于214个字符(包括 <code>@scope/</code> 范围包)</li>
<li>不能以点(<code>.</code>)或下划线(<code>_</code>)开头</li>
<li>名称中不得包含大写字母</li>
<li>必须仅使用URL安全字符</li>
</ul>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="version"><a aria-hidden="true" tabindex="-1" href="#version"><span class="icon icon-link"></span></a><code>version</code></h3><div class="wrap-body">
<pre class="language-json"><code class="language-json code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">{</span>
@@ -63,14 +63,15 @@
<p>包的当前版本,严格遵循 <a href="http://semver.org/lang/zh-CN/">Semantic Versioning 2.0.0</a> 语义化版本规范。</p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="tips"><a aria-hidden="true" tabindex="-1" href="#tips"><span class="icon icon-link"></span></a>Tips</h3><div class="wrap-body">
<ul>
<li>不要使用和 <code>Node.js</code> 核心模块相同的名字。</li>
<li>不要在名字里包含 <code>js</code> 或者 <code>node</code> 单词。</li>
<li>短小精悍,让人看到名字就大概了解包的功能,记住它也会被用在 <code>require()</code> 调用里。</li>
<li>保证名字在 <a href="https://www.npmjs.com/">npm registry</a> 里是唯一的。</li>
<li>name 和 version 字段一起用于创建唯一ID</li>
<li>不要使用和 <code>Node.js</code> 核心模块相同的名字。</li>
<li>不要在名字里包含 <code>js</code> 或者 <code>node</code> 单词。</li>
<li>短小精悍,让人看到名字就大概了解包的功能,记住它也会被用在 <code>require()</code> 调用里。</li>
<li>保证名字在 <a href="https://www.npmjs.com/">npm registry</a> 里是唯一的。</li>
<li>name 和 version 字段一起用于创建唯一ID</li>
</ul>
<p>如果没有 <code>name</code><code>version</code> 字段,您的包将无法安装</p>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="安装-name-包"><a aria-hidden="true" tabindex="-1" href="#安装-name-包"><span class="icon icon-link"></span></a>安装 <code>name</code></h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="安装-name-包"><a aria-hidden="true" tabindex="-1" href="#安装-name-包"><span class="icon icon-link"></span></a>安装 <code>name</code></h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-sh"><code class="language-sh code-highlight"><span class="code-line line-number" line="1"><span class="token function">yarn</span> <span class="token function">add</span> <span class="token punctuation">[</span>包名<span class="token punctuation">]</span>
</span><span class="code-line line-number" line="2"><span class="token comment"># or</span>
</span><span class="code-line line-number" line="3"><span class="token function">npm</span> <span class="token function">install</span> <span class="token punctuation">[</span>包名<span class="token punctuation">]</span>
@@ -80,7 +81,8 @@
</span></code></pre>
<p>npmjs 下载地址</p>
<pre class="wrap-text"><code class="language-bash code-highlight"><span class="code-line line-number" line="1">https://registry.npmjs.org/<span class="token punctuation">[</span>包名<span class="token punctuation">]</span>/-/<span class="token punctuation">[</span>包名<span class="token punctuation">]</span>-<span class="token punctuation">[</span>version<span class="token punctuation">]</span>.tgz
</span></code></pre><!--rehype:className=wrap-text-->
</span></code></pre>
<!--rehype:className=wrap-text-->
<p>这是您的 <code></code> 的名称。 它在URL中使用作为参数命令行以及 <code>node_modules</code> 中的目录名。</p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="信息类字段"><a aria-hidden="true" tabindex="-1" href="#信息类字段"><span class="icon icon-link"></span></a>信息类字段</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="description"><a aria-hidden="true" tabindex="-1" href="#description"><span class="icon icon-link"></span></a><code>description</code></h3><div class="wrap-body">
@@ -89,7 +91,8 @@
</span><span class="code-line line-number" line="3"><span class="token punctuation">}</span>
</span></code></pre>
<p>帮助使用者了解包的功能的字符串,包管理器也会把这个字符串作为搜索关键词。</p>
</div></div></div><div class="wrap col-span-2 row-span-2"><div class="wrap-header h3wrap"><h3 id="license"><a aria-hidden="true" tabindex="-1" href="#license"><span class="icon icon-link"></span></a><code>license</code></h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2 row-span-2-->
</div></div></div><div class="wrap col-span-2 row-span-2"><div class="wrap-header h3wrap"><h3 id="license"><a aria-hidden="true" tabindex="-1" href="#license"><span class="icon icon-link"></span></a><code>license</code></h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2 row-span-2-->
<p>所有包都应该指定许可证,以便让用户了解他们是在什么授权下使用此包,以及此包还有哪些附加限制。</p>
<pre class="language-json"><code class="language-json code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token property">"license"</span><span class="token operator">:</span> <span class="token string">"MIT"</span><span class="token punctuation">,</span>
@@ -101,10 +104,10 @@
<p>鼓励使用开源 <a href="https://opensource.org/licenses/alphabetical">(OSI-approved)</a> 许可证,除非你有特别的原因不用它。 如果你开发的包是你工作的一部分,最好和公司讨论后再做决定。</p>
<p><strong>license字段必须是以下之一:</strong></p>
<ul>
<li>如果你使用标准的许可证,需要一个有效地 <a href="https://spdx.org/licenses/">SPDX 许可证标识</a></li>
<li>如果你用多种标准许可证,需要有效的 <a href="https://www.npmjs.com/package/spdx">SPDX 许可证表达式2.0语法表达式</a></li>
<li>如果你使用非标准的许可证,一个 <code>SEE LICENSE IN &#x3C;文件名></code> 字符串指向你的包里顶级目录的一个 &#x3C;文件名>。</li>
<li>如果你不想在任何条款下授权其他人使用你的私有或未公开的包,一个 <code>UNLICENSED</code> 字符串。</li>
<li>如果你使用标准的许可证,需要一个有效地 <a href="https://spdx.org/licenses/">SPDX 许可证标识</a></li>
<li>如果你用多种标准许可证,需要有效的 <a href="https://www.npmjs.com/package/spdx">SPDX 许可证表达式2.0语法表达式</a></li>
<li>如果你使用非标准的许可证,一个 <code>SEE LICENSE IN &#x3C;文件名></code> 字符串指向你的包里顶级目录的一个 &#x3C;文件名>。</li>
<li>如果你不想在任何条款下授权其他人使用你的私有或未公开的包,一个 <code>UNLICENSED</code> 字符串。</li>
</ul>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="keywords"><a aria-hidden="true" tabindex="-1" href="#keywords"><span class="icon icon-link"></span></a><code>keywords</code></h3><div class="wrap-body">
<pre class="language-json"><code class="language-json code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">{</span>
@@ -122,7 +125,8 @@
</span><span class="code-line line-number" line="3"><span class="token punctuation">}</span>
</span></code></pre>
<p>是包的项目主页或者文档首页。</p>
</div></div></div><div class="wrap col-span-2 row-span-2"><div class="wrap-header h3wrap"><h3 id="repository"><a aria-hidden="true" tabindex="-1" href="#repository"><span class="icon icon-link"></span></a><code>repository</code></h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2 row-span-2-->
</div></div></div><div class="wrap col-span-2 row-span-2"><div class="wrap-header h3wrap"><h3 id="repository"><a aria-hidden="true" tabindex="-1" href="#repository"><span class="icon icon-link"></span></a><code>repository</code></h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2 row-span-2-->
<pre class="language-json"><code class="language-json code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token property">"repository"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="3"> <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"git"</span><span class="token punctuation">,</span> <span class="token property">"url"</span><span class="token operator">:</span> <span class="token string">"https://github.com/user/repo.git"</span>
@@ -153,7 +157,8 @@
</span><span class="code-line line-number" line="8"><span class="token punctuation">}</span>
</span></code></pre>
<p>作者信息,一个人。</p>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="contributors"><a aria-hidden="true" tabindex="-1" href="#contributors"><span class="icon icon-link"></span></a><code>contributors</code></h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="contributors"><a aria-hidden="true" tabindex="-1" href="#contributors"><span class="icon icon-link"></span></a><code>contributors</code></h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-json"><code class="language-json code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token property">"contributors"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
</span><span class="code-line line-number" line="3"> <span class="token punctuation">{</span> <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"Your Friend"</span><span class="token punctuation">,</span> <span class="token property">"email"</span><span class="token operator">:</span> <span class="token string">"friend@xxx.com"</span><span class="token punctuation">,</span> <span class="token property">"url"</span><span class="token operator">:</span> <span class="token string">"http://friends-xx.com"</span> <span class="token punctuation">}</span>
@@ -214,20 +219,21 @@
</span></code></pre>
<p>随着项目一起被安装的可执行文件。</p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="types"><a aria-hidden="true" tabindex="-1" href="#types"><span class="icon icon-link"></span></a><code>types</code></h3><div class="wrap-body">
<p>这是一个只在 <a href="https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html">TypeScript</a> 中生效的字段,如果您的包有一个 <code>main.js</code> 文件,您还需要在 <code>package.json</code> 文件中指明主声明文件。 将 <code>types</code> 属性设置为指向 <code>bundled</code> 的声明文件。 例如:</p>
<p>这是一个只在 <a href="https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html">TypeScript</a> 中生效的字段,如果您的包有一个 <code>main.js</code> 文件,您还需要在 <code>package.json</code> 文件中指明主声明文件。 将 <code>types</code> 属性设置为指向 <code>bundled</code> 的声明文件。 例如:</p>
<pre class="language-json"><code class="language-json code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token property">"types"</span><span class="token operator">:</span> <span class="token string">"./lib/main.d.ts"</span><span class="token punctuation">,</span>
</span><span class="code-line line-number" line="3"><span class="token punctuation">}</span>
</span></code></pre>
<p>如果您的主声明文件名为 <code>index.d.ts</code> 并且位于包的根目录(<code>index.js</code>旁边),则不需要标记 <code>types</code> 属性,建议这样做。</p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="打包包字段"><a aria-hidden="true" tabindex="-1" href="#打包包字段"><span class="icon icon-link"></span></a>打包包字段</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap col-span-2 row-span-2"><div class="wrap-header h3wrap"><h3 id="esnext"><a aria-hidden="true" tabindex="-1" href="#esnext"><span class="icon icon-link"></span></a><code>esnext</code></h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2 row-span-2-->
</div></div><div class="h2wrap-body"><div class="wrap col-span-2 row-span-2"><div class="wrap-header h3wrap"><h3 id="esnext"><a aria-hidden="true" tabindex="-1" href="#esnext"><span class="icon icon-link"></span></a><code>esnext</code></h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2 row-span-2-->
<p>完整的<a href="http://2ality.com/2017/04/transpiling-dependencies-babel.html">提案在这里</a>。 简短说明:</p>
<ul>
<li><code>esnext</code>ES模块中使用阶段4功能或更旧版本的源代码未编译。</li>
<li><code>main</code>指向一个CommonJS模块或UMD模块<code>JavaScript</code><code>Node.js</code> 当前可以处理的一样现代。</li>
<li>大多数 <code>module</code> 用例应该可以通过 <code>esnext</code> 处理。</li>
<li><code>browser</code> 可以通过 <code>esnext</code> 的扩展版本来处理</li>
<li><code>esnext</code>ES模块中使用阶段4功能或更旧版本的源代码未编译。</li>
<li><code>main</code>指向一个CommonJS模块或UMD模块<code>JavaScript</code><code>Node.js</code> 当前可以处理的一样现代。</li>
<li>大多数 <code>module</code> 用例应该可以通过 <code>esnext</code> 处理。</li>
<li><code>browser</code> 可以通过 <code>esnext</code> 的扩展版本来处理</li>
</ul>
<pre class="language-json"><code class="language-json code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token property">"main"</span><span class="token operator">:</span> <span class="token string">"main.js"</span><span class="token punctuation">,</span>
@@ -265,27 +271,28 @@
<p>有一些特殊的脚本名称。 如果定义了 <code>preinstall</code> 脚本,它会在包安装前被调用。 出于兼容性考虑,<code>install</code><code>postinstall</code><code>prepublish</code> 脚本会在包完成安装后被调用。</p>
<p><code>start</code> 脚本的默认值为 <code>node server.js</code></p>
<p>参考文档:<a href="https://docs.npmjs.com/files/package.json#default-values">npm docs</a></p>
</div></div></div><div class="wrap col-span-2 row-span-2"><div class="wrap-header h3wrap"><h3 id="特定的-scripts"><a aria-hidden="true" tabindex="-1" href="#特定的-scripts"><span class="icon icon-link"></span></a>特定的 <code>scripts</code></h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2 row-span-2-->
</div></div></div><div class="wrap col-span-2 row-span-2"><div class="wrap-header h3wrap"><h3 id="特定的-scripts"><a aria-hidden="true" tabindex="-1" href="#特定的-scripts"><span class="icon icon-link"></span></a>特定的 <code>scripts</code></h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2 row-span-2-->
<p>对于以下脚本,<code>npm</code> 支持 <code>package.json</code> 文件的 <code>scripts</code> 默认命令字段:</p>
<ul>
<li><code>prepublish</code>: 在打包并发布包之前运行,以及在没有任何参数的本地 <code>npm</code> 安装之前运行。 (见下文)</li>
<li><code>prepare</code>: 在打包和发布包之前运行,在没有任何参数的本地 <code>npm install</code> 上运行,以及安装 git 依赖项时(见下文)。 这是在 <code>preublish</code> 之后运行,但是在 <code>preublishOnly</code> 之前运行。</li>
<li><code>prepublishOnly</code>: 在包准备和打包之前运行仅限于npm发布。 (见下文。)</li>
<li><code>prepack</code>: 在打包 <code>tarball</code> 之前运行(在 <code>npm pack</code><code>npm publish</code>,以及安装 git 依赖项时)</li>
<li><code>postpack</code>: 在生成 <code>tarball</code> 之后运行并移动到其最终目标。</li>
<li><code>publish</code>, <code>postpublish</code>: 在包发布后运行。</li>
<li><code>preinstall</code>: 在安装软件包之前运行。</li>
<li><code>install</code>, <code>postinstall</code>: 安装包后运行。</li>
<li><code>preuninstall</code>, <code>uninstall</code>: 在卸载软件包之前运行。</li>
<li><code>postuninstall</code>: 在卸载软件包之后运行。</li>
<li><code>preversion</code>: 在改变包版本之前运行。</li>
<li><code>version</code>: 改变包版本后运行,但提交之前。</li>
<li><code>postversion</code>: 改变包版本后运行,然后提交。</li>
<li><code>pretest</code>, <code>test</code>, <code>posttest</code>: 由 <code>npm test</code> 命令运行。</li>
<li><code>prestop</code>, <code>stop</code>, <code>poststop</code>: 由 <code>npm stop</code> 命令运行。</li>
<li><code>prestart</code>, <code>start</code>, <code>poststart</code>: 由 <code>npm start</code> 命令运行。</li>
<li><code>prerestart</code>, <code>restart</code>, <code>postrestart</code>: 由 <code>npm restart</code> 命令运行。 注意:如果没有提供重启脚本,<code>npm restart</code> 将运行 <code>stop</code><code>start</code> 脚本。</li>
<li><code>preshrinkwrap</code>, <code>shrinkwrap</code>, <code>postshrinkwrap</code>: 由 <code>npm shrinkwrap</code> 命令运行。</li>
<li><code>prepublish</code>: 在打包并发布包之前运行,以及在没有任何参数的本地 <code>npm</code> 安装之前运行。 (见下文)</li>
<li><code>prepare</code>: 在打包和发布包之前运行,在没有任何参数的本地 <code>npm install</code> 上运行,以及安装 git 依赖项时(见下文)。 这是在 <code>preublish</code> 之后运行,但是在 <code>preublishOnly</code> 之前运行。</li>
<li><code>prepublishOnly</code>: 在包准备和打包之前运行仅限于npm发布。 (见下文。)</li>
<li><code>prepack</code>: 在打包 <code>tarball</code> 之前运行(在 <code>npm pack</code><code>npm publish</code>,以及安装 git 依赖项时)</li>
<li><code>postpack</code>: 在生成 <code>tarball</code> 之后运行并移动到其最终目标。</li>
<li><code>publish</code>, <code>postpublish</code>: 在包发布后运行。</li>
<li><code>preinstall</code>: 在安装软件包之前运行。</li>
<li><code>install</code>, <code>postinstall</code>: 安装包后运行。</li>
<li><code>preuninstall</code>, <code>uninstall</code>: 在卸载软件包之前运行。</li>
<li><code>postuninstall</code>: 在卸载软件包之后运行。</li>
<li><code>preversion</code>: 在改变包版本之前运行。</li>
<li><code>version</code>: 改变包版本后运行,但提交之前。</li>
<li><code>postversion</code>: 改变包版本后运行,然后提交。</li>
<li><code>pretest</code>, <code>test</code>, <code>posttest</code>: 由 <code>npm test</code> 命令运行。</li>
<li><code>prestop</code>, <code>stop</code>, <code>poststop</code>: 由 <code>npm stop</code> 命令运行。</li>
<li><code>prestart</code>, <code>start</code>, <code>poststart</code>: 由 <code>npm start</code> 命令运行。</li>
<li><code>prerestart</code>, <code>restart</code>, <code>postrestart</code>: 由 <code>npm restart</code> 命令运行。 注意:如果没有提供重启脚本,<code>npm restart</code> 将运行 <code>stop</code><code>start</code> 脚本。</li>
<li><code>preshrinkwrap</code>, <code>shrinkwrap</code>, <code>postshrinkwrap</code>: 由 <code>npm shrinkwrap</code> 命令运行。</li>
</ul>
<p>参考文档:<a href="https://docs.npmjs.com/misc/scripts">npm docs</a>.</p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="config"><a aria-hidden="true" tabindex="-1" href="#config"><span class="icon icon-link"></span></a><code>config</code></h3><div class="wrap-body">
@@ -305,7 +312,8 @@
<p>配置中的键作为环境变量公开给脚本(scripts)。</p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="依赖描述类字段"><a aria-hidden="true" tabindex="-1" href="#依赖描述类字段"><span class="icon icon-link"></span></a>依赖描述类字段</h2><div class="wrap-body">
<p>你的包很可能依赖其他包。你可以在你的 <code>package.json</code> 文件里指定那些依赖。</p>
</div></div><div class="h2wrap-body"><div class="wrap col-span-2 row-span-2"><div class="wrap-header h3wrap"><h3 id="dependencies"><a aria-hidden="true" tabindex="-1" href="#dependencies"><span class="icon icon-link"></span></a><code>dependencies</code></h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2 row-span-2-->
</div></div><div class="h2wrap-body"><div class="wrap col-span-2 row-span-2"><div class="wrap-header h3wrap"><h3 id="dependencies"><a aria-hidden="true" tabindex="-1" href="#dependencies"><span class="icon icon-link"></span></a><code>dependencies</code></h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2 row-span-2-->
<p>这些是你的包的开发版和发布版都需要的依赖。</p>
<pre class="language-json"><code class="language-json code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token property">"dependencies"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
@@ -327,11 +335,10 @@
</span><span class="code-line line-number" line="18"> <span class="token punctuation">}</span>
</span><span class="code-line line-number" line="19"><span class="token punctuation">}</span>
</span></code></pre>
<p>
你可以指定一个确切的版本、一个最小的版本 (比如 <code>>=</code>) 或者一个版本范围 (比如 <code>>= ... &#x3C;</code>)。 包也可以指向本地的一个目录文件夹。
参考文档:<a href="https://docs.npmjs.com/cli/v8/configuring-npm/package-json#dependencies">npm docs</a>.
</p>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="workspaces"><a aria-hidden="true" tabindex="-1" href="#workspaces"><span class="icon icon-link"></span></a>workspaces</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
<p>你可以指定一个确切的版本、一个最小的版本 (比如 <code>>=</code>) 或者一个版本范围 (比如 <code>>= ... &#x3C;</code>)。 包也可以指向本地的一个目录文件夹。
参考文档:<a href="https://docs.npmjs.com/cli/v8/configuring-npm/package-json#dependencies">npm docs</a>.</p>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="workspaces"><a aria-hidden="true" tabindex="-1" href="#workspaces"><span class="icon icon-link"></span></a>workspaces</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<pre class="language-json"><code class="language-json code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"my-workspaces-powered-project"</span><span class="token punctuation">,</span>
</span><span class="code-line line-number" line="3"> <span class="token property">"workspaces"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
@@ -362,7 +369,8 @@
</span><span class="code-line line-number" line="5"><span class="token punctuation">}</span>
</span></code></pre>
<p>这些是只在你的包开发期间需要,但是生产环境不会被安装的包。</p>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="peerdependencies"><a aria-hidden="true" tabindex="-1" href="#peerdependencies"><span class="icon icon-link"></span></a><code>peerDependencies</code></h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="peerdependencies"><a aria-hidden="true" tabindex="-1" href="#peerdependencies"><span class="icon icon-link"></span></a><code>peerDependencies</code></h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-json"><code class="language-json code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token property">"peerDependencies"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="3"> <span class="token property">"package-3"</span><span class="token operator">:</span> <span class="token string">"^2.7.18"</span>
@@ -403,7 +411,8 @@
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="系统"><a aria-hidden="true" tabindex="-1" href="#系统"><span class="icon icon-link"></span></a>系统</h2><div class="wrap-body">
<p>你可以提供和你的包关联的系统级的信息,比如操作系统兼容性之类。</p>
</div></div><div class="h2wrap-body"><div class="wrap col-span-2 row-span-2"><div class="wrap-header h3wrap"><h3 id="engines"><a aria-hidden="true" tabindex="-1" href="#engines"><span class="icon icon-link"></span></a><code>engines</code></h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2 row-span-2-->
</div></div><div class="h2wrap-body"><div class="wrap col-span-2 row-span-2"><div class="wrap-header h3wrap"><h3 id="engines"><a aria-hidden="true" tabindex="-1" href="#engines"><span class="icon icon-link"></span></a><code>engines</code></h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2 row-span-2-->
<p>指定使用你的包客户必须使用的版本,这将检查 <code>process.versions</code> 以及当前 <code>yarn</code> 版本。</p>
<pre class="language-json"><code class="language-json code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token property">"engines"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
@@ -436,7 +445,8 @@
</span><span class="code-line line-number" line="3"><span class="token punctuation">}</span>
</span></code></pre>
<p>如果你不想你的包发布到包管理器(npm 或者 私有包管理),设置为 <code>true</code></p>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="publishconfig"><a aria-hidden="true" tabindex="-1" href="#publishconfig"><span class="icon icon-link"></span></a><code>publishConfig</code></h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="publishconfig"><a aria-hidden="true" tabindex="-1" href="#publishconfig"><span class="icon icon-link"></span></a><code>publishConfig</code></h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<p>这些配置值将在你的包发布时使用。比如,你可以给包打标签。</p>
<pre class="language-json"><code class="language-json code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token property">"publishConfig"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
@@ -454,7 +464,8 @@
</span><span class="code-line line-number" line="3"><span class="token punctuation">}</span>
</span></code></pre>
<p>请注意,如果你的 <code>package.json</code> 包含 <code>"flat": true</code> 并且其它包依赖你的包 (比如你在构建一个库,而不是应用) 其它那些包也需要在它们的 <code>package.json</code> 加上 <code>"flat": true</code>,或者在命令行上用 <code>yarn install --flat</code> 安装。</p>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="resolutions"><a aria-hidden="true" tabindex="-1" href="#resolutions"><span class="icon icon-link"></span></a><code>resolutions</code></h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="resolutions"><a aria-hidden="true" tabindex="-1" href="#resolutions"><span class="icon icon-link"></span></a><code>resolutions</code></h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-json"><code class="language-json code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token property">"resolutions"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="3"> <span class="token property">"transitive-package-1"</span><span class="token operator">:</span> <span class="token string">"0.0.29"</span><span class="token punctuation">,</span>
@@ -467,8 +478,7 @@
<p>注意,<code>yarn install --flat</code> 命令将会自动在 <code>package.json</code> 文件里加入 <code>resolutions</code> 字段。</p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="另见"><a aria-hidden="true" tabindex="-1" href="#另见"><span class="icon icon-link"></span></a>另见</h2><div class="wrap-body">
<ul>
<li><a href="https://jaywcjlove.github.io/package.json">PACKAGE.JSON 中文说明</a> <em>(github.io)</em></li>
<li><a href="https://jaywcjlove.github.io/package.json">PACKAGE.JSON 中文说明</a> <em>(github.io)</em></li>
</ul>
</div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

View File

@@ -41,7 +41,8 @@
<p>简单的将仓库克隆下来本地调试页面展示。</p>
</div></div><div class="h3wrap-body"><div class="wrap"><div class="wrap-header h4wrap"><h4 id="克隆仓库"><a aria-hidden="true" tabindex="-1" href="#克隆仓库"><span class="icon icon-link"></span></a>克隆仓库</h4><div class="wrap-body">
<pre class="wrap-text "><code class="language-shell code-highlight"><span class="code-line line-number" line="1"><span class="token function">git</span> clone git@github.com:jaywcjlove/reference.git
</span></code></pre><!--rehype:className=wrap-text -->
</span></code></pre>
<!--rehype:className=wrap-text -->
</div></div></div><div class="wrap"><div class="wrap-header h4wrap"><h4 id="安装依赖编译生成-html-页面"><a aria-hidden="true" tabindex="-1" href="#安装依赖编译生成-html-页面"><span class="icon icon-link"></span></a>安装依赖编译生成 HTML 页面</h4><div class="wrap-body">
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1"><span class="token function">npm</span> i <span class="token comment"># 安装依赖</span>
</span><span class="code-line line-number" line="2"><span class="token function">npm</span> run build <span class="token comment"># 编译输出 HTML</span>
@@ -55,16 +56,19 @@
</span><span class="code-line line-number" line="3">
</span><span class="code-line line-number" line="4">卡片 Markdown 内容展示,下面注释语法为文字内容改变样式
</span><span class="code-line line-number" line="5"><span class="token comment">&#x3C;!--rehype:style=color: red;--></span>
</span></code></pre><!--rehype:className=wrap-text -->
</span></code></pre>
<!--rehype:className=wrap-text -->
<p>使用 <code>col-span-2</code> 类标识,卡片占 <code>2</code> 列位置</p>
</div></div></div><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 style="color:black;background-color: #d7a100;" id="注释语法介绍"><a aria-hidden="true" tabindex="-1" href="#注释语法介绍"><span class="icon icon-link"></span></a>注释语法介绍</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-3&style=color:black;background-color: #d7a100;-->
</div></div></div><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 style="color:black;background-color: #d7a100;" id="注释语法介绍"><a aria-hidden="true" tabindex="-1" href="#注释语法介绍"><span class="icon icon-link"></span></a>注释语法介绍</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-3&style=color:black;background-color: #d7a100;-->
<ul>
<li>在某个 Markdown 语法下方或者后面,添加 HTML注释</li>
<li><code>&#x3C;!--rehype:</code> 开始,<code>--></code> 结束,包裹参数内容</li>
<li>内容采用 URL 参数的字符拼接方式</li>
<li>在某个 Markdown 语法下方或者后面,添加 HTML注释</li>
<li><code>&#x3C;!--rehype:</code> 开始,<code>--></code> 结束,包裹参数内容</li>
<li>内容采用 URL 参数的字符拼接方式</li>
</ul>
</div></div><div class="h3wrap-body"><div class="wrap"><div class="wrap-header h4wrap"><h4 id="语法"><a aria-hidden="true" tabindex="-1" href="#语法"><span class="icon icon-link"></span></a>语法</h4><div class="wrap-body">
<p><code>&#x3C;!--rehype:</code> + <code>key=value</code> + <code>&#x26;</code> + <code>key=value</code> + <code>--></code><br><code>标识开始</code> + <code>参数</code> + <code>分隔符</code> + <code>参数</code> + <code>标识结束</code></p>
<p><code>&#x3C;!--rehype:</code> + <code>key=value</code> + <code>&#x26;</code> + <code>key=value</code> + <code>--></code><br>
<code>标识开始</code> + <code>参数</code> + <code>分隔符</code> + <code>参数</code> + <code>标识结束</code></p>
</div></div></div><div class="wrap"><div class="wrap-header h4wrap"><h4 id="示例"><a aria-hidden="true" tabindex="-1" href="#示例"><span class="icon icon-link"></span></a>示例</h4><div class="wrap-body">
<pre class="language-markdown"><code class="language-markdown code-highlight"><span class="code-line line-number" line="1"><span class="token title important"><span class="token punctuation">###</span> H2 部分</span>
</span><span class="code-line line-number" line="2"><span class="token comment">&#x3C;!--rehype:body-class=cols-2--></span>
@@ -75,34 +79,35 @@
</div></div></div><div class="wrap"><div class="wrap-header h4wrap"><h4 id="示例三行占位标题红色"><a aria-hidden="true" tabindex="-1" href="#示例三行占位标题红色"><span class="icon icon-link"></span></a>示例,三行占位,标题红色</h4><div class="wrap-body">
<pre class="wrap-text "><code class="language-markdown code-highlight"><span class="code-line line-number" line="1"><span class="token title important"><span class="token punctuation">###</span> 标题</span>
</span><span class="code-line line-number" line="2"><span class="token comment">&#x3C;!--rehype:wrap-class=row-span-3&#x26;style=color:red;--></span>
</span></code></pre><!--rehype:className=wrap-text -->
</span></code></pre>
<!--rehype:className=wrap-text -->
</div></div></div><div class="wrap"><div class="wrap-header h4wrap"><h4 id="参数说明"><a aria-hidden="true" tabindex="-1" href="#参数说明"><span class="icon icon-link"></span></a>参数说明</h4><div class="wrap-body">
<table>
<thead>
<tr>
<th></th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>body-style</code></td>
<td>包裹所有卡片<code>外壳</code>的样式</td>
</tr>
<tr>
<td><code>body-class</code></td>
<td>用于卡片栏布局,添加<code></code></td>
</tr>
<tr>
<td><code>wrap-style</code></td>
<td>卡片栏添加 CSS 样式</td>
</tr>
<tr>
<td><code>wrap-class</code></td>
<td>用于卡片占位,添加<code></code></td>
</tr>
</tbody>
</table>
<table><thead><tr><th></th><th>说明</th></tr></thead><tbody><tr><td><code>body-style</code></td><td>包裹所有卡片<code>外壳</code>的样式</td></tr><tr><td><code>body-class</code></td><td>用于卡片栏布局,添加<code></code></td></tr><tr><td><code>wrap-style</code></td><td>卡片栏添加 CSS 样式</td></tr><tr><td><code>wrap-class</code></td><td>用于卡片占位,添加<code></code></td></tr></tbody></table>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="文字颜色"><a aria-hidden="true" tabindex="-1" href="#文字颜色"><span class="icon icon-link"></span></a>文字颜色</h3><div class="wrap-body">
<pre class="language-markdown"><code class="language-markdown code-highlight"><span class="code-line line-number" line="1"><span class="token italic"><span class="token punctuation">_</span><span class="token content">我是红色</span><span class="token punctuation">_</span></span><span class="token comment">&#x3C;!--rehype:style=color: red;--></span>
</span><span class="code-line line-number" line="2"><span class="token bold"><span class="token punctuation">**</span><span class="token content">加粗红色</span><span class="token punctuation">**</span></span><span class="token comment">&#x3C;!--rehype:style=color: red;--></span>
@@ -111,7 +116,8 @@
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="文字大小"><a aria-hidden="true" tabindex="-1" href="#文字大小"><span class="icon icon-link"></span></a>文字大小</h3><div class="wrap-body">
<pre class="wrap-text "><code class="language-markdown code-highlight"><span class="code-line line-number" line="1"><span class="token bold"><span class="token punctuation">**</span><span class="token content">加粗变大红色</span><span class="token punctuation">**</span></span>
</span><span class="code-line line-number" line="2"><span class="token comment">&#x3C;!--rehype:style=color: red;font-size: 18px--></span>
</span></code></pre><!--rehype:className=wrap-text -->
</span></code></pre>
<!--rehype:className=wrap-text -->
<p>上面添加注释样式,文字 <em style="color: red;font-size: 18px">加粗变大红色</em><!--rehype:style=color: red;font-size: 18px--><code></code>并且<code></code></p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="强制换行"><a aria-hidden="true" tabindex="-1" href="#强制换行"><span class="icon icon-link"></span></a>强制换行</h3><div class="wrap-body">
<pre class="language-markdown"><code class="language-markdown code-highlight"><span class="code-line line-number" line="1">\```js
@@ -130,16 +136,89 @@
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="tooltips"><a aria-hidden="true" tabindex="-1" href="#tooltips"><span class="icon icon-link"></span></a>Tooltips</h3><div class="wrap-body">
<p><a href="https://github.com/jaywcjlove/reference" class="tooltip">鼠标移动到上面有提示<em class="tooltiptext">Tooltips 的提示内容</em></a></p>
<p>添加注释配置 <code>&#x3C;!--rehype:tooltips--></code> 添加一个 Tooltips 提示。</p>
</div></div></div><div class="wrap" style="background: #00c69357;"><div class="wrap-header h3wrap"><h3 id="h3-部分卡片背景颜色"><a aria-hidden="true" tabindex="-1" href="#h3-部分卡片背景颜色"><span class="icon icon-link"></span></a>H3 部分(卡片)背景颜色</h3><div class="wrap-body"><!--rehype:wrap-style=background: #00c69357;-->
</div></div></div><div class="wrap" style="background: #00c69357;"><div class="wrap-header h3wrap"><h3 id="h3-部分卡片背景颜色"><a aria-hidden="true" tabindex="-1" href="#h3-部分卡片背景颜色"><span class="icon icon-link"></span></a>H3 部分(卡片)背景颜色</h3><div class="wrap-body">
<!--rehype:wrap-style=background: #00c69357;-->
<pre class="wrap-text "><code class="language-markdown code-highlight"><span class="code-line line-number" line="1"><span class="token title important"><span class="token punctuation">###</span> H3 部分(卡片)背景颜色</span>
</span><span class="code-line line-number" line="2"><span class="token comment">&#x3C;!--rehype:wrap-style=background: #00c69357;--></span>
</span></code></pre><!--rehype:className=wrap-text -->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 style="background:#e91e63;" id="红色标题"><a aria-hidden="true" tabindex="-1" href="#红色标题"><span class="icon icon-link"></span></a>红色标题</h3><div class="wrap-body"><!--rehype:style=background:#e91e63;-->
</span></code></pre>
<!--rehype:className=wrap-text -->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 style="background:#e91e63;" id="红色标题"><a aria-hidden="true" tabindex="-1" href="#红色标题"><span class="icon icon-link"></span></a>红色标题</h3><div class="wrap-body">
<!--rehype:style=background:#e91e63;-->
<pre class="language-markdown"><code class="language-markdown code-highlight"><span class="code-line line-number" line="1"><span class="token title important"><span class="token punctuation">###</span> 红色标题</span>
</span><span class="code-line line-number" line="2"><span class="token comment">&#x3C;!--rehype:style=background:#e91e63;--></span>
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="快捷键样式"><a aria-hidden="true" tabindex="-1" href="#快捷键样式"><span class="icon icon-link"></span></a>快捷键样式</h3><div class="wrap-body">
<table class="shortcuts"><thead><tr><th>Key</th><th>value</th></tr></thead><tbody><tr><td><code>快捷键</code></td><td>说明</td></tr><tr><td><code>快捷键</code></td><td>说明</td></tr></tbody></table>
<!--rehype:className=shortcuts-->
<p>列表添加 <code>&#x3C;!--rehype:className=shortcuts--></code> 样式类,展示快捷键样式。</p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="内置类样式"><a aria-hidden="true" tabindex="-1" href="#内置类样式"><span class="icon icon-link"></span></a>内置类样式</h3><div class="wrap-body">
<table class="shortcuts"><thead><tr><th align="left">:-</th><th>-</th></tr></thead><tbody><tr><td align="left"><code>shortcuts</code></td><td>快捷键样式</td></tr><tr><td align="left"><code>wrap-text</code></td><td>超出换行</td></tr><tr><td align="left"><code>show-header</code></td><td>展示表头</td></tr></tbody></table>
<!--rehype:className=shortcuts-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="颜色标签"><a aria-hidden="true" tabindex="-1" href="#颜色标签"><span class="icon icon-link"></span></a>颜色标签</h3><div class="wrap-body">
<table class="shortcuts"><thead><tr><th align="left">:-</th><th>-</th></tr></thead><tbody><tr><td align="left"><code>&#x3C;yel></code></td><td>黄色</td></tr><tr><td align="left"><code>&#x3C;pur></code></td><td>紫色</td></tr><tr><td align="left"><code>&#x3C;code></code><code>``</code></td><td>绿色</td></tr></tbody></table>
<!--rehype:className=shortcuts-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="布局"><a aria-hidden="true" tabindex="-1" href="#布局"><span class="icon icon-link"></span></a>布局</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="h2-部分"><a aria-hidden="true" tabindex="-1" href="#h2-部分"><span class="icon icon-link"></span></a>H2 部分</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div><div class="h2wrap-body"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="h2-部分"><a aria-hidden="true" tabindex="-1" href="#h2-部分"><span class="icon icon-link"></span></a>H2 部分</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<pre class="language-markdown"><code class="language-markdown code-highlight"><span class="code-line line-number" line="1"><span class="token title important">H2 部分
</span></span><span class="code-line line-number" line="2"><span class="token title important"><span class="token punctuation">---</span></span>
</span><span class="code-line line-number" line="3">
@@ -156,45 +235,48 @@
</span><span class="code-line line-number" line="6"><span class="token title important"><span class="token punctuation">###</span> 卡片 3 (H3 部分)</span>
</span></code></pre>
<p>使用注释配置为 H2 部分 添加 <code>col-span-2</code> 类,将 <del><code>3</code></del> 栏布局变成 <code>2</code> 栏布局。</p>
<table class="show-header ">
<thead>
<tr>
<th></th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>cols-1</code></td>
<td><code>1</code> 栏卡片布局</td>
</tr>
<tr>
<td><code>cols-2</code></td>
<td><code>2</code> 栏卡片布局</td>
</tr>
<tr>
<td><code>cols-3</code></td>
<td><code>3</code> 栏卡片布局</td>
</tr>
<tr>
<td><code>cols-4</code></td>
<td><code>4</code> 栏卡片布局</td>
</tr>
<tr>
<td><code>cols-5</code></td>
<td><code>5</code> 栏卡片布局</td>
</tr>
</tbody>
</table><!--rehype:className=show-header -->
<table class="show-header "><thead><tr><th></th><th>说明</th></tr></thead><tbody><tr><td><code>cols-1</code></td><td><code>1</code> 栏卡片布局</td></tr><tr><td><code>cols-2</code></td><td><code>2</code> 栏卡片布局</td></tr><tr><td><code>cols-3</code></td><td><code>3</code> 栏卡片布局</td></tr><tr><td><code>cols-4</code></td><td><code>4</code> 栏卡片布局</td></tr><tr><td><code>cols-5</code></td><td><code>5</code> 栏卡片布局</td></tr></tbody></table>
<!--rehype:className=show-header -->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="占位布局-style-写法"><a aria-hidden="true" tabindex="-1" href="#占位布局-style-写法"><span class="icon icon-link"></span></a>占位布局 style 写法</h3><div class="wrap-body">
<pre class="wrap-text "><code class="language-markdown code-highlight"><span class="code-line line-number" line="1"><span class="token title important"><span class="token punctuation">###</span> H3 部分</span>
</span><span class="code-line line-number" line="2"><span class="token comment">&#x3C;!--rehype:wrap-style=grid-row: span 2/span 2;--></span>
</span></code></pre><!--rehype:className=wrap-text -->
</span></code></pre>
<!--rehype:className=wrap-text -->
<p>放在 <code>### H3 部分</code> 下面的注释配置,与 <code>&#x3C;!--rehype:wrap-class=row-span-2--></code> 相同,设置 2 行占位布局。</p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="卡片栏布局-style-写法"><a aria-hidden="true" tabindex="-1" href="#卡片栏布局-style-写法"><span class="icon icon-link"></span></a>卡片栏布局 style 写法</h3><div class="wrap-body">
<pre class="wrap-text "><code class="language-markdown code-highlight"><span class="code-line line-number" line="1"><span class="token title important"><span class="token punctuation">##</span> H2 部分</span>
</span><span class="code-line line-number" line="2"><span class="token comment">&#x3C;!--rehype:body-style=grid-template-columns: repeat(2,minmax(0,1fr));--></span>
</span></code></pre><!--rehype:className=wrap-text -->
</span></code></pre>
<!--rehype:className=wrap-text -->
<p>放在 <code>## H2 部分</code> 下面的注释配置,与 <code>&#x3C;!--rehype:body-class=cols-2--></code> 相同,设置 2 栏布局。</p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="h3-部分"><a aria-hidden="true" tabindex="-1" href="#h3-部分"><span class="icon icon-link"></span></a>H3 部分</h3><div class="wrap-body">
<pre class="language-markdown"><code class="language-markdown code-highlight"><span class="code-line line-number" line="1"><span class="token title important"><span class="token punctuation">###</span> 卡片 1 (H3 部分)</span>
@@ -203,40 +285,41 @@
</span><span class="code-line line-number" line="4"><span class="token comment">&#x3C;!--rehype:wrap-class=col-span-3--></span>
</span><span class="code-line line-number" line="5"><span class="token title important"><span class="token punctuation">###</span> 卡片 3 (H3 部分)</span>
</span></code></pre>
<table class="show-header ">
<thead>
<tr>
<th></th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>col-span-2</code></td>
<td><code>2</code> 列占位</td>
</tr>
<tr>
<td><code>col-span-3</code></td>
<td><code>3</code> 列占位</td>
</tr>
<tr>
<td><code>col-span-4</code></td>
<td><code>4</code> 列占位</td>
</tr>
<tr>
<td><code>row-span-2</code></td>
<td><code>2</code> 行占位</td>
</tr>
<tr>
<td><code>row-span-3</code></td>
<td><code>3</code> 行占位</td>
</tr>
<tr>
<td><code>row-span-4</code></td>
<td><code>4</code> 行占位</td>
</tr>
</tbody>
</table><!--rehype:className=show-header -->
<table class="show-header "><thead><tr><th></th><th>说明</th></tr></thead><tbody><tr><td><code>col-span-2</code></td><td><code>2</code> 列占位</td></tr><tr><td><code>col-span-3</code></td><td><code>3</code> 列占位</td></tr><tr><td><code>col-span-4</code></td><td><code>4</code> 列占位</td></tr><tr><td><code>row-span-2</code></td><td><code>2</code> 行占位</td></tr><tr><td><code>row-span-3</code></td><td><code>3</code> 行占位</td></tr><tr><td><code>row-span-4</code></td><td><code>4</code> 行占位</td></tr></tbody></table>
<!--rehype:className=show-header -->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="卡片合并行布局-1"><a aria-hidden="true" tabindex="-1" href="#卡片合并行布局-1"><span class="icon icon-link"></span></a>卡片合并行布局 1</h3><div class="wrap-body">
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
</span><span class="code-line line-number" line="2">┆ H3 Title <span class="token number">1</span>
@@ -357,7 +440,8 @@
</span><span class="code-line line-number" line="6"><span class="token title important"><span class="token punctuation">###</span> Title 5</span>
</span></code></pre>
<p><code>Title 4</code> 标题添加 <code>col-span-2</code> 占位类</p>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="卡片列合并布局-8"><a aria-hidden="true" tabindex="-1" href="#卡片列合并布局-8"><span class="icon icon-link"></span></a>卡片列合并布局 8</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="卡片列合并布局-8"><a aria-hidden="true" tabindex="-1" href="#卡片列合并布局-8"><span class="icon icon-link"></span></a>卡片列合并布局 8</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">╭┈┈┈┈┈┈┈┈┈╮ ╭┈┈┈╮
</span><span class="code-line line-number" line="2"><span class="token number">1</span> ┆ ┆ <span class="token number">2</span>
</span><span class="code-line line-number" line="3">┆ ┆ ╰┈┈┈╯
@@ -381,146 +465,151 @@
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="表格"><a aria-hidden="true" tabindex="-1" href="#表格"><span class="icon icon-link"></span></a>表格</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="基本表格"><a aria-hidden="true" tabindex="-1" href="#基本表格"><span class="icon icon-link"></span></a>基本表格</h3><div class="wrap-body">
</div></div><div class="h3wrap-body"><div class="wrap"><div class="wrap-header h4wrap"><h4 id="date"><a aria-hidden="true" tabindex="-1" href="#date"><span class="icon icon-link"></span></a>Date</h4><div class="wrap-body">
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>%m/%d/%Y</code></td>
<td>06/05/2013</td>
</tr>
<tr>
<td><code>%A, %B %e, %Y</code></td>
<td>Sunday, June 5, 2013</td>
</tr>
<tr>
<td><code>%b %e %a</code></td>
<td>Jun 5 Sun</td>
</tr>
</tbody>
</table>
<table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><code>%m/%d/%Y</code></td><td>06/05/2013</td></tr><tr><td><code>%A, %B %e, %Y</code></td><td>Sunday, June 5, 2013</td></tr><tr><td><code>%b %e %a</code></td><td>Jun 5 Sun</td></tr></tbody></table>
</div></div></div><div class="wrap"><div class="wrap-header h4wrap"><h4 id="time"><a aria-hidden="true" tabindex="-1" href="#time"><span class="icon icon-link"></span></a>Time</h4><div class="wrap-body">
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>%H:%M</code></td>
<td>23:05</td>
</tr>
<tr>
<td><code>%I:%M %p</code></td>
<td>11:05 PM</td>
</tr>
</tbody>
</table>
<table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><code>%H:%M</code></td><td>23:05</td></tr><tr><td><code>%I:%M %p</code></td><td>11:05 PM</td></tr></tbody></table>
<p>标题为 <code>H4</code> 的基本表格。</p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="快捷键"><a aria-hidden="true" tabindex="-1" href="#快捷键"><span class="icon icon-link"></span></a>快捷键</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>V</code></td>
<td>Vector</td>
</tr>
<tr>
<td><code>P</code></td>
<td>Pencil</td>
</tr>
<tr>
<td><code>T</code></td>
<td>Text</td>
</tr>
<tr>
<td><code>L</code></td>
<td>Line</td>
</tr>
<tr>
<td><code>R</code></td>
<td>Rectangle</td>
</tr>
<tr>
<td><code>O</code></td>
<td>Oval</td>
</tr>
<tr>
<td><code>U</code></td>
<td>Rounded</td>
</tr>
</tbody>
</table>
<table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><code>V</code></td><td>Vector</td></tr><tr><td><code>P</code></td><td>Pencil</td></tr><tr><td><code>T</code></td><td>Text</td></tr><tr><td><code>L</code></td><td>Line</td></tr><tr><td><code>R</code></td><td>Rectangle</td></tr><tr><td><code>O</code></td><td>Oval</td></tr><tr><td><code>U</code></td><td>Rounded</td></tr></tbody></table>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="展示标题"><a aria-hidden="true" tabindex="-1" href="#展示标题"><span class="icon icon-link"></span></a>展示标题</h3><div class="wrap-body">
<table class="show-header">
<thead>
<tr>
<th>Prefix</th>
<th>Example</th>
<th>What</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>//</code></td>
<td><code>//hr[@class='edge']</code></td>
<td>Anywhere</td>
</tr>
<tr>
<td><code>./</code></td>
<td><code>./a</code></td>
<td>Relative</td>
</tr>
<tr>
<td><code>/</code></td>
<td><code>/html/body/div</code></td>
<td>Root</td>
</tr>
</tbody>
</table><!--rehype:className=show-header-->
<table class="show-header"><thead><tr><th>Prefix</th><th>Example</th><th>What</th></tr></thead><tbody><tr><td><code>//</code></td><td><code>//hr[@class='edge']</code></td><td>Anywhere</td></tr><tr><td><code>./</code></td><td><code>./a</code></td><td>Relative</td></tr><tr><td><code>/</code></td><td><code>/html/body/div</code></td><td>Root</td></tr></tbody></table>
<!--rehype:className=show-header-->
<p><code>&#x3C;!--rehype:className=show-header--></code></p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="列表"><a aria-hidden="true" tabindex="-1" href="#列表"><span class="icon icon-link"></span></a>列表</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="一栏默认"><a aria-hidden="true" tabindex="-1" href="#一栏默认"><span class="icon icon-link"></span></a>一栏(默认)</h3><div class="wrap-body">
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="四列"><a aria-hidden="true" tabindex="-1" href="#四列"><span class="icon icon-link"></span></a>四列</h3><div class="wrap-body">
<ul class="cols-4">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
<li>Item 6</li>
<li>Item 7</li>
<li>Item 8</li>
</ul><!--rehype:className=cols-4-->
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
<li>Item 6</li>
<li>Item 7</li>
<li>Item 8</li>
</ul>
<!--rehype:className=cols-4-->
<p><code>&#x3C;!--rehype:className=cols-4--></code></p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="没有标记"><a aria-hidden="true" tabindex="-1" href="#没有标记"><span class="icon icon-link"></span></a>没有标记</h3><div class="wrap-body">
<ul class="cols-3 style-none">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
<li>Item 6</li>
</ul><!--rehype:className=cols-3 style-none-->
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
<li>Item 6</li>
</ul>
<!--rehype:className=cols-3 style-none-->
<p><code>&#x3C;!--rehype:className=cols-3 style-none--></code></p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="h2-部分---5列效果展示"><a aria-hidden="true" tabindex="-1" href="#h2-部分---5列效果展示"><span class="icon icon-link"></span></a>H2 部分 - 5列效果展示</h2><div class="wrap-body"><!--rehype:body-class=cols-5-->
</div></div><div class="h2wrap-body cols-5"><div class="wrap" style="background:#dba300;"><div class="wrap-header h3wrap"><h3 id="one"><a aria-hidden="true" tabindex="-1" href="#one"><span class="icon icon-link"></span></a>One</h3><div class="wrap-body"><!--rehype:wrap-style=background:#dba300;-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="h2-部分---5列效果展示"><a aria-hidden="true" tabindex="-1" href="#h2-部分---5列效果展示"><span class="icon icon-link"></span></a>H2 部分 - 5列效果展示</h2><div class="wrap-body">
<!--rehype:body-class=cols-5-->
</div></div><div class="h2wrap-body cols-5"><div class="wrap" style="background:#dba300;"><div class="wrap-header h3wrap"><h3 id="one"><a aria-hidden="true" tabindex="-1" href="#one"><span class="icon icon-link"></span></a>One</h3><div class="wrap-body">
<!--rehype:wrap-style=background:#dba300;-->
<pre><code class="code-highlight"><span class="code-line line-number" line="1">...
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="two"><a aria-hidden="true" tabindex="-1" href="#two"><span class="icon icon-link"></span></a>Two</h3><div class="wrap-body">
@@ -536,46 +625,52 @@
<pre><code class="code-highlight"><span class="code-line line-number" line="1">...
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="h3-部分---占位效果展示"><a aria-hidden="true" tabindex="-1" href="#h3-部分---占位效果展示"><span class="icon icon-link"></span></a>H3 部分 - 占位效果展示</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="row-span-2"><a aria-hidden="true" tabindex="-1" href="#row-span-2"><span class="icon icon-link"></span></a>row-span-2</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div><div class="h2wrap-body"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="row-span-2"><a aria-hidden="true" tabindex="-1" href="#row-span-2"><span class="icon icon-link"></span></a>row-span-2</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<pre><code class="code-highlight"><span class="code-line line-number" line="1">...
</span></code></pre>
<p><code>&#x3C;!--rehype:wrap-class=row-span-2--></code></p>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="col-span-2"><a aria-hidden="true" tabindex="-1" href="#col-span-2"><span class="icon icon-link"></span></a>col-span-2</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="col-span-2"><a aria-hidden="true" tabindex="-1" href="#col-span-2"><span class="icon icon-link"></span></a>col-span-2</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre><code class="code-highlight"><span class="code-line line-number" line="1">...
</span></code></pre>
<p><code>&#x3C;!--rehype:wrap-class=col-span-2--></code></p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 style="background:#e91e63;" id="红色标题-1"><a aria-hidden="true" tabindex="-1" href="#红色标题-1"><span class="icon icon-link"></span></a>红色标题</h3><div class="wrap-body"><!--rehype:style=background:#e91e63;-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 style="background:#e91e63;" id="红色标题-1"><a aria-hidden="true" tabindex="-1" href="#红色标题-1"><span class="icon icon-link"></span></a>红色标题</h3><div class="wrap-body">
<!--rehype:style=background:#e91e63;-->
<pre><code class="code-highlight"><span class="code-line line-number" line="1">...
</span></code></pre>
<p><code>&#x3C;!--rehype:style=background:#e91e63;--></code></p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 style="background:#d7a100;" id="黄色标题"><a aria-hidden="true" tabindex="-1" href="#黄色标题"><span class="icon icon-link"></span></a>黄色标题</h3><div class="wrap-body"><!--rehype:style=background:#d7a100;-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 style="background:#d7a100;" id="黄色标题"><a aria-hidden="true" tabindex="-1" href="#黄色标题"><span class="icon icon-link"></span></a>黄色标题</h3><div class="wrap-body">
<!--rehype:style=background:#d7a100;-->
<pre><code class="code-highlight"><span class="code-line line-number" line="1">...
</span></code></pre>
<p><code>&#x3C;!--rehype:style=background:#d7a100;--></code></p>
</div></div></div><div class="wrap col-span-3"><div class="wrap-header h3wrap"><h3 id="col-span-3"><a aria-hidden="true" tabindex="-1" href="#col-span-3"><span class="icon icon-link"></span></a>col-span-3</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-3-->
</div></div></div><div class="wrap col-span-3"><div class="wrap-header h3wrap"><h3 id="col-span-3"><a aria-hidden="true" tabindex="-1" href="#col-span-3"><span class="icon icon-link"></span></a>col-span-3</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-3-->
<pre><code class="code-highlight"><span class="code-line line-number" line="1">...
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="卡片子项"><a aria-hidden="true" tabindex="-1" href="#卡片子项"><span class="icon icon-link"></span></a>卡片子项</h3><div class="wrap-body">
<p>每个部分可以有以下子项:</p>
</div></div><div class="h3wrap-body"><div class="wrap"><div class="wrap-header h4wrap"><h4 id="h4-子标题"><a aria-hidden="true" tabindex="-1" href="#h4-子标题"><span class="icon icon-link"></span></a>H4 子标题</h4><div class="wrap-body">
<ul>
<li>pre</li>
<li>table</li>
<li>ul</li>
<li>pre</li>
<li>table</li>
<li>ul</li>
</ul>
</div></div></div><div class="wrap"><div class="wrap-header h4wrap"><h4 id="h4-子标题-1"><a aria-hidden="true" tabindex="-1" href="#h4-子标题-1"><span class="icon icon-link"></span></a>H4 子标题</h4><div class="wrap-body">
<ul>
<li>pre</li>
<li>table</li>
<li>ul</li>
<li>pre</li>
<li>table</li>
<li>ul</li>
</ul>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="h3-部分-1"><a aria-hidden="true" tabindex="-1" href="#h3-部分-1"><span class="icon icon-link"></span></a>H3 部分</h3><div class="wrap-body">
<p>每个盒子(卡片)都是一个 <code>H3</code> 部分。 盒子将包含 <code>H3</code> 自身内的所有东西。</p>
<p>这是一个包含段落的基本部分。</p>
</div></div></div><div class="wrap" style="background: #1b5064;"><div class="wrap-header h3wrap"><h3 id="h3-部分背景颜色"><a aria-hidden="true" tabindex="-1" href="#h3-部分背景颜色"><span class="icon icon-link"></span></a>H3 部分背景颜色</h3><div class="wrap-body"><!--rehype:wrap-style=background: #1b5064;-->
</div></div></div><div class="wrap" style="background: #1b5064;"><div class="wrap-header h3wrap"><h3 id="h3-部分背景颜色"><a aria-hidden="true" tabindex="-1" href="#h3-部分背景颜色"><span class="icon icon-link"></span></a>H3 部分背景颜色</h3><div class="wrap-body">
<!--rehype:wrap-style=background: #1b5064;-->
<pre class="wrap-text "><code class="language-markdown code-highlight"><span class="code-line line-number" line="1">注释配置:
</span><span class="code-line line-number" line="2"><span class="token code-snippet code keyword">`&#x3C;!--rehype:wrap-style=background: #1b5064;-->`</span>
</span></code></pre><!--rehype:className=wrap-text -->
</span></code></pre>
<!--rehype:className=wrap-text -->
</div></div></div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

1729
docs/regex.html Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -45,43 +45,45 @@
</span></code></pre>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token builtin class-name">echo</span> <span class="token string">'123abc'</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'s/[0-9]+//g'</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="选项示例"><a aria-hidden="true" tabindex="-1" href="#选项示例"><span class="icon icon-link"></span></a>选项示例</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
<table class="show-header">
<thead>
<tr>
<th>参数</th>
<th>示例</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>-i</code></td>
<td>sed -ibak 's/On/Off/' php.ini</td>
<td>直接备份和修改输入文件</td>
</tr>
<tr>
<td><code>-E</code></td>
<td>sed -E 's/[0-9]+//g' input-file</td>
<td>使用扩展正则表达式</td>
</tr>
<tr>
<td><code>-n</code></td>
<td>sed -n '3 p' config.conf</td>
<td>禁止默认图案空间打印</td>
</tr>
<tr>
<td><code>-f</code></td>
<td>sed -f script.sed config.conf</td>
<td>执行 sed 脚本文件</td>
</tr>
<tr>
<td><code>-e</code></td>
<td>sed -e 'command1' -e 'command2' input-file</td>
<td>执行多个 sed 命令</td>
</tr>
</tbody>
</table><!--rehype:className=show-header-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="选项示例"><a aria-hidden="true" tabindex="-1" href="#选项示例"><span class="icon icon-link"></span></a>选项示例</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<table class="show-header"><thead><tr><th>参数</th><th>示例</th><th>描述</th></tr></thead><tbody><tr><td><code>-i</code></td><td>sed -ibak 's/On/Off/' php.ini</td><td>直接备份和修改输入文件</td></tr><tr><td><code>-E</code></td><td>sed -E 's/[0-9]+//g' input-file</td><td>使用扩展正则表达式</td></tr><tr><td><code>-n</code></td><td>sed -n '3 p' config.conf</td><td>禁止默认图案空间打印</td></tr><tr><td><code>-f</code></td><td>sed -f script.sed config.conf</td><td>执行 sed 脚本文件</td></tr><tr><td><code>-e</code></td><td>sed -e 'command1' -e 'command2' input-file</td><td>执行多个 sed 命令</td></tr></tbody></table>
<!--rehype:className=show-header-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="多个命令"><a aria-hidden="true" tabindex="-1" href="#多个命令"><span class="icon icon-link"></span></a>多个命令</h3><div class="wrap-body">
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token builtin class-name">echo</span> <span class="token string">"hello world"</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token parameter variable">-e</span> <span class="token string">'s/h/H/g'</span> <span class="token parameter variable">-e</span> <span class="token string">'s/w/W/g'</span>
</span><span class="code-line line-number" line="2">Hello World
@@ -101,181 +103,184 @@
</span><span class="code-line line-number" line="4">$ <span class="token function">sed</span> <span class="token string">'s/old/new/g'</span> <span class="token parameter variable">-i.backup</span> file.txt
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="sed-命令"><a aria-hidden="true" tabindex="-1" href="#sed-命令"><span class="icon icon-link"></span></a>Sed 命令</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="命令"><a aria-hidden="true" tabindex="-1" href="#命令"><span class="icon icon-link"></span></a>命令</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
<table class="show-header">
<thead>
<tr>
<th>Command</th>
<th>Example</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>p</code></td>
<td>sed -n '1,4 p' input.txt</td>
<td>Print lines 1-4</td>
</tr>
<tr>
<td><code>p</code></td>
<td>sed -n -e '1,4 p' -e '6,7 p' input.txt</td>
<td>Print lines 1-4 and 6-7</td>
</tr>
<tr>
<td><code>d</code></td>
<td>sed '1,4 d' input.txt</td>
<td>Print lines except 1-4</td>
</tr>
<tr>
<td><code>w</code></td>
<td>sed -n '1,4 w output.txt' input.txt</td>
<td>Write pattern space to file</td>
</tr>
<tr>
<td><code>a</code></td>
<td>sed '2 a new-line' input.txt</td>
<td>Append line after</td>
</tr>
<tr>
<td><code>i</code></td>
<td>sed '2 i new-line' input.txt</td>
<td>Insert line before</td>
</tr>
</tbody>
</table><!--rehype:className=show-header-->
</div></div><div class="h2wrap-body"><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="命令"><a aria-hidden="true" tabindex="-1" href="#命令"><span class="icon icon-link"></span></a>命令</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<table class="show-header"><thead><tr><th>Command</th><th>Example</th><th>Description</th></tr></thead><tbody><tr><td><code>p</code></td><td>sed -n '1,4 p' input.txt</td><td>Print lines 1-4</td></tr><tr><td><code>p</code></td><td>sed -n -e '1,4 p' -e '6,7 p' input.txt</td><td>Print lines 1-4 and 6-7</td></tr><tr><td><code>d</code></td><td>sed '1,4 d' input.txt</td><td>Print lines except 1-4</td></tr><tr><td><code>w</code></td><td>sed -n '1,4 w output.txt' input.txt</td><td>Write pattern space to file</td></tr><tr><td><code>a</code></td><td>sed '2 a new-line' input.txt</td><td>Append line after</td></tr><tr><td><code>i</code></td><td>sed '2 i new-line' input.txt</td><td>Insert line before</td></tr></tbody></table>
<!--rehype:className=show-header-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="空间命令"><a aria-hidden="true" tabindex="-1" href="#空间命令"><span class="icon icon-link"></span></a>空间命令</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>Command</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>n</code></td>
<td>打印模式空间,空模式空间,读取下一行</td>
</tr>
<tr>
<td><code>x</code></td>
<td>用保持空间交换模式空间</td>
</tr>
<tr>
<td><code>h</code></td>
<td>复制模式空间以保持空间</td>
</tr>
<tr>
<td><code>H</code></td>
<td>追加模式空间以保持空间</td>
</tr>
<tr>
<td><code>g</code></td>
<td>将保持空间复制到模式空间</td>
</tr>
<tr>
<td><code>G</code></td>
<td>将保持空间附加到模式空间</td>
</tr>
</tbody>
</table>
<table><thead><tr><th>Command</th><th>Description</th></tr></thead><tbody><tr><td><code>n</code></td><td>打印模式空间,空模式空间,读取下一行</td></tr><tr><td><code>x</code></td><td>用保持空间交换模式空间</td></tr><tr><td><code>h</code></td><td>复制模式空间以保持空间</td></tr><tr><td><code>H</code></td><td>追加模式空间以保持空间</td></tr><tr><td><code>g</code></td><td>将保持空间复制到模式空间</td></tr><tr><td><code>G</code></td><td>将保持空间附加到模式空间</td></tr></tbody></table>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="flags"><a aria-hidden="true" tabindex="-1" href="#flags"><span class="icon icon-link"></span></a>Flags</h3><div class="wrap-body">
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">sed</span> <span class="token string">'s/old/new/[flags]'</span> <span class="token punctuation">[</span>input-file<span class="token punctuation">]</span>
</span></code></pre>
<hr>
<table>
<thead>
<tr>
<th>Flag</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>g</code></td>
<td>全球替代</td>
</tr>
<tr>
<td><code>1,2...</code></td>
<td>替换第 n 次出现</td>
</tr>
<tr>
<td><code>p</code></td>
<td>仅打印替换的行</td>
</tr>
<tr>
<td><code>w</code></td>
<td>仅将替换的行写入文件</td>
</tr>
<tr>
<td><code>I</code></td>
<td>搜索时忽略大小写</td>
</tr>
<tr>
<td><code>e</code></td>
<td>在命令行中替换并执行</td>
</tr>
</tbody>
</table>
<table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td><code>g</code></td><td>全球替代</td></tr><tr><td><code>1,2...</code></td><td>替换第 n 次出现</td></tr><tr><td><code>p</code></td><td>仅打印替换的行</td></tr><tr><td><code>w</code></td><td>仅将替换的行写入文件</td></tr><tr><td><code>I</code></td><td>搜索时忽略大小写</td></tr><tr><td><code>e</code></td><td>在命令行中替换并执行</td></tr></tbody></table>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="循环命令"><a aria-hidden="true" tabindex="-1" href="#循环命令"><span class="icon icon-link"></span></a>循环命令</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>Command</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>b label</code></td>
<td>分支到标签(用于循环)</td>
</tr>
<tr>
<td><code>t label</code></td>
<td>仅在成功替换时分支到标签(用于循环)</td>
</tr>
<tr>
<td><code>:label</code></td>
<td>b 和 t 命令的标签(用于循环)</td>
</tr>
<tr>
<td><code>N</code></td>
<td>将下一行追加到模式空间</td>
</tr>
<tr>
<td><code>P</code></td>
<td>多行打印第一行</td>
</tr>
<tr>
<td><code>D</code></td>
<td>删除多行中的第一行</td>
</tr>
</tbody>
</table>
<table><thead><tr><th>Command</th><th>Description</th></tr></thead><tbody><tr><td><code>b label</code></td><td>分支到标签(用于循环)</td></tr><tr><td><code>t label</code></td><td>仅在成功替换时分支到标签(用于循环)</td></tr><tr><td><code>:label</code></td><td>b 和 t 命令的标签(用于循环)</td></tr><tr><td><code>N</code></td><td>将下一行追加到模式空间</td></tr><tr><td><code>P</code></td><td>多行打印第一行</td></tr><tr><td><code>D</code></td><td>删除多行中的第一行</td></tr></tbody></table>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="杂项标志"><a aria-hidden="true" tabindex="-1" href="#杂项标志"><span class="icon icon-link"></span></a>杂项标志</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>Flag</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>/ | ^ @ ! #</code></td>
<td>替换分隔符可以是任何字符</td>
</tr>
<tr>
<td><code>&#x26;</code></td>
<td>获取匹配的模式</td>
</tr>
<tr>
<td><code>( ) \1 \2 \3</code></td>
<td>使用 <code>(</code><code>)</code> 进行分组。<br>使用 <code>\1</code><code>\2</code> 替换来引用组</td>
</tr>
</tbody>
</table>
<table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td><code>/ | ^ @ ! #</code></td><td>替换分隔符可以是任何字符</td></tr><tr><td><code>&#x26;</code></td><td>获取匹配的模式</td></tr><tr><td><code>( ) \1 \2 \3</code></td><td>使用 <code>(</code><code>)</code> 进行分组。<br>使用 <code>\1</code><code>\2</code> 替换来引用组</td></tr></tbody></table>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="sed-示例"><a aria-hidden="true" tabindex="-1" href="#sed-示例"><span class="icon icon-link"></span></a>Sed 示例</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="替换文本"><a aria-hidden="true" tabindex="-1" href="#替换文本"><span class="icon icon-link"></span></a>替换文本</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div><div class="h2wrap-body"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="替换文本"><a aria-hidden="true" tabindex="-1" href="#替换文本"><span class="icon icon-link"></span></a>替换文本</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<p>替换所有出现的字符串</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">sed</span> <span class="token string">'s/old/new/g'</span> file.txt
</span></code></pre>
@@ -317,7 +322,8 @@
<p>从第 3 行开始,每 3 行后追加一行</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">sed</span> <span class="token string">'3~3a Some text'</span> file.txt
</span></code></pre>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="编号"><a aria-hidden="true" tabindex="-1" href="#编号"><span class="icon icon-link"></span></a>编号</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="编号"><a aria-hidden="true" tabindex="-1" href="#编号"><span class="icon icon-link"></span></a>编号</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<p>文件的数字行(简单的左对齐)</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line line-number" line="1">$ <span class="token function">sed</span> <span class="token operator">=</span> file.txt <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'N;s/\n/\t/'</span>
</span></code></pre>
@@ -380,8 +386,7 @@
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="另见"><a aria-hidden="true" tabindex="-1" href="#另见"><span class="icon icon-link"></span></a>另见</h2><div class="wrap-body">
<ul>
<li><a href="https://gist.github.com/ssstonebraker/6140154">sed 备忘单</a> <em>(gist.github.com)</em></li>
<li><a href="https://gist.github.com/ssstonebraker/6140154">sed 备忘单</a> <em>(gist.github.com)</em></li>
</ul>
</div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

View File

@@ -40,32 +40,32 @@
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="介绍"><a aria-hidden="true" tabindex="-1" href="#介绍"><span class="icon icon-link"></span></a>介绍</h3><div class="wrap-body">
<p><a href="http://semver.org/">Semver</a> 是一种语义版本控制规范。</p>
<ul>
<li><a href="http://semver.org/">语义版本控制规范文档</a> <em>(semver.org)</em></li>
<li><a href="https://docs.npmjs.com/cli/v6/using-npm/semver">npm 的语义版本器</a> <em>(npmjs.com)</em></li>
<li><a href="http://semver.org/">语义版本控制规范文档</a> <em>(semver.org)</em></li>
<li><a href="https://docs.npmjs.com/cli/v6/using-npm/semver">npm 的语义版本器</a> <em>(npmjs.com)</em></li>
</ul>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="semver"><a aria-hidden="true" tabindex="-1" href="#semver"><span class="icon icon-link"></span></a>Semver</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>-</th>
<th>-</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>主版本号(MAJOR)</code></td>
<td>当你做了不兼容的 API 修改</td>
</tr>
<tr>
<td><code>次版本号(MINOR)</code></td>
<td>当你做了向下兼容的功能性新增</td>
</tr>
<tr>
<td><code>修订号(PATCH)</code></td>
<td>当你做了向下兼容的问题修正</td>
</tr>
</tbody>
</table>
<table><thead><tr><th>-</th><th>-</th></tr></thead><tbody><tr><td><code>主版本号(MAJOR)</code></td><td>当你做了不兼容的 API 修改</td></tr><tr><td><code>次版本号(MINOR)</code></td><td>当你做了向下兼容的功能性新增</td></tr><tr><td><code>修订号(PATCH)</code></td><td>当你做了向下兼容的问题修正</td></tr></tbody></table>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="简单范围"><a aria-hidden="true" tabindex="-1" href="#简单范围"><span class="icon icon-link"></span></a>简单范围</h3><div class="wrap-body">
<pre><code class="code-highlight"><span class="code-line line-number" line="1"> 1.2.3
</span><span class="code-line line-number" line="2"> =1.2.3
@@ -74,188 +74,195 @@
</span><span class="code-line line-number" line="5">>=1.2.3
</span></code></pre>
<p>请注意,后缀版本(<code>1.2.3-rc1</code>)不匹配。</p>
</div></div></div><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="范围"><a aria-hidden="true" tabindex="-1" href="#范围"><span class="icon icon-link"></span></a>范围</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-3-->
<table>
<thead>
<tr>
<th>范围</th>
<th>描述</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>~1.2.3</code></td>
<td><code>>=1.2.3 &#x3C;1.3.0</code></td>
<td></td>
</tr>
<tr>
<td><code>^1.2.3</code></td>
<td><code>>=1.2.3 &#x3C;2.0.0</code></td>
<td></td>
</tr>
<tr>
<td><code>^0.2.3</code></td>
<td><code>>=0.2.3 &#x3C;0.3.0</code></td>
<td>(0.x.x 是特殊的)</td>
</tr>
<tr>
<td><code>^0.0.1</code></td>
<td><code>=0.0.1</code></td>
<td>(0.0.x 是特殊的)</td>
</tr>
<tr>
<td><code>^1.2</code></td>
<td><code>>=1.2.0 &#x3C;2.0.0</code></td>
<td>(像 ^1.2.0)</td>
</tr>
<tr>
<td><code>~1.2</code></td>
<td><code>>=1.2.0 &#x3C;1.3.0</code></td>
<td>(像 ~1.2.0)</td>
</tr>
<tr>
<td><code>^1</code></td>
<td><code>>=1.0.0 &#x3C;2.0.0</code></td>
<td></td>
</tr>
<tr>
<td><code>~1</code></td>
<td>相同的</td>
<td></td>
</tr>
<tr>
<td><code>1.x</code></td>
<td>相同的</td>
<td></td>
</tr>
<tr>
<td><code>1.*</code></td>
<td>相同的</td>
<td></td>
</tr>
<tr>
<td><code>1</code></td>
<td>相同的</td>
<td></td>
</tr>
<tr>
<td><code>*</code></td>
<td>任何版本</td>
<td></td>
</tr>
<tr>
<td><code>x</code></td>
<td>相同的</td>
<td></td>
</tr>
</tbody>
</table>
</div></div></div><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="连字符范围"><a aria-hidden="true" tabindex="-1" href="#连字符范围"><span class="icon icon-link"></span></a>连字符范围</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-3-->
<table class="show-header ">
<thead>
<tr>
<th>范围</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>1.2.3 - 2.3.4</code></td>
<td><code>>=1.2.3 &#x3C;=2.3.4</code></td>
</tr>
</tbody>
</table><!--rehype:className=show-header -->
</div></div></div><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="范围"><a aria-hidden="true" tabindex="-1" href="#范围"><span class="icon icon-link"></span></a>范围</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-3-->
<table class="shortcuts"><thead><tr><th>范围</th><th>描述</th><th>Notes</th></tr></thead><tbody><tr><td><code>~1.2.3</code></td><td><code>>=1.2.3 &#x3C;1.3.0</code></td><td></td></tr><tr><td><code>^1.2.3</code></td><td><code>>=1.2.3 &#x3C;2.0.0</code></td><td></td></tr><tr><td><code>^0.2.3</code></td><td><code>>=0.2.3 &#x3C;0.3.0</code></td><td>(0.x.x 是特殊的)</td></tr><tr><td><code>^0.0.1</code></td><td><code>=0.0.1</code></td><td>(0.0.x 是特殊的)</td></tr><tr><td><code>^1.2</code></td><td><code>>=1.2.0 &#x3C;2.0.0</code></td><td>(像 ^1.2.0)</td></tr><tr><td><code>~1.2</code></td><td><code>>=1.2.0 &#x3C;1.3.0</code></td><td>(像 ~1.2.0)</td></tr><tr><td><code>^1</code></td><td><code>>=1.0.0 &#x3C;2.0.0</code></td><td></td></tr><tr><td><code>~1</code></td><td>相同的</td><td></td></tr><tr><td><code>1.x</code></td><td>相同的</td><td></td></tr><tr><td><code>1.*</code></td><td>相同的</td><td></td></tr><tr><td><code>1</code></td><td>相同的</td><td></td></tr><tr><td><code>*</code></td><td>任何版本</td><td></td></tr><tr><td><code>x</code></td><td>相同的</td><td></td></tr></tbody></table>
<!--rehype:className=shortcuts-->
</div></div></div><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="连字符范围"><a aria-hidden="true" tabindex="-1" href="#连字符范围"><span class="icon icon-link"></span></a>连字符范围</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-3-->
<table class="shortcuts show-header"><thead><tr><th>范围</th><th>描述</th></tr></thead><tbody><tr><td><code>1.2.3 - 2.3.4</code></td><td><code>>=1.2.3 &#x3C;=2.3.4</code></td></tr></tbody></table>
<!--rehype:className=shortcuts show-header-->
</div></div><div class="h3wrap-body"><div class="wrap"><div class="wrap-header h4wrap"><h4 id="部分向右"><a aria-hidden="true" tabindex="-1" href="#部分向右"><span class="icon icon-link"></span></a>部分向右</h4><div class="wrap-body">
<table>
<thead>
<tr>
<th>范围</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>1.2.3 - 2.3</code></td>
<td><code>>=1.2.3 &#x3C;2.4.0</code></td>
</tr>
<tr>
<td><code>1.2.3 - 2</code></td>
<td><code>>=1.2.3 &#x3C;3.0.0</code></td>
</tr>
</tbody>
</table>
<table class="shortcuts"><thead><tr><th>范围</th><th>描述</th></tr></thead><tbody><tr><td><code>1.2.3 - 2.3</code></td><td><code>>=1.2.3 &#x3C;2.4.0</code></td></tr><tr><td><code>1.2.3 - 2</code></td><td><code>>=1.2.3 &#x3C;3.0.0</code></td></tr></tbody></table>
<!--rehype:className=shortcuts-->
</div></div></div><div class="wrap"><div class="wrap-header h4wrap"><h4 id="部分向左"><a aria-hidden="true" tabindex="-1" href="#部分向左"><span class="icon icon-link"></span></a>部分向左</h4><div class="wrap-body">
<table>
<thead>
<tr>
<th>范围</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>1.2 - 2.3.0</code></td>
<td><code>1.2.0 - 2.3.0</code></td>
</tr>
</tbody>
</table>
<table class="shortcuts"><thead><tr><th>范围</th><th>描述</th></tr></thead><tbody><tr><td><code>1.2 - 2.3.0</code></td><td><code>1.2.0 - 2.3.0</code></td></tr></tbody></table>
<!--rehype:className=shortcuts-->
<p>当右侧为部分(例如,<code>2.3</code>)时,假定缺失的部分为<code>x</code>(例如,<code> 2.3.x</code>)。</p>
<p>如果左边是部分的(例如,<code>1.2</code>),则假定缺少的部分为<code>0</code>(例如,<code> 1.2.0</code>)。</p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="组合范围"><a aria-hidden="true" tabindex="-1" href="#组合范围"><span class="icon icon-link"></span></a>组合范围</h3><div class="wrap-body">
<table class="show-header ">
<thead>
<tr>
<th>范围</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>>=0.14 &#x3C;16</code></td>
<td>和 (空格分隔)</td>
</tr>
<tr>
<td><code>0.14.x || 15.x.x</code></td>
<td>或 (双竖线分隔)</td>
</tr>
</tbody>
</table><!--rehype:className=show-header -->
<table class="shortcuts show-header"><thead><tr><th>范围</th><th>描述</th></tr></thead><tbody><tr><td><code>>=0.14 &#x3C;16</code></td><td>和 (空格分隔)</td></tr><tr><td><code>0.14.x || 15.x.x</code></td><td>或 (双竖线分隔)</td></tr></tbody></table>
<!--rehype:className=shortcuts show-header-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="预发布"><a aria-hidden="true" tabindex="-1" href="#预发布"><span class="icon icon-link"></span></a>预发布</h3><div class="wrap-body">
<pre><code class="code-highlight"><span class="code-line line-number" line="1">1.2.3-prerelease+build
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="解释"><a aria-hidden="true" tabindex="-1" href="#解释"><span class="icon icon-link"></span></a>解释</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>范围</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>^</code></td>
<td>意思是“兼容”</td>
</tr>
<tr>
<td><code>~</code></td>
<td>意思是“相当接近”</td>
</tr>
<tr>
<td><code>0.x.x</code></td>
<td>用于“初始开发”</td>
</tr>
<tr>
<td><code>1.x.x</code></td>
<td>表示定义了公共 API</td>
</tr>
</tbody>
</table>
<table class="shortcuts"><thead><tr><th>范围</th><th>描述</th></tr></thead><tbody><tr><td><code>^</code></td><td>意思是“兼容”</td></tr><tr><td><code>~</code></td><td>意思是“相当接近”</td></tr><tr><td><code>0.x.x</code></td><td>用于“初始开发”</td></tr><tr><td><code>1.x.x</code></td><td>表示定义了公共 API</td></tr></tbody></table>
<!--rehype:className=shortcuts-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="另见"><a aria-hidden="true" tabindex="-1" href="#另见"><span class="icon icon-link"></span></a>另见</h2><div class="wrap-body">
<ul>
<li><a href="https://regex101.com/r/vkijKf/1/">语义化版本号验证正则表达式,支持按编号提取的语言</a></li>
<li><a href="https://regex101.com/r/Ly7O1x/3/">语义化版本号验证正则表达式,支持按组名称提取的语言</a></li>
<li><a href="https://regex101.com/r/vkijKf/1/">语义化版本号验证正则表达式,支持按编号提取的语言</a></li>
<li><a href="https://regex101.com/r/Ly7O1x/3/">语义化版本号验证正则表达式,支持按组名称提取的语言</a></li>
</ul>
</div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

View File

@@ -38,402 +38,410 @@
<p>这个 Sketch 快速参考备忘单显示了它的键盘快捷键和命令。</p>
</div></header><div class="h1wrap-body"><div class="wrap"><div class="wrap-header h2wrap"><h2 id="快捷键"><a aria-hidden="true" tabindex="-1" href="#快捷键"><span class="icon icon-link"></span></a>快捷键</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="插入"><a aria-hidden="true" tabindex="-1" href="#插入"><span class="icon icon-link"></span></a>插入</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>快捷键</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>a</code></td>
<td>(New Artboard) 新画板</td>
</tr>
<tr>
<td><code>s</code></td>
<td>(Slice) 切片</td>
</tr>
<tr>
<td><code>r</code></td>
<td>(Rectangle) 长方形</td>
</tr>
<tr>
<td><code>d</code></td>
<td>(Rounde) 圆形</td>
</tr>
<tr>
<td><code>u</code></td>
<td>(Rectangle) 长方形</td>
</tr>
<tr>
<td><code>o</code></td>
<td>(Oval) 椭圆形</td>
</tr>
<tr>
<td><code>l</code></td>
<td>(Line) 线</td>
</tr>
<tr>
<td><code>v</code></td>
<td>(Vector Point) 向量点</td>
</tr>
<tr>
<td><code>p</code></td>
<td>(Pencil) 铅笔</td>
</tr>
<tr>
<td><code>t</code></td>
<td>(Text) 文本</td>
</tr>
</tbody>
</table>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="类型"><a aria-hidden="true" tabindex="-1" href="#类型"><span class="icon icon-link"></span></a>类型</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
<table>
<thead>
<tr>
<th>快捷键</th>
<th>类型</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Cmd + B</code></td>
<td>加粗</td>
</tr>
<tr>
<td><code>Cmd + I</code></td>
<td>斜体</td>
</tr>
<tr>
<td><code>Cmd + U</code></td>
<td>下划线</td>
</tr>
<tr>
<td><code>Alt + Cmd (+) +</code></td>
<td>增加字体大小</td>
</tr>
<tr>
<td><code>Alt + Cmd (+) </code></td>
<td>减小字体大小</td>
</tr>
<tr>
<td><code>Alt + Control + L</code></td>
<td>增加字符间距</td>
</tr>
<tr>
<td><code>Alt + Control + T</code></td>
<td>减少字符间距</td>
</tr>
<tr>
<td><code>Cmd + T</code></td>
<td>更改字体</td>
</tr>
<tr>
<td><code>Shift + Cmd + O</code></td>
<td>将文本转换为轮廓</td>
</tr>
<tr>
<td><code>Cmd + Shift + {</code></td>
<td>左对齐</td>
</tr>
<tr>
<td><code>Cmd + Shift + \</code></td>
<td>居中对齐</td>
</tr>
<tr>
<td><code>Cmd + Shift + }</code></td>
<td>右对齐</td>
</tr>
<tr>
<td><code>Control + Cmd + Space</code></td>
<td>特殊字符</td>
</tr>
</tbody>
</table>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="画布视图"><a aria-hidden="true" tabindex="-1" href="#画布视图"><span class="icon icon-link"></span></a>画布视图</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
<table>
<thead>
<tr>
<th>画布视图</th>
<th>快捷键</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Cmd (+) +</code></td>
<td>放大</td>
</tr>
<tr>
<td><code>Cmd (+) -</code></td>
<td>缩小</td>
</tr>
<tr>
<td><code>Cmd + 0</code></td>
<td>实际尺寸</td>
</tr>
<tr>
<td><code>Cmd + 1</code></td>
<td>中心帆布</td>
</tr>
<tr>
<td><code>Cmd + 2</code></td>
<td>缩放选择</td>
</tr>
<tr>
<td><code>Cmd + 3</code></td>
<td>中心选择</td>
</tr>
<tr>
<td><code>§</code></td>
<td>临时缩放到实际大小</td>
</tr>
<tr>
<td><code>Alt + Tab</code></td>
<td>关注第一个输入字段</td>
</tr>
<tr>
<td><code>Control + R</code></td>
<td>切换标尺</td>
</tr>
<tr>
<td><code>Control + G</code></td>
<td>切换网格</td>
</tr>
<tr>
<td><code>Control + L</code></td>
<td>切换图层指南</td>
</tr>
<tr>
<td><code>Control + P</code></td>
<td>切换像素</td>
</tr>
<tr>
<td><code>Control + H</code></td>
<td>切换选择手柄</td>
</tr>
<tr>
<td><code>Control + X</code></td>
<td>切换像素网格</td>
</tr>
<tr>
<td><code>Space + Drag</code></td>
<td>移动画布</td>
</tr>
</tbody>
</table>
<table class="shortcuts"><thead><tr><th>快捷键</th><th>描述</th></tr></thead><tbody><tr><td><code>a</code></td><td>(New Artboard) 新画板</td></tr><tr><td><code>s</code></td><td>(Slice) 切片</td></tr><tr><td><code>r</code></td><td>(Rectangle) 长方形</td></tr><tr><td><code>d</code></td><td>(Rounde) 圆形</td></tr><tr><td><code>u</code></td><td>(Rectangle) 长方形</td></tr><tr><td><code>o</code></td><td>(Oval) 椭圆形</td></tr><tr><td><code>l</code></td><td>(Line) 线</td></tr><tr><td><code>v</code></td><td>(Vector Point) 向量点</td></tr><tr><td><code>p</code></td><td>(Pencil) 铅笔</td></tr><tr><td><code>t</code></td><td>(Text) 文本</td></tr></tbody></table>
<!--rehype:className=shortcuts-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="类型"><a aria-hidden="true" tabindex="-1" href="#类型"><span class="icon icon-link"></span></a>类型</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<table class="shortcuts"><thead><tr><th>快捷键</th><th>类型</th></tr></thead><tbody><tr><td><code>Cmd + B</code></td><td>加粗</td></tr><tr><td><code>Cmd + I</code></td><td>斜体</td></tr><tr><td><code>Cmd + U</code></td><td>下划线</td></tr><tr><td><code>Alt + Cmd (+) +</code></td><td>增加字体大小</td></tr><tr><td><code>Alt + Cmd (+) </code></td><td>减小字体大小</td></tr><tr><td><code>Alt + Control + L</code></td><td>增加字符间距</td></tr><tr><td><code>Alt + Control + T</code></td><td>减少字符间距</td></tr><tr><td><code>Cmd + T</code></td><td>更改字体</td></tr><tr><td><code>Shift + Cmd + O</code></td><td>将文本转换为轮廓</td></tr><tr><td><code>Cmd + Shift + {</code></td><td>左对齐</td></tr><tr><td><code>Cmd + Shift + \</code></td><td>居中对齐</td></tr><tr><td><code>Cmd + Shift + }</code></td><td>右对齐</td></tr><tr><td><code>Control + Cmd + Space</code></td><td>特殊字符</td></tr></tbody></table>
<!--rehype:className=shortcuts-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="画布视图"><a aria-hidden="true" tabindex="-1" href="#画布视图"><span class="icon icon-link"></span></a>画布视图</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<table class="shortcuts"><thead><tr><th>画布视图</th><th>快捷键</th></tr></thead><tbody><tr><td><code>Cmd (+) +</code></td><td>放大</td></tr><tr><td><code>Cmd (+) -</code></td><td>缩小</td></tr><tr><td><code>Cmd + 0</code></td><td>实际尺寸</td></tr><tr><td><code>Cmd + 1</code></td><td>中心画布</td></tr><tr><td><code>Cmd + 2</code></td><td>缩放选择</td></tr><tr><td><code>Cmd + 3</code></td><td>中心选择</td></tr><tr><td><code>§</code></td><td>临时缩放到实际大小</td></tr><tr><td><code>Alt + Tab</code></td><td>关注第一个输入字段</td></tr><tr><td><code>Control + R</code></td><td>切换标尺</td></tr><tr><td><code>Control + G</code></td><td>切换网格</td></tr><tr><td><code>Control + L</code></td><td>切换图层指南</td></tr><tr><td><code>Control + P</code></td><td>切换像素</td></tr><tr><td><code>Control + H</code></td><td>切换选择手柄</td></tr><tr><td><code>Control + X</code></td><td>切换像素网格</td></tr><tr><td><code>Space + Drag</code></td><td>移动画布</td></tr></tbody></table>
<!--rehype:className=shortcuts-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="窗口"><a aria-hidden="true" tabindex="-1" href="#窗口"><span class="icon icon-link"></span></a>窗口</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>快捷键</th>
<th>Window</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Cmd + ~</code></td>
<td>在文档之间切换</td>
</tr>
<tr>
<td><code>Alt + Cmd + 1</code></td>
<td>切换层列表</td>
</tr>
<tr>
<td><code>Alt + Cmd + 2</code></td>
<td>切换检查器</td>
</tr>
<tr>
<td><code>Alt + Cmd + 3</code></td>
<td>切换图层、检查器</td>
</tr>
<tr>
<td><code>Alt + Cmd + T</code></td>
<td>切换工具栏</td>
</tr>
<tr>
<td><code>Cmd + .</code></td>
<td>演示模式</td>
</tr>
<tr>
<td><code>Control + Cmd + F</code></td>
<td>进入全屏</td>
</tr>
</tbody>
</table>
<table class="shortcuts"><thead><tr><th>快捷键</th><th>Window</th></tr></thead><tbody><tr><td><code>Cmd + ~</code></td><td>在文档之间切换</td></tr><tr><td><code>Alt + Cmd + 1</code></td><td>切换层列表</td></tr><tr><td><code>Alt + Cmd + 2</code></td><td>切换检查器</td></tr><tr><td><code>Alt + Cmd + 3</code></td><td>切换图层、检查器</td></tr><tr><td><code>Alt + Cmd + T</code></td><td>切换工具栏</td></tr><tr><td><code>Cmd + .</code></td><td>演示模式</td></tr><tr><td><code>Control + Cmd + F</code></td><td>进入全屏</td></tr></tbody></table>
<!--rehype:className=shortcuts-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="编辑形状"><a aria-hidden="true" tabindex="-1" href="#编辑形状"><span class="icon icon-link"></span></a>编辑形状</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>编辑形状</th>
<th>快捷键</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Cmd + Alt</code></td>
<td>保留当前选择</td>
</tr>
<tr>
<td><code>Control + Cmd + M</code></td>
<td>用作蒙版跨度<code>(适用于图层和组)</code></td>
</tr>
<tr>
<td><code>Alt + Cmd + U</code></td>
<td>联盟</td>
</tr>
<tr>
<td><code>Alt + Cmd + S</code></td>
<td>减去</td>
</tr>
<tr>
<td><code>Alt + Cmd + I</code></td>
<td>相交</td>
</tr>
<tr>
<td><code>Alt + Cmd + X</code></td>
<td>区别</td>
</tr>
<tr>
<td><code>Cmd + Arrows</code></td>
<td>更改对象大小</td>
</tr>
<tr>
<td><code>Shift + Cmd + Arrows</code></td>
<td>将单位更改 10</td>
</tr>
<tr>
<td><code>1, 2, 3, 4</code></td>
<td>更改矢量点样式</td>
</tr>
</tbody>
</table>
<table class="shortcuts"><thead><tr><th>编辑形状</th><th>快捷键</th></tr></thead><tbody><tr><td><code>Cmd + Alt</code></td><td>保留当前选择</td></tr><tr><td><code>Control + Cmd + M</code></td><td>用作蒙版跨度<code>(适用于图层和组)</code></td></tr><tr><td><code>Alt + Cmd + U</code></td><td>联盟</td></tr><tr><td><code>Alt + Cmd + S</code></td><td>减去</td></tr><tr><td><code>Alt + Cmd + I</code></td><td>相交</td></tr><tr><td><code>Alt + Cmd + X</code></td><td>区别</td></tr><tr><td><code>Cmd + Arrows</code></td><td>更改对象大小</td></tr><tr><td><code>Shift + Cmd + Arrows</code></td><td>将单位更改 10</td></tr><tr><td><code>1, 2, 3, 4</code></td><td>更改矢量点样式</td></tr></tbody></table>
<!--rehype:className=shortcuts-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="编辑图层"><a aria-hidden="true" tabindex="-1" href="#编辑图层"><span class="icon icon-link"></span></a>编辑图层</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>快捷键</th>
<th>编辑图层</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Alt</code></td>
<td>显示到其他图层的距离</td>
</tr>
<tr>
<td><code>Alt + Cmd</code></td>
<td>显示到组内其他图层的距离</td>
</tr>
<tr>
<td><code>Alt + Drag</code></td>
<td>复制(用 ⌘D 重复)</td>
</tr>
<tr>
<td><code>Alt + Cmd + C</code></td>
<td>复制样式</td>
</tr>
<tr>
<td><code>Alt + Cmd + V</code></td>
<td>粘贴样式</td>
</tr>
<tr>
<td><code>Control + C</code></td>
<td>选色器</td>
</tr>
<tr>
<td><code>Cmd + T</code></td>
<td>转换</td>
</tr>
<tr>
<td><code>Shift + Cmd + R</code></td>
<td>旋转</td>
</tr>
<tr>
<td><code>F</code></td>
<td>切换填充</td>
</tr>
<tr>
<td><code>B</code></td>
<td>切换边框</td>
</tr>
</tbody>
</table>
<table class="shortcuts"><thead><tr><th>快捷键</th><th>编辑图层</th></tr></thead><tbody><tr><td><code>Alt</code></td><td>显示到其他图层的距离</td></tr><tr><td><code>Alt + Cmd</code></td><td>显示到组内其他图层的距离</td></tr><tr><td><code>Alt + Drag</code></td><td>复制(用 ⌘D 重复)</td></tr><tr><td><code>Alt + Cmd + C</code></td><td>复制样式</td></tr><tr><td><code>Alt + Cmd + V</code></td><td>粘贴样式</td></tr><tr><td><code>Control + C</code></td><td>选色器</td></tr><tr><td><code>Cmd + T</code></td><td>转换</td></tr><tr><td><code>Shift + Cmd + R</code></td><td>旋转</td></tr><tr><td><code>F</code></td><td>切换填充</td></tr><tr><td><code>B</code></td><td>切换边框</td></tr></tbody></table>
<!--rehype:className=shortcuts-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="排列图层组和画板"><a aria-hidden="true" tabindex="-1" href="#排列图层组和画板"><span class="icon icon-link"></span></a>排列图层、组和画板</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>排列图层、组和画板</th>
<th>快捷键</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Alt + Cmd + ↑</code></td>
<td>向前进</td>
</tr>
<tr>
<td><code>Control + Alt + Cmd + ↑</code></td>
<td>带到前面</td>
</tr>
<tr>
<td><code>Alt + Cmd + ↓</code></td>
<td>向后发送</td>
</tr>
<tr>
<td><code>Control + Alt + Cmd + ↓</code></td>
<td>送回</td>
</tr>
<tr>
<td><code>Shift + Cmd + H</code></td>
<td>隐藏</td>
</tr>
<tr>
<td><code>Shift + Cmd + L</code></td>
<td></td>
</tr>
<tr>
<td><code>Cmd + R</code></td>
<td>改名</td>
</tr>
<tr>
<td><code>Cmd + G</code></td>
<td>图层组</td>
</tr>
<tr>
<td><code>Shift + Cmd + G</code></td>
<td>取消组合图层</td>
</tr>
<tr>
<td><code>Shift + Tab</code></td>
<td>选择上层</td>
</tr>
<tr>
<td><code>Tab</code></td>
<td>选择下面的图层</td>
</tr>
<tr>
<td><code>Esc</code></td>
<td>选择父画板</td>
</tr>
<tr>
<td><code>Cmd + F</code></td>
<td>按名称查找图层</td>
</tr>
<tr>
<td><code>Fn + ↑</code></td>
<td>选择上方页面</td>
</tr>
<tr>
<td><code>Fn + ↓</code></td>
<td>选择下面的页面</td>
</tr>
</tbody>
</table>
<table class="shortcuts"><thead><tr><th>排列图层、组和画板</th><th>快捷键</th></tr></thead><tbody><tr><td><code>Alt + Cmd + ↑</code></td><td>向前进</td></tr><tr><td><code>Control + Alt + Cmd + ↑</code></td><td>带到前面</td></tr><tr><td><code>Alt + Cmd + ↓</code></td><td>向后发送</td></tr><tr><td><code>Control + Alt + Cmd + ↓</code></td><td>送回</td></tr><tr><td><code>Shift + Cmd + H</code></td><td>隐藏</td></tr><tr><td><code>Shift + Cmd + L</code></td><td></td></tr><tr><td><code>Cmd + R</code></td><td>改名</td></tr><tr><td><code>Cmd + G</code></td><td>图层组</td></tr><tr><td><code>Shift + Cmd + G</code></td><td>取消组合图层</td></tr><tr><td><code>Shift + Tab</code></td><td>选择上层</td></tr><tr><td><code>Tab</code></td><td>选择下面的图层</td></tr><tr><td><code>Esc</code></td><td>选择父画板</td></tr><tr><td><code>Cmd + F</code></td><td>按名称查找图层</td></tr><tr><td><code>Fn + ↑</code></td><td>选择上方页面</td></tr><tr><td><code>Fn + ↓</code></td><td>选择下面的页面</td></tr></tbody></table>
<!--rehype:className=shortcuts-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="另见"><a aria-hidden="true" tabindex="-1" href="#另见"><span class="icon icon-link"></span></a>另见</h2><div class="wrap-body">
<ul>
<li><a href="https://www.sketch.com/">Sketch 官网</a> <em>(sketch.com)</em></li>
<li><a href="https://www.sketch.com/">Sketch 官网</a> <em>(sketch.com)</em></li>
</ul>
</div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

View File

@@ -40,8 +40,8 @@
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="介绍"><a aria-hidden="true" tabindex="-1" href="#介绍"><span class="icon icon-link"></span></a>介绍</h3><div class="wrap-body">
<p><a href="https://toml.io/en/">TOML</a> 是一种最小的配置文件格式,由于明显的语义而易于阅读。</p>
<ul>
<li><a href="https://toml.io/en/latest">Document</a> <em>(toml.io)</em></li>
<li><a href="https://learnxinyminutes.com/docs/toml/">Learn X in Y minutes</a> <em>(learnxinyminutes.com)</em></li>
<li><a href="https://toml.io/en/latest">Document</a> <em>(toml.io)</em></li>
<li><a href="https://learnxinyminutes.com/docs/toml/">Learn X in Y minutes</a> <em>(learnxinyminutes.com)</em></li>
</ul>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="示例"><a aria-hidden="true" tabindex="-1" href="#示例"><span class="icon icon-link"></span></a>示例</h3><div class="wrap-body">
<pre class="language-toml"><code class="language-toml code-highlight"><span class="code-line line-number" line="1"><span class="token key property">bool</span> <span class="token punctuation">=</span> <span class="token boolean">true</span>
@@ -99,7 +99,8 @@
</span><span class="code-line line-number" line="2"><span class="token key property">array2</span> <span class="token punctuation">=</span> <span class="token punctuation">[</span><span class="token string">"Commas"</span><span class="token punctuation">,</span> <span class="token string">"are"</span><span class="token punctuation">,</span> <span class="token string">"delimiter"</span><span class="token punctuation">]</span>
</span><span class="code-line line-number" line="3"><span class="token key property">array3</span> <span class="token punctuation">=</span> <span class="token punctuation">[</span><span class="token number">8001</span><span class="token punctuation">,</span> <span class="token number">8001</span><span class="token punctuation">,</span> <span class="token number">8002</span><span class="token punctuation">]</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="友好数组"><a aria-hidden="true" tabindex="-1" href="#友好数组"><span class="icon icon-link"></span></a>友好数组</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="友好数组"><a aria-hidden="true" tabindex="-1" href="#友好数组"><span class="icon icon-link"></span></a>友好数组</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-toml"><code class="language-toml code-highlight"><span class="code-line line-number" line="1"><span class="token key property">array1</span> <span class="token punctuation">=</span> <span class="token punctuation">[</span> <span class="token string">"Don't mix"</span><span class="token punctuation">,</span> <span class="token string">"different"</span><span class="token punctuation">,</span> <span class="token string">"types"</span> <span class="token punctuation">]</span>
</span><span class="code-line line-number" line="2"><span class="token key property">array2</span> <span class="token punctuation">=</span> <span class="token punctuation">[</span> <span class="token punctuation">[</span> <span class="token number">1.2</span><span class="token punctuation">,</span> <span class="token number">2.4</span> <span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">"all"</span><span class="token punctuation">,</span> <span class="token string">'strings'</span><span class="token punctuation">,</span> <span class="token string">"""are the same"""</span><span class="token punctuation">,</span> <span class="token string">'''type'''</span><span class="token punctuation">]</span> <span class="token punctuation">]</span>
</span><span class="code-line line-number" line="3"><span class="token key property">array3</span> <span class="token punctuation">=</span> <span class="token punctuation">[</span>
@@ -144,7 +145,8 @@
</span><span class="code-line line-number" line="3"><span class="token punctuation">[</span><span class="token table class-name">table1.nested_table</span><span class="token punctuation">]</span>
</span><span class="code-line line-number" line="4"> <span class="token key property">baz</span> <span class="token punctuation">=</span> <span class="token string">"bat"</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="类数组"><a aria-hidden="true" tabindex="-1" href="#类数组"><span class="icon icon-link"></span></a>类数组</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="类数组"><a aria-hidden="true" tabindex="-1" href="#类数组"><span class="icon icon-link"></span></a>类数组</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<pre class="language-toml"><code class="language-toml code-highlight"><span class="code-line line-number" line="1"><span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token table class-name">comments</span><span class="token punctuation">]</span><span class="token punctuation">]</span>
</span><span class="code-line line-number" line="2"><span class="token key property">author</span> <span class="token punctuation">=</span> <span class="token string">"Nate"</span>
</span><span class="code-line line-number" line="3"><span class="token key property">text</span> <span class="token punctuation">=</span> <span class="token string">"Great Article!"</span>
@@ -200,11 +202,11 @@
</span><span class="code-line line-number" line="3"><span class="token punctuation">[</span> <span class="token table class-name">g . h .i</span> <span class="token punctuation">]</span> <span class="token comment"># same as [g.h.i]</span>
</span><span class="code-line line-number" line="4"><span class="token punctuation">[</span> <span class="token table class-name">j . "ʞ" .'l'</span> <span class="token punctuation">]</span> <span class="token comment"># same as [j."ʞ".'l']</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="inline-table"><a aria-hidden="true" tabindex="-1" href="#inline-table"><span class="icon icon-link"></span></a>Inline Table</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="inline-table"><a aria-hidden="true" tabindex="-1" href="#inline-table"><span class="icon icon-link"></span></a>Inline Table</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-toml"><code class="language-toml code-highlight"><span class="code-line line-number" line="1"><span class="token key property">name</span> <span class="token punctuation">=</span> <span class="token punctuation">{</span> <span class="token key property">first</span> <span class="token punctuation">=</span> <span class="token string">"Tom"</span><span class="token punctuation">,</span> <span class="token key property">last</span> <span class="token punctuation">=</span> <span class="token string">"Preston-Werner"</span> <span class="token punctuation">}</span>
</span><span class="code-line line-number" line="2"><span class="token key property">point</span> <span class="token punctuation">=</span> <span class="token punctuation">{</span> <span class="token key property">x</span> <span class="token punctuation">=</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token key property">y</span> <span class="token punctuation">=</span> <span class="token number">2</span> <span class="token punctuation">}</span>
</span><span class="code-line line-number" line="3"><span class="token key property">animal</span> <span class="token punctuation">=</span> <span class="token punctuation">{</span> <span class="token key property">type.name</span> <span class="token punctuation">=</span> <span class="token string">"pug"</span> <span class="token punctuation">}</span>
</span></code></pre>
</div></div></div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

View File

@@ -40,8 +40,8 @@
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="介绍"><a aria-hidden="true" tabindex="-1" href="#介绍"><span class="icon icon-link"></span></a>介绍</h3><div class="wrap-body">
<p>TypeScript 是具有类型语法的 JavaScript。Interface 是为了匹配它们的运行时行为而构建的。</p>
<ul>
<li><a href="./javascript.html">JavaScript 备忘清单</a></li>
<li><a href="https://www.typescriptlang.org/">TypeScript 官网</a></li>
<li><a href="./javascript.html">JavaScript 备忘清单</a></li>
<li><a href="https://www.typescriptlang.org/">TypeScript 官网</a></li>
</ul>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="内置类型基元"><a aria-hidden="true" tabindex="-1" href="#内置类型基元"><span class="icon icon-link"></span></a>内置类型基元</h3><div class="wrap-body">
<pre class="language-ts"><code class="language-ts code-highlight"><span class="code-line line-number" line="1"><span class="token builtin">any</span><span class="token punctuation">,</span> <span class="token keyword">void</span><span class="token punctuation">,</span>
@@ -72,7 +72,8 @@
</div></div></div><div class="wrap"><div class="wrap-header h4wrap"><h4 id="避免"><a aria-hidden="true" tabindex="-1" href="#避免"><span class="icon icon-link"></span></a>避免</h4><div class="wrap-body">
<pre><code class="code-highlight"><span class="code-line line-number" line="1">Object, String, Number, Boolean
</span></code></pre>
</div></div></div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="通用语法"><a aria-hidden="true" tabindex="-1" href="#通用语法"><span class="icon icon-link"></span></a>通用语法</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="通用语法"><a aria-hidden="true" tabindex="-1" href="#通用语法"><span class="icon icon-link"></span></a>通用语法</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-ts"><code class="language-ts code-highlight"><span class="code-line line-number" line="1"><span class="token comment">/** 可选择从现有接口或类型(Response, HTTPAble)中获取属性 */</span>
</span><span class="code-line line-number" line="2"><span class="token keyword">interface</span> <span class="token class-name">JSONResponse</span> <span class="token keyword">extends</span> <span class="token class-name">Response</span><span class="token punctuation">,</span> HTTPAble <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="3"> version<span class="token operator">:</span> <span class="token builtin">number</span><span class="token punctuation">;</span>
@@ -94,7 +95,8 @@
</span><span class="code-line line-number" line="19"> <span class="token keyword">readonly</span> body<span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="20"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="泛型"><a aria-hidden="true" tabindex="-1" href="#泛型"><span class="icon icon-link"></span></a>泛型</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="泛型"><a aria-hidden="true" tabindex="-1" href="#泛型"><span class="icon icon-link"></span></a>泛型</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<p>声明一个可以在你的 Interface 中改变的类型</p>
<pre class="language-ts"><code class="language-ts code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">interface</span> <span class="token class-name">APICall<span class="token operator">&#x3C;</span>Response<span class="token operator">></span></span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> data<span class="token operator">:</span> Response
@@ -151,11 +153,12 @@
</span></code></pre>
<p>Interface 被合并,多个声明将向类型定义添加新字段。</p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="type"><a aria-hidden="true" tabindex="-1" href="#type"><span class="icon icon-link"></span></a>Type</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="type-vs-interface"><a aria-hidden="true" tabindex="-1" href="#type-vs-interface"><span class="icon icon-link"></span></a>Type vs Interface</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div><div class="h2wrap-body"><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="type-vs-interface"><a aria-hidden="true" tabindex="-1" href="#type-vs-interface"><span class="icon icon-link"></span></a>Type vs Interface</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<ul>
<li>Interface 只能描述对象形状</li>
<li>Interface 可以通过多次声明来扩展</li>
<li>在性能关键 Type 中Interface 比较检查可以更快。</li>
<li>Interface 只能描述对象形状</li>
<li>Interface 可以通过多次声明来扩展</li>
<li>在性能关键 Type 中Interface 比较检查可以更快。</li>
</ul>
</div></div><div class="h3wrap-body"><div class="wrap"><div class="wrap-header h4wrap"><h4 id="把类型想象成变量"><a aria-hidden="true" tabindex="-1" href="#把类型想象成变量"><span class="icon icon-link"></span></a>把类型想象成变量</h4><div class="wrap-body">
<p>就像您如何在不同范围内创建具有相同名称的变量一样type 具有相似的语义。</p>
@@ -197,7 +200,8 @@
<pre class="language-ts"><code class="language-ts code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">const</span> data<span class="token operator">:</span> <span class="token keyword">import</span><span class="token punctuation">(</span><span class="token string">"./data"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>data
</span></code></pre>
<p>这些功能非常适合构建库、描述现有的 JavaScript 代码,您可能会发现在大多数 TypeScript 应用程序中很少使用它们。</p>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="对象字面量语法"><a aria-hidden="true" tabindex="-1" href="#对象字面量语法"><span class="icon icon-link"></span></a>对象字面量语法</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="对象字面量语法"><a aria-hidden="true" tabindex="-1" href="#对象字面量语法"><span class="icon icon-link"></span></a>对象字面量语法</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-ts"><code class="language-ts code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">type</span> <span class="token class-name">JSONResponse</span> <span class="token operator">=</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> version<span class="token operator">:</span> <span class="token builtin">number</span><span class="token punctuation">;</span> <span class="token comment">// 字段</span>
</span><span class="code-line line-number" line="3"> <span class="token comment">/** In bytes */</span> <span class="token comment">// 附加文档</span>
@@ -226,7 +230,8 @@
</span><span class="code-line line-number" line="11"><span class="token comment">// void, bio: (nv: string) => void }</span>
</span></code></pre>
<p>类似于类型系统的映射语句,允许输入类型更改新类型的结构。</p>
</div></div></div><div class="wrap col-span-3"><div class="wrap-header h3wrap"><h3 id="模板联合类型"><a aria-hidden="true" tabindex="-1" href="#模板联合类型"><span class="icon icon-link"></span></a>模板联合类型</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-3-->
</div></div></div><div class="wrap col-span-3"><div class="wrap-header h3wrap"><h3 id="模板联合类型"><a aria-hidden="true" tabindex="-1" href="#模板联合类型"><span class="icon icon-link"></span></a>模板联合类型</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-3-->
<pre class="language-ts"><code class="language-ts code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">type</span> <span class="token class-name">SupportedLangs</span> <span class="token operator">=</span> <span class="token string">"en"</span> <span class="token operator">|</span> <span class="token string">"pt"</span> <span class="token operator">|</span> <span class="token string">"zh"</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="2"><span class="token keyword">type</span> <span class="token class-name">FooterLocaleIDs</span> <span class="token operator">=</span> <span class="token string">"header"</span> <span class="token operator">|</span> <span class="token string">"footer"</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="3"><span class="token keyword">type</span> <span class="token class-name">AllLocaleIDs</span> <span class="token operator">=</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>SupportedLangs<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">_</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>FooterLocaleIDs<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">_id</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">;</span>
@@ -235,7 +240,8 @@
</span><span class="code-line line-number" line="6"><span class="token comment">// | "pt_header_id" | "pt_footer_id"</span>
</span><span class="code-line line-number" line="7"><span class="token comment">// | "zh_header_id" | "zh_footer_id"</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-3"><div class="wrap-header h3wrap"><h3 id="条件类型"><a aria-hidden="true" tabindex="-1" href="#条件类型"><span class="icon icon-link"></span></a>条件类型</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-3-->
</div></div></div><div class="wrap col-span-3"><div class="wrap-header h3wrap"><h3 id="条件类型"><a aria-hidden="true" tabindex="-1" href="#条件类型"><span class="icon icon-link"></span></a>条件类型</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-3-->
<pre class="language-ts"><code class="language-ts code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">type</span> <span class="token class-name">HasFourLegs<span class="token operator">&#x3C;</span>Animal<span class="token operator">></span></span> <span class="token operator">=</span> Animal <span class="token keyword">extends</span> <span class="token punctuation">{</span> legs<span class="token operator">:</span> <span class="token number">4</span> <span class="token punctuation">}</span> <span class="token operator">?</span> Animal <span class="token operator">:</span> <span class="token builtin">never</span>
</span><span class="code-line line-number" line="2"><span class="token keyword">type</span> <span class="token class-name">Animals</span> <span class="token operator">=</span> Bird <span class="token operator">|</span> Dog <span class="token operator">|</span> Ant <span class="token operator">|</span> Wolf<span class="token punctuation">;</span>
</span><span class="code-line line-number" line="3"><span class="token keyword">type</span> <span class="token class-name">FourLegs</span> <span class="token operator">=</span> HasFourLegs<span class="token operator">&#x3C;</span>Animals<span class="token operator">></span>
@@ -243,7 +249,8 @@
</span></code></pre>
<p>在类型系统中充当“if 语句”。 通过泛型创建,然后通常用于减少类型联合中的选项数量。</p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="控制流动分析"><a aria-hidden="true" tabindex="-1" href="#控制流动分析"><span class="icon icon-link"></span></a>控制流动分析</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="if-声明"><a aria-hidden="true" tabindex="-1" href="#if-声明"><span class="icon icon-link"></span></a>If 声明</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-3-->
</div></div><div class="h2wrap-body"><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="if-声明"><a aria-hidden="true" tabindex="-1" href="#if-声明"><span class="icon icon-link"></span></a>If 声明</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-3-->
</div></div><div class="h3wrap-body"><div class="wrap"><div class="wrap-header h4wrap"><h4 id="typeof用于原语"><a aria-hidden="true" tabindex="-1" href="#typeof用于原语"><span class="icon icon-link"></span></a>typeof用于原语</h4><div class="wrap-body">
<pre class="language-ts"><code class="language-ts code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">const</span> input <span class="token operator">=</span> <span class="token function">getUserInput</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
</span><span class="code-line line-number" line="2">input <span class="token comment">// string | number</span>
@@ -276,7 +283,8 @@
</span><span class="code-line line-number" line="5"> input <span class="token comment">// number[]</span>
</span><span class="code-line line-number" line="6"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="任务"><a aria-hidden="true" tabindex="-1" href="#任务"><span class="icon icon-link"></span></a>任务</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-3-->
</div></div></div></div></div><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="任务"><a aria-hidden="true" tabindex="-1" href="#任务"><span class="icon icon-link"></span></a>任务</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-3-->
<pre class="language-ts"><code class="language-ts code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">const</span> data1 <span class="token operator">=</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> name<span class="token operator">:</span> <span class="token string">"Zagreus"</span>
</span><span class="code-line line-number" line="3"><span class="token punctuation">}</span>
@@ -334,14 +342,14 @@
</span><span class="code-line line-number" line="6"> <span class="token keyword">case</span> <span class="token number">400</span><span class="token operator">:</span> <span class="token keyword">return</span> response<span class="token punctuation">.</span>error
</span><span class="code-line line-number" line="7"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="断言函数"><a aria-hidden="true" tabindex="-1" href="#断言函数"><span class="icon icon-link"></span></a>断言函数</h3><div class="wrap-body">
</div></div></div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="断言函数"><a aria-hidden="true" tabindex="-1" href="#断言函数"><span class="icon icon-link"></span></a>断言函数</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<p>描述影响当前范围的 CFA 更改的函数,因为它抛出而不是返回 false。</p>
<pre class="language-ts"><code class="language-ts code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">function</span> <span class="token function">assertResponse</span><span class="token punctuation">(</span>obj<span class="token operator">:</span> <span class="token builtin">any</span><span class="token punctuation">)</span><span class="token operator">:</span>
</span><span class="code-line line-number" line="2"> <span class="token keyword">asserts</span> obj <span class="token keyword">is</span> SuccessResponse <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="3"> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token punctuation">(</span>obj <span class="token keyword">instanceof</span> <span class="token class-name">SuccessResponse</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="4"> <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">Error</span><span class="token punctuation">(</span><span class="token string">'Not a success!'</span><span class="token punctuation">)</span>
</span><span class="code-line line-number" line="5"> <span class="token punctuation">}</span>
</span><span class="code-line line-number" line="6"><span class="token punctuation">}</span>
<pre class="language-ts"><code class="language-ts code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">function</span> <span class="token function">assertResponse</span><span class="token punctuation">(</span>obj<span class="token operator">:</span> <span class="token builtin">any</span><span class="token punctuation">)</span><span class="token operator">:</span> <span class="token keyword">asserts</span> obj <span class="token keyword">is</span> SuccessResponse <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token punctuation">(</span>obj <span class="token keyword">instanceof</span> <span class="token class-name">SuccessResponse</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="3"> <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">Error</span><span class="token punctuation">(</span><span class="token string">'Not a success!'</span><span class="token punctuation">)</span>
</span><span class="code-line line-number" line="4"> <span class="token punctuation">}</span>
</span><span class="code-line line-number" line="5"><span class="token punctuation">}</span>
</span></code></pre>
</div></div><div class="h3wrap-body"><div class="wrap"><div class="wrap-header h4wrap"><h4 id="用法-2"><a aria-hidden="true" tabindex="-1" href="#用法-2"><span class="icon icon-link"></span></a>用法</h4><div class="wrap-body">
<pre class="language-ts"><code class="language-ts code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">const</span> res <span class="token operator">=</span> <span class="token function">getResponse</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">:</span>
@@ -394,7 +402,8 @@
<p>所以,小心不要这样做:</p>
<pre class="language-ts"><code class="language-ts code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">class</span> <span class="token class-name"><span class="token constant">C</span></span> <span class="token keyword">implements</span> <span class="token class-name">Bag</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="通用语法-1"><a aria-hidden="true" tabindex="-1" href="#通用语法-1"><span class="icon icon-link"></span></a>通用语法</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="通用语法-1"><a aria-hidden="true" tabindex="-1" href="#通用语法-1"><span class="icon icon-link"></span></a>通用语法</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-ts"><code class="language-ts code-highlight"><span class="code-line line-number" line="1"><span class="token comment">// 确保类符合一组接口或类型 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈▶┈┈╮</span>
</span><span class="code-line line-number" line="2"><span class="token comment">// 子类这个类 ┈┈┈┈┈┈┈┈↘ ┈┈┈┈┈┈┈┈┈┈┈┈┈┴┈┈┈┈┈┈┈</span>
</span><span class="code-line line-number" line="3"><span class="token keyword">class</span> <span class="token class-name">User</span> <span class="token keyword">extends</span> <span class="token class-name">Account</span> <span class="token keyword">implements</span> <span class="token class-name">Updatable</span><span class="token punctuation">,</span> Serializable <span class="token punctuation">{</span>
@@ -463,7 +472,8 @@
</span><span class="code-line line-number" line="7"><span class="token keyword">class</span> <span class="token class-name">Dog</span> <span class="token keyword">extends</span> <span class="token class-name">Animal</span> <span class="token punctuation">{</span> <span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token operator">...</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span>
</span></code></pre>
<p>一个类可以被声明为不可实现,但可以在类型系统中被子类化。 class 成员也可以。</p>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="装饰器和属性"><a aria-hidden="true" tabindex="-1" href="#装饰器和属性"><span class="icon icon-link"></span></a>装饰器和属性</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="装饰器和属性"><a aria-hidden="true" tabindex="-1" href="#装饰器和属性"><span class="icon icon-link"></span></a>装饰器和属性</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-ts"><code class="language-ts code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">import</span> <span class="token punctuation">{</span> Syncable<span class="token punctuation">,</span> triggersSync<span class="token punctuation">,</span> preferCache<span class="token punctuation">,</span> required <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"mylib"</span>
</span><span class="code-line line-number" line="2">
</span><span class="code-line line-number" line="3"><span class="token decorator"><span class="token at operator">@</span><span class="token function">Syncable</span></span>
@@ -812,10 +822,10 @@
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="jsx-介绍"><a aria-hidden="true" tabindex="-1" href="#jsx-介绍"><span class="icon icon-link"></span></a>JSX 介绍</h3><div class="wrap-body">
<p>JSX 规范是对 ECMAScript 的类似 XML 的语法扩展。</p>
<ul>
<li>使用 <code>.tsx</code> 扩展名命名您的文件</li>
<li>启用 <code>jsx</code> 选项</li>
<li>不允许在 <code>.tsx</code> 文件中使用尖括号类型断言。</li>
<li><a href="https://facebook.github.io/jsx/">JSX 规范</a></li>
<li>使用 <code>.tsx</code> 扩展名命名您的文件</li>
<li>启用 <code>jsx</code> 选项</li>
<li>不允许在 <code>.tsx</code> 文件中使用尖括号类型断言。</li>
<li><a href="https://facebook.github.io/jsx/">JSX 规范</a></li>
</ul>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="as-运算符"><a aria-hidden="true" tabindex="-1" href="#as-运算符"><span class="icon icon-link"></span></a>as 运算符</h3><div class="wrap-body">
<pre class="language-ts"><code class="language-ts code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">const</span> foo <span class="token operator">=</span> <span class="token operator">&#x3C;</span>foo<span class="token operator">></span>bar<span class="token punctuation">;</span>
@@ -847,7 +857,8 @@
</span><span class="code-line line-number" line="4"> <span class="token punctuation">}</span>
</span><span class="code-line line-number" line="5"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="函数组件"><a aria-hidden="true" tabindex="-1" href="#函数组件"><span class="icon icon-link"></span></a>函数组件</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="函数组件"><a aria-hidden="true" tabindex="-1" href="#函数组件"><span class="icon icon-link"></span></a>函数组件</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-tsx"><code class="language-tsx code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">interface</span> <span class="token class-name">FooProp</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> name<span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">;</span>
</span><span class="code-line line-number" line="3"> <span class="token constant">X</span><span class="token operator">:</span> <span class="token builtin">number</span><span class="token punctuation">;</span>
@@ -882,7 +893,8 @@
</span><span class="code-line line-number" line="16"> <span class="token comment">// ...</span>
</span><span class="code-line line-number" line="17"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="函数子组件"><a aria-hidden="true" tabindex="-1" href="#函数子组件"><span class="icon icon-link"></span></a>函数子组件</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="函数子组件"><a aria-hidden="true" tabindex="-1" href="#函数子组件"><span class="icon icon-link"></span></a>函数子组件</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-tsx"><code class="language-tsx code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">interface</span> <span class="token class-name">MenuProps</span> <span class="token keyword">extends</span> <span class="token class-name">React</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">LiHTMLAttributes</span></span><span class="token operator">&#x3C;</span><span class="token maybe-class-name">HTMLUListElement</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token spread operator">...</span> <span class="token punctuation">}</span>
</span><span class="code-line line-number" line="2"><span class="token keyword">const</span> <span class="token function-variable function">InternalMenu</span> <span class="token operator">=</span> <span class="token punctuation">(</span>props<span class="token operator">:</span> <span class="token maybe-class-name">MenuProps</span><span class="token punctuation">,</span> ref<span class="token operator">?</span><span class="token operator">:</span> <span class="token maybe-class-name">React</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">ForwardedRef</span></span><span class="token operator">&#x3C;</span><span class="token maybe-class-name">HTMLUListElement</span><span class="token operator">></span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">(</span>
</span><span class="code-line line-number" line="3"> <span class="token tag"><span class="token tag"><span class="token punctuation">&#x3C;</span>ul</span> <span class="token spread"><span class="token punctuation">{</span><span class="token spread operator">...</span>props<span class="token punctuation">}</span></span> <span class="token attr-name">ref</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>ref<span class="token punctuation">}</span></span> <span class="token punctuation">/></span></span>
@@ -901,7 +913,8 @@
</span><span class="code-line line-number" line="16"><span class="token tag"><span class="token tag"><span class="token punctuation">&#x3C;</span><span class="token class-name">Menu.Item</span></span> <span class="token punctuation">/></span></span> <span class="token comment">// ✅ ok</span>
</span><span class="code-line line-number" line="17"><span class="token tag"><span class="token tag"><span class="token punctuation">&#x3C;</span><span class="token class-name">Menu.SubMenu</span></span> <span class="token punctuation">/></span></span> <span class="token comment">// ✅ ok</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="有效组件"><a aria-hidden="true" tabindex="-1" href="#有效组件"><span class="icon icon-link"></span></a>有效组件</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="有效组件"><a aria-hidden="true" tabindex="-1" href="#有效组件"><span class="icon icon-link"></span></a>有效组件</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<pre class="language-tsx"><code class="language-tsx code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">declare</span> <span class="token keyword">namespace</span> <span class="token constant">JSX</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> <span class="token keyword">interface</span> <span class="token class-name">ElementClass</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="3"> render<span class="token operator">:</span> <span class="token builtin">any</span><span class="token punctuation">;</span>
@@ -925,7 +938,8 @@
</span><span class="code-line line-number" line="6"><span class="token tag"><span class="token tag"><span class="token punctuation">&#x3C;</span><span class="token class-name">NotAValidFactoryFunction</span></span> <span class="token punctuation">/></span></span><span class="token punctuation">;</span> <span class="token comment">// ❌ error</span>
</span></code></pre>
<p>默认情况下,<code>JSX.ElementClass</code> 是 {},但可以对其进行扩展,以将 <code>JSX</code> 的使用限制为仅限于符合适当接口的类型。</p>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="类组件"><a aria-hidden="true" tabindex="-1" href="#类组件"><span class="icon icon-link"></span></a>类组件</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2-->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="类组件"><a aria-hidden="true" tabindex="-1" href="#类组件"><span class="icon icon-link"></span></a>类组件</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-ts"><code class="language-ts code-highlight"><span class="code-line line-number" line="1"><span class="token keyword">type</span> <span class="token class-name">Props</span> <span class="token operator">=</span> <span class="token punctuation">{</span>
</span><span class="code-line line-number" line="2"> header<span class="token operator">:</span> React<span class="token punctuation">.</span>ReactNode<span class="token punctuation">;</span>
</span><span class="code-line line-number" line="3"> body<span class="token operator">:</span> React<span class="token punctuation">.</span>ReactNode<span class="token punctuation">;</span>
@@ -952,6 +966,5 @@
</span><span class="code-line line-number" line="5"><span class="token comment">// 使用</span>
</span><span class="code-line line-number" line="6"><span class="token keyword">const</span> <span class="token function-variable function">Form</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token operator">&#x3C;</span><span class="token maybe-class-name">Select</span><span class="token operator">&#x3C;</span><span class="token builtin">string</span><span class="token operator">></span> items<span class="token operator">=</span><span class="token punctuation">{</span><span class="token punctuation">[</span><span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token string">'b'</span><span class="token punctuation">]</span><span class="token punctuation">}</span> <span class="token operator">/</span><span class="token operator">></span><span class="token punctuation">;</span>
</span></code></pre>
</div></div></div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

1936
docs/vim.html Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -40,7 +40,7 @@
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="入门"><a aria-hidden="true" tabindex="-1" href="#入门"><span class="icon icon-link"></span></a>入门</h3><div class="wrap-body">
<p>XPath 即为 XML 路径语言XML Path Language它是一种用来确定XML文档中某部分位置的计算机语言。</p>
<ul>
<li><a href="http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm">Xpath test bed</a> <em>(whitebeam.org)</em></li>
<li><a href="http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm">Xpath test bed</a> <em>(whitebeam.org)</em></li>
</ul>
<p>在 Firefox 或 Chrome 控制台中测试:</p>
<pre class="language-js"><code class="language-js code-highlight"><span class="code-line line-number" line="1"><span class="token function">$x</span><span class="token punctuation">(</span><span class="token string">'/html/body'</span><span class="token punctuation">)</span>
@@ -49,294 +49,303 @@
</span><span class="code-line line-number" line="4"><span class="token function">$x</span><span class="token punctuation">(</span><span class="token string">'//a[text()="XPath"]'</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token method function property-access">click</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="后代选择器"><a aria-hidden="true" tabindex="-1" href="#后代选择器"><span class="icon icon-link"></span></a>后代选择器</h3><div class="wrap-body">
<table class="show-header">
<thead>
<tr>
<th>Xpath</th>
<th>CSS</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>//h1</code></td>
<td>h1</td>
</tr>
<tr>
<td><code>//div//p</code></td>
<td>div p</td>
</tr>
<tr>
<td><code>//ul/li</code></td>
<td>ul > li</td>
</tr>
<tr>
<td><code>//ul/li/a</code></td>
<td>ul > li > a</td>
</tr>
<tr>
<td><code>//div/*</code></td>
<td>div > *</td>
</tr>
<tr>
<td><code>/</code></td>
<td>:root</td>
</tr>
<tr>
<td><code>/html/body</code></td>
<td>:root > body</td>
</tr>
</tbody>
</table><!--rehype:className=show-header-->
<table class="show-header"><thead><tr><th>Xpath</th><th>CSS</th></tr></thead><tbody><tr><td><code>//h1</code></td><td>h1</td></tr><tr><td><code>//div//p</code></td><td>div p</td></tr><tr><td><code>//ul/li</code></td><td>ul > li</td></tr><tr><td><code>//ul/li/a</code></td><td>ul > li > a</td></tr><tr><td><code>//div/*</code></td><td>div > *</td></tr><tr><td><code>/</code></td><td>:root</td></tr><tr><td><code>/html/body</code></td><td>:root > body</td></tr></tbody></table>
<!--rehype:className=show-header-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="有序选择器"><a aria-hidden="true" tabindex="-1" href="#有序选择器"><span class="icon icon-link"></span></a>有序选择器</h3><div class="wrap-body">
<table class="show-header">
<thead>
<tr>
<th>Xpath</th>
<th>CSS</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>//ul/li[1]</code></td>
<td>ul > li:first-child</td>
</tr>
<tr>
<td><code>//ul/li[2]</code></td>
<td>ul > li:nth-child(2)</td>
</tr>
<tr>
<td><code>//ul/li[last()]</code></td>
<td>ul > li:last-child</td>
</tr>
<tr>
<td><code>//li[@id="id"][1]</code></td>
<td>li#id:first-child</td>
</tr>
<tr>
<td><code>//a[1]</code></td>
<td>a:first-child</td>
</tr>
<tr>
<td><code>//a[last()]</code></td>
<td>a:last-child</td>
</tr>
</tbody>
</table><!--rehype:className=show-header-->
</div></div></div><div class="wrap col-span-2 row-span-2"><div class="wrap-header h3wrap"><h3 id="属性选择器"><a aria-hidden="true" tabindex="-1" href="#属性选择器"><span class="icon icon-link"></span></a>属性选择器</h3><div class="wrap-body"><!--rehype:wrap-class=col-span-2 row-span-2-->
<table class="show-header">
<thead>
<tr>
<th>Xpath</th>
<th>CSS</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>//*[@id="id"]</code></td>
<td>#id</td>
</tr>
<tr>
<td><code>//*[@class="class"]</code></td>
<td>.class</td>
</tr>
<tr>
<td><code>//input[@type="submit"]</code></td>
<td>input[type="submit"]</td>
</tr>
<tr>
<td><code>//a[@id="abc"][@for="xyz"]</code></td>
<td>a#abc[for="xyz"]</td>
</tr>
<tr>
<td><code>//a[@rel]</code></td>
<td>a[rel]</td>
</tr>
<tr>
<td><code>//a[starts-with(@href, '/')]</code></td>
<td>a[href^='/']</td>
</tr>
<tr>
<td><code>//a[ends-with(@href, '.pdf')]</code></td>
<td>a[href$='pdf']</td>
</tr>
<tr>
<td><code>//a[contains(@href, '://')]</code></td>
<td>a[href*='<code>:</code>//']</td>
</tr>
<tr>
<td><code>//a[contains(@rel, 'help')]</code></td>
<td>a[rel~='help']</td>
</tr>
</tbody>
</table><!--rehype:className=show-header-->
<table class="show-header"><thead><tr><th>Xpath</th><th>CSS</th></tr></thead><tbody><tr><td><code>//ul/li[1]</code></td><td>ul > li:first-child</td></tr><tr><td><code>//ul/li[2]</code></td><td>ul > li:nth-child(2)</td></tr><tr><td><code>//ul/li[last()]</code></td><td>ul > li:last-child</td></tr><tr><td><code>//li[@id="id"][1]</code></td><td>li#id:first-child</td></tr><tr><td><code>//a[1]</code></td><td>a:first-child</td></tr><tr><td><code>//a[last()]</code></td><td>a:last-child</td></tr></tbody></table>
<!--rehype:className=show-header-->
</div></div></div><div class="wrap col-span-2 row-span-2"><div class="wrap-header h3wrap"><h3 id="属性选择器"><a aria-hidden="true" tabindex="-1" href="#属性选择器"><span class="icon icon-link"></span></a>属性选择器</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2 row-span-2-->
<table class="show-header"><thead><tr><th>Xpath</th><th>CSS</th></tr></thead><tbody><tr><td><code>//*[@id="id"]</code></td><td>#id</td></tr><tr><td><code>//*[@class="class"]</code></td><td>.class</td></tr><tr><td><code>//input[@type="submit"]</code></td><td>input[type="submit"]</td></tr><tr><td><code>//a[@id="abc"][@for="xyz"]</code></td><td>a#abc[for="xyz"]</td></tr><tr><td><code>//a[@rel]</code></td><td>a[rel]</td></tr><tr><td><code>//a[starts-with(@href, '/')]</code></td><td>a[href^='/']</td></tr><tr><td><code>//a[ends-with(@href, '.pdf')]</code></td><td>a[href$='pdf']</td></tr><tr><td><code>//a[contains(@href, '://')]</code></td><td>a[href*='<code>:</code>//']</td></tr><tr><td><code>//a[contains(@rel, 'help')]</code></td><td>a[rel~='help']</td></tr></tbody></table>
<!--rehype:className=show-header-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="兄弟姐妹选择器"><a aria-hidden="true" tabindex="-1" href="#兄弟姐妹选择器"><span class="icon icon-link"></span></a>兄弟姐妹选择器</h3><div class="wrap-body">
<table class="show-header">
<thead>
<tr>
<th>Xpath</th>
<th>CSS</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>//h1/following-sibling::ul</code></td>
<td>h1 ~ ul</td>
</tr>
<tr>
<td><code>//h1/following-sibling::ul[1]</code></td>
<td>h1 + ul</td>
</tr>
<tr>
<td><code>//h1/following-sibling::[@id="id"]</code></td>
<td>h1 ~ #id</td>
</tr>
</tbody>
</table><!--rehype:className=show-header-->
<table class="show-header"><thead><tr><th>Xpath</th><th>CSS</th></tr></thead><tbody><tr><td><code>//h1/following-sibling::ul</code></td><td>h1 ~ ul</td></tr><tr><td><code>//h1/following-sibling::ul[1]</code></td><td>h1 + ul</td></tr><tr><td><code>//h1/following-sibling::[@id="id"]</code></td><td>h1 ~ #id</td></tr></tbody></table>
<!--rehype:className=show-header-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="jquery"><a aria-hidden="true" tabindex="-1" href="#jquery"><span class="icon icon-link"></span></a>jQuery</h3><div class="wrap-body">
<table class="show-header">
<thead>
<tr>
<th>Xpath</th>
<th>CSS</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>//ul/li/..</code></td>
<td>$('ul > li').parent()</td>
</tr>
<tr>
<td><code>//li/ancestor-or-self::section</code></td>
<td>$('li').closest('section')</td>
</tr>
<tr>
<td><code>//a/@href</code></td>
<td>$('a').attr('href')</td>
</tr>
<tr>
<td><code>//span/text()</code></td>
<td>$('span').text()</td>
</tr>
</tbody>
</table><!--rehype:className=show-header-->
<table class="show-header"><thead><tr><th>Xpath</th><th>CSS</th></tr></thead><tbody><tr><td><code>//ul/li/..</code></td><td>$('ul > li').parent()</td></tr><tr><td><code>//li/ancestor-or-self::section</code></td><td>$('li').closest('section')</td></tr><tr><td><code>//a/@href</code></td><td>$('a').attr('href')</td></tr><tr><td><code>//span/text()</code></td><td>$('span').text()</td></tr></tbody></table>
<!--rehype:className=show-header-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="杂项选择器"><a aria-hidden="true" tabindex="-1" href="#杂项选择器"><span class="icon icon-link"></span></a>杂项选择器</h3><div class="wrap-body">
<table class="show-header">
<thead>
<tr>
<th>Xpath</th>
<th>CSS</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>//h1[not(@id)]</code></td>
<td>h1:not([id])</td>
</tr>
<tr>
<td><code>//button[text()="Submit"]</code></td>
<td>文字匹配</td>
</tr>
<tr>
<td><code>//button[contains(text(),"Go")]</code></td>
<td>文本包含(子字符串)</td>
</tr>
<tr>
<td><code>//product[@price > 2.50]</code></td>
<td>算术</td>
</tr>
<tr>
<td><code>//ul[*]</code></td>
<td>有孩子</td>
</tr>
<tr>
<td><code>//ul[li]</code></td>
<td>有孩子(具体)</td>
</tr>
<tr>
<td><code>//a[@name or @href]</code></td>
<td>或逻辑</td>
</tr>
<tr>
<td>`//a</td>
<td>//div`</td>
</tr>
</tbody>
</table><!--rehype:className=show-header-->
<table class="show-header"><thead><tr><th>Xpath</th><th>CSS</th></tr></thead><tbody><tr><td><code>//h1[not(@id)]</code></td><td>h1:not([id])</td></tr><tr><td><code>//button[text()="Submit"]</code></td><td>文字匹配</td></tr><tr><td><code>//button[contains(text(),"Go")]</code></td><td>文本包含(子字符串)</td></tr><tr><td><code>//product[@price > 2.50]</code></td><td>算术</td></tr><tr><td><code>//ul[*]</code></td><td>有孩子</td></tr><tr><td><code>//ul[li]</code></td><td>有孩子(具体)</td></tr><tr><td><code>//a[@name or @href]</code></td><td>或逻辑</td></tr><tr><td>`//a</td><td>//div`</td></tr></tbody></table>
<!--rehype:className=show-header-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="xpath-表达式"><a aria-hidden="true" tabindex="-1" href="#xpath-表达式"><span class="icon icon-link"></span></a>XPath 表达式</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="步骤和轴"><a aria-hidden="true" tabindex="-1" href="#步骤和轴"><span class="icon icon-link"></span></a>步骤和轴</h3><div class="wrap-body">
<table>
<thead>
<tr>
<th>-</th>
<th>-</th>
<th>-</th>
<th>-</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>//</code></td>
<td><code>ul</code></td>
<td><code>/</code></td>
<td><code>a[@id='link']</code></td>
</tr>
<tr>
<td>Axis</td>
<td>Step</td>
<td>Axis</td>
<td>Step</td>
</tr>
</tbody>
</table>
<table><thead><tr><th>-</th><th>-</th><th>-</th><th>-</th></tr></thead><tbody><tr><td><code>//</code></td><td><code>ul</code></td><td><code>/</code></td><td><code>a[@id='link']</code></td></tr><tr><td>Axis</td><td>Step</td><td>Axis</td><td>Step</td></tr></tbody></table>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="前缀"><a aria-hidden="true" tabindex="-1" href="#前缀"><span class="icon icon-link"></span></a>前缀</h3><div class="wrap-body">
<table class="show-header">
<thead>
<tr>
<th>前缀</th>
<th>例子</th>
<th>意思是</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>//</code></td>
<td><code>//hr[@class='edge']</code></td>
<td>任何地方</td>
</tr>
<tr>
<td><code>/</code></td>
<td><code>/html/body/div</code></td>
<td></td>
</tr>
<tr>
<td><code>./</code></td>
<td><code>./div/p</code></td>
<td>相对的</td>
</tr>
</tbody>
</table><!--rehype:className=show-header-->
<table class="show-header"><thead><tr><th>前缀</th><th>例子</th><th>意思是</th></tr></thead><tbody><tr><td><code>//</code></td><td><code>//hr[@class='edge']</code></td><td>任何地方</td></tr><tr><td><code>/</code></td><td><code>/html/body/div</code></td><td></td></tr><tr><td><code>./</code></td><td><code>./div/p</code></td><td>相对的</td></tr></tbody></table>
<!--rehype:className=show-header-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="axes"><a aria-hidden="true" tabindex="-1" href="#axes"><span class="icon icon-link"></span></a>Axes</h3><div class="wrap-body">
<table class="show-header">
<thead>
<tr>
<th>Axis(轴)</th>
<th>例子</th>
<th>意思是</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>/</code></td>
<td><code>//ul/li/a</code></td>
<td>孩子</td>
</tr>
<tr>
<td><code>//</code></td>
<td><code>//[@id="list"]//a</code></td>
<td>后裔</td>
</tr>
</tbody>
</table><!--rehype:className=show-header-->
<table class="show-header"><thead><tr><th>Axis(轴)</th><th>例子</th><th>意思是</th></tr></thead><tbody><tr><td><code>/</code></td><td><code>//ul/li/a</code></td><td>孩子</td></tr><tr><td><code>//</code></td><td><code>//[@id="list"]//a</code></td><td>后裔</td></tr></tbody></table>
<!--rehype:className=show-header-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="xpath-predicates谓词"><a aria-hidden="true" tabindex="-1" href="#xpath-predicates谓词"><span class="icon icon-link"></span></a>XPath Predicates(谓词)</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="predicates谓词"><a aria-hidden="true" tabindex="-1" href="#predicates谓词"><span class="icon icon-link"></span></a>Predicates(谓词)</h3><div class="wrap-body">
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line line-number" line="1">//div<span class="token punctuation">[</span>true<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span>
@@ -380,7 +389,8 @@
<pre><code class="code-highlight"><span class="code-line line-number" line="1">//section[.//h1[@id='hi']]
</span></code></pre>
<p>如果它有一个具有 <code>id='hi'</code><code>&#x3C;h1></code> 后代,则返回 <code>&#x3C;section></code></p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="xpath-函数"><a aria-hidden="true" tabindex="-1" href="#xpath-函数"><span class="icon icon-link"></span></a>XPath 函数</h2><div class="wrap-body"><!--rehype:body-class=cols-2-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="xpath-函数"><a aria-hidden="true" tabindex="-1" href="#xpath-函数"><span class="icon icon-link"></span></a>XPath 函数</h2><div class="wrap-body">
<!--rehype:body-class=cols-2-->
</div></div><div class="h2wrap-body cols-2"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="节点功能"><a aria-hidden="true" tabindex="-1" href="#节点功能"><span class="icon icon-link"></span></a>节点功能</h3><div class="wrap-body">
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line line-number" line="1">name<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># //[starts-with(name(), 'h')]</span>
</span><span class="code-line line-number" line="2">text<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># //button[text()="Submit"]</span>
@@ -412,7 +422,8 @@
</span><span class="code-line line-number" line="2">number<span class="token punctuation">(</span><span class="token punctuation">)</span>
</span><span class="code-line line-number" line="3">boolean<span class="token punctuation">(</span><span class="token punctuation">)</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="xpath-axes"><a aria-hidden="true" tabindex="-1" href="#xpath-axes"><span class="icon icon-link"></span></a>XPath Axes</h2><div class="wrap-body"><!--rehype:body-class=cols-2-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="xpath-axes"><a aria-hidden="true" tabindex="-1" href="#xpath-axes"><span class="icon icon-link"></span></a>XPath Axes</h2><div class="wrap-body">
<!--rehype:body-class=cols-2-->
</div></div><div class="h2wrap-body cols-2"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="使用轴"><a aria-hidden="true" tabindex="-1" href="#使用轴"><span class="icon icon-link"></span></a>使用轴</h3><div class="wrap-body">
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line line-number" line="1">//ul/li <span class="token comment"># ul > li</span>
</span><span class="code-line line-number" line="2">//ul/child::li <span class="token comment"># ul > li (same)</span>
@@ -421,30 +432,30 @@
</span><span class="code-line line-number" line="5">//ul/ancestor-or-self::li <span class="token comment"># $('ul').closest('li')</span>
</span></code></pre>
<hr>
<table>
<thead>
<tr>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>//</code></td>
<td><code>ul</code></td>
<td><code>/child::</code></td>
<td><code>li</code></td>
</tr>
<tr>
<td>Axis</td>
<td>Step</td>
<td>Axis</td>
<td>Step</td>
</tr>
</tbody>
</table>
<table><thead><tr><th></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><code>//</code></td><td><code>ul</code></td><td><code>/child::</code></td><td><code>li</code></td></tr><tr><td>Axis</td><td>Step</td><td>Axis</td><td>Step</td></tr></tbody></table>
<p>表达式的步骤由 <code>/</code> 分隔,通常用于选择子节点。 这并不总是正确的:您可以使用 <code>::</code> 指定不同的“轴”。</p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="子轴"><a aria-hidden="true" tabindex="-1" href="#子轴"><span class="icon icon-link"></span></a>子轴</h3><div class="wrap-body">
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line line-number" line="1"><span class="token comment"># 都一样</span>
@@ -471,89 +482,92 @@
</span><span class="code-line line-number" line="2">//ul//<span class="token punctuation">[</span>last<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span>
</span><span class="code-line line-number" line="3">//ul/descendant-or-self::<span class="token punctuation">[</span>last<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="其他轴"><a aria-hidden="true" tabindex="-1" href="#其他轴"><span class="icon icon-link"></span></a>其他轴</h3><div class="wrap-body"><!--rehype:wrap-class=row-span-2-->
<table class="show-header">
<thead>
<tr>
<th>Axis</th>
<th>Abbrev</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>ancestor</code></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>ancestor-or-self</code></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>attribute</code></td>
<td><code>@</code></td>
<td><code>@href</code><code>attribute::href</code> 的缩写</td>
</tr>
<tr>
<td><code>child</code></td>
<td></td>
<td><code>div</code><code>child::div</code> 的缩写</td>
</tr>
<tr>
<td><code>descendant</code></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>descendant-or-self</code></td>
<td><code>//</code></td>
<td><code>//</code><code>/descendant-or-self::node()/</code>的缩写</td>
</tr>
<tr>
<td><code>namespace</code></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>self</code></td>
<td><code>.</code></td>
<td><code>.</code><code>self::node()</code> 的缩写</td>
</tr>
<tr>
<td><code>parent</code></td>
<td><code>..</code></td>
<td><code>..</code><code>parent::node()</code> 的缩写</td>
</tr>
<tr>
<td><code>following</code></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>following-sibling</code></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>preceding</code></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>preceding-sibling</code></td>
<td></td>
<td></td>
</tr>
</tbody>
</table><!--rehype:className=show-header-->
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="其他轴"><a aria-hidden="true" tabindex="-1" href="#其他轴"><span class="icon icon-link"></span></a>其他轴</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<table class="show-header"><thead><tr><th>Axis</th><th>Abbrev</th><th>Notes</th></tr></thead><tbody><tr><td><code>ancestor</code></td><td></td><td></td></tr><tr><td><code>ancestor-or-self</code></td><td></td><td></td></tr><tr><td><code>attribute</code></td><td><code>@</code></td><td><code>@href</code><code>attribute::href</code> 的缩写</td></tr><tr><td><code>child</code></td><td></td><td><code>div</code><code>child::div</code> 的缩写</td></tr><tr><td><code>descendant</code></td><td></td><td></td></tr><tr><td><code>descendant-or-self</code></td><td><code>//</code></td><td><code>//</code><code>/descendant-or-self::node()/</code>的缩写</td></tr><tr><td><code>namespace</code></td><td></td><td></td></tr><tr><td><code>self</code></td><td><code>.</code></td><td><code>.</code><code>self::node()</code> 的缩写</td></tr><tr><td><code>parent</code></td><td><code>..</code></td><td><code>..</code><code>parent::node()</code> 的缩写</td></tr><tr><td><code>following</code></td><td></td><td></td></tr><tr><td><code>following-sibling</code></td><td></td><td></td></tr><tr><td><code>preceding</code></td><td></td><td></td></tr><tr><td><code>preceding-sibling</code></td><td></td><td></td></tr></tbody></table>
<!--rehype:className=show-header-->
<p>您还可以使用其他轴。</p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="联合"><a aria-hidden="true" tabindex="-1" href="#联合"><span class="icon icon-link"></span></a>联合</h3><div class="wrap-body">
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line line-number" line="1">//a <span class="token operator">|</span> //span
</span></code></pre>
<p>使用 <code>|</code> 连接两个表达式。</p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="xpath-更多示例"><a aria-hidden="true" tabindex="-1" href="#xpath-更多示例"><span class="icon icon-link"></span></a>XPath 更多示例</h2><div class="wrap-body"><!--rehype:body-class=cols-2-->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="xpath-更多示例"><a aria-hidden="true" tabindex="-1" href="#xpath-更多示例"><span class="icon icon-link"></span></a>XPath 更多示例</h2><div class="wrap-body">
<!--rehype:body-class=cols-2-->
</div></div><div class="h2wrap-body cols-2"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="示例"><a aria-hidden="true" tabindex="-1" href="#示例"><span class="icon icon-link"></span></a>示例</h3><div class="wrap-body">
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line line-number" line="1">//* <span class="token comment"># 所有元素</span>
</span><span class="code-line line-number" line="2">count<span class="token punctuation">(</span>//*<span class="token punctuation">)</span> <span class="token comment"># 计算所有元素</span>
@@ -568,10 +582,8 @@
<p>查找直接包含 <code>h1#section-name</code><code>&#x3C;section></code></p>
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line line-number" line="1">//section<span class="token punctuation">[</span>//h1<span class="token punctuation">[</span>@id<span class="token operator">=</span><span class="token string">'section-name'</span><span class="token punctuation">]</span><span class="token punctuation">]</span>
</span></code></pre>
<p>
查找包含 <code>h1#section-name</code><code>&#x3C;section></code>
(与上面相同,但使用后代或自我而不是孩子)
</p>
<p>查找包含 <code>h1#section-name</code><code>&#x3C;section></code>
(与上面相同,但使用后代或自我而不是孩子)</p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="最近的"><a aria-hidden="true" tabindex="-1" href="#最近的"><span class="icon icon-link"></span></a>最近的</h3><div class="wrap-body">
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line line-number" line="1">./ancestor-or-self::<span class="token punctuation">[</span>@class<span class="token operator">=</span><span class="token string">"box"</span><span class="token punctuation">]</span>
</span></code></pre>
@@ -582,9 +594,8 @@
<p>查找 <code>&#x3C;item></code> 并检查其属性</p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="另见"><a aria-hidden="true" tabindex="-1" href="#另见"><span class="icon icon-link"></span></a>另见</h2><div class="wrap-body">
<ul>
<li><a href="https://devhints.io/xpath">Devhints</a> <em>(devhints.io)</em></li>
<li><a href="http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm">Xpath test bed</a> <em>(whitebeam.org)</em></li>
<li><a href="https://devhints.io/xpath">Devhints</a> <em>(devhints.io)</em></li>
<li><a href="http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm">Xpath test bed</a> <em>(whitebeam.org)</em></li>
</ul>
</div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>