{"componentChunkName":"component---src-templates-blog-post-js","path":"/vscode/","result":{"data":{"site":{"siteMetadata":{"title":"😏","author":"thoamsy"}},"markdownRemark":{"id":"f19f684c-3701-5ca7-8260-c4fac99f4bea","html":"<p>这篇文章主要是针对打算学习前端的小白，和想学点前端的后端大佬，为了提升你们的编码幸福感。</p>\n<blockquote>\n<p>工欲善其功，必先利其器</p>\n</blockquote>\n<p>简单介绍下背景，VSCode 是目前前端界最为流行的一款<strong>编辑器</strong>，每月一次的更新，强大的插件生态和 TypeScript 的整合，让这款编辑器瞬间风靡世界。像之前的 Sublime 和 GitHub 的 Atom，都无法与它抗衡。比如 <a href=\"https://vuejs.org\">Vue</a> 的作者 Evan You 也是用它作为主力开发工具。</p>\n<h2 id=\"准备工作\" style=\"position:relative;\"><a href=\"#%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C\" aria-label=\"准备工作 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>准备工作</h2>\n<p>第一步当然是下载 <a href=\"https://code.visualstudio.com/\">VSCode</a> 并安装。Window 用户印象中还需要下载一个 Git 的工具，无论你知不知道的 Git，以及 Git 和 GitHub 的区别，反正去<a href=\"https://git-scm.com/\">官网</a> 下载好这个并安装。如果你在终端（命令行）中输入</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">git</span> --version</code></pre></div>\n<p>会有一个版本号输出的话，就说明下载成功了。\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 800px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/0648f1f5a16dfb03dd0a812f5e030e05/a8979/DraggedImage.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 6.999999999999999%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'28\\'%3e%3cpath%20d=\\'M2%2014v14h398V0H248A2564%202564%200%200094%201L48%200H2v14m101-3l2%202-2%203-2%202h84a378%20378%200%200086-2c0%202%201%202%2014%202s14%200%2016-2l2-3-3-2c-2-3-3-3-16-3h-13v3l-1%203V8H101l2%203\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/0648f1f5a16dfb03dd0a812f5e030e05/ba381/DraggedImage.webp 200w,\n/static/0648f1f5a16dfb03dd0a812f5e030e05/7f61c/DraggedImage.webp 400w,\n/static/0648f1f5a16dfb03dd0a812f5e030e05/d00b9/DraggedImage.webp 800w,\n/static/0648f1f5a16dfb03dd0a812f5e030e05/92f8c/DraggedImage.webp 1200w,\n/static/0648f1f5a16dfb03dd0a812f5e030e05/fad48/DraggedImage.webp 1600w,\n/static/0648f1f5a16dfb03dd0a812f5e030e05/f13a9/DraggedImage.webp 1828w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/0648f1f5a16dfb03dd0a812f5e030e05/772e8/DraggedImage.png 200w,\n/static/0648f1f5a16dfb03dd0a812f5e030e05/e17e5/DraggedImage.png 400w,\n/static/0648f1f5a16dfb03dd0a812f5e030e05/5a190/DraggedImage.png 800w,\n/static/0648f1f5a16dfb03dd0a812f5e030e05/c1b63/DraggedImage.png 1200w,\n/static/0648f1f5a16dfb03dd0a812f5e030e05/29007/DraggedImage.png 1600w,\n/static/0648f1f5a16dfb03dd0a812f5e030e05/a8979/DraggedImage.png 1828w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/0648f1f5a16dfb03dd0a812f5e030e05/5a190/DraggedImage.png\"\n          alt=\"DraggedImage\"\n          title=\"DraggedImage\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span>\nMac 用户只要安装过 Xcode 或者开发者工具套件的话，就内置了 Git 的功能。之所以要安装 git 是因为 VS Code 的插件基于 Git 的支持。</p>\n<p>接着还需要安装，<a href=\"nodejs.org\">node</a>，<a href=\"https://yarnpkg.com/lang/en/\">yarn</a> 英文不好的同学也不要管那么多，看到 <strong>Install, Download</strong> 这种单词就点，下版本最高的就行。Window 用户的 node 需要下载的是一个 <code class=\"language-text\">.msi</code> 文件不是 <code class=\"language-text\">.exe</code> 文件，<code class=\"language-text\">msi</code> 文件能给 Window 环境写入一个二进制文件，而 <code class=\"language-text\">exe</code> 仅仅是一个 node 的 REPL 环境。</p>\n<blockquote>\n<p>因为作者本人对 Window 不够熟悉，很多描述是靠之前碰到过的坑，如果碰到问题的话，还请自己使用搜索引擎解决</p>\n</blockquote>\n<p>还是和之前一样，输入几个命令测试是否安装成功。</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">node -v\n<span class=\"token function\">yarn</span> why</code></pre></div>\n<p>在这两个都确定安装好后，继续输入</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">yarn</span> global <span class=\"token function\">add</span> eslint</code></pre></div>\n<p>Window 用户如果 Yarn 没有安装成功的话，就使用 npm 安装作为 B 计划</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">npm</span> <span class=\"token function\">install</span> -g eslint</code></pre></div>\n<p>安装好后，就会有打印出安装成功的 eslint 版本。<a href=\"http://eslint.cn/\">eslint</a> 是一个 JS 的静态分析器，它可以解决一些写 JS 经常遇到的问题：</p>\n<ol>\n<li>变量名写错了，但是没有报错。</li>\n<li>自己不想写分号，让它自动加</li>\n<li>强制要求格式的规范</li>\n<li>等等</li>\n</ol>\n<p>还有 <a href=\"https://www.typescriptlang.org/\">TypeScript</a> 这是微软开发的一个 JS 超集，安装它的目的主要是它能够为 VS Code 赋予更强的能力，让开发更爽。设置里面会有很多功能性开关，需要安装了指定版本的 typescript 才可以，所以我们安装最新的就是了。</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">yarn</span> global <span class=\"token function\">add</span> typescript\n// or\n<span class=\"token function\">npm</span> <span class=\"token function\">install</span> -g typescript</code></pre></div>\n<p>和上面一样，如果 yarn 没安装成功的话就是用 npm。在本文写作的时候，typescript 的版本为 <code class=\"language-text\">2.9.1</code>\n接下来就进入 VSCode 的流程。</p>\n<hr>\n<p>最基本的 VSCode 的侧边栏有五项\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 102px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/3acbbb2f132d7f0b2efc67f5e1a65f70/8e189/DraggedImage-1.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 525.4901960784314%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'2102\\'%3e%3cpath%20d=\\'M0%201051v1051h401V0H0v1051m170-925c-6%200-13%208-13%2012l1%204h30c30%200%2031%201%2032%203%200%202%202%204%2023%2027l5%207c1%201%202%202%206%202l5%201v46c0%2041%200%2047%202%2047%204%202%2013-6%2014-13v-92l-14-18a455%20455%200%2001-21-25c-3-2-56-3-70-1m-37%2033l-5%206-2%202v130l2%202c6%208%202%207%2056%208%2054%200%2051%200%2057-7l3-4v-97l-4-4-6-8-7-9-11-14-5-7h-75l-3%202m10%2015l-1%2058%201%2058h42l42-1a19036%2019036%200%20000-75l-14-1-15-1c-2%200-2-3-2-19l-1-19h-52m68%20345a692%20692%200%2001-19%206l-7%204c-5%202-17%2014-21%2020l-7%2015-2%206c-3%205-3%2028%200%2035l2%207%202%206c4%208%207%205-24%2036s-31%2031-30%2039c1%205%204%209%2010%2011%208%203%2010%201%2041-30l28-27%2010%203%203%202%204%202a81%2081%200%200047-2l4-2%204-2a90%2090%200%200021-19c4-4%2010-15%2010-18l2-6c3-6%203-29%200-34l-2-6c0-8-18-31-28-36a71%2071%200%2000-48-10m5%2021l-7%201c-7%201-14%205-21%2012-5%205-7%208-10%2014l-3%206c-2%204-2%2027%200%2030l2%204%204%207%205%206c1%202%2012%2011%2014%2011l5%202c5%203%2028%203%2033%200l6-2a54%2054%200%200020-21l3-4%202-6c3-4%202-19-1-26l-2-5c-4-10-12-20-22-24-7-4-24-7-28-5m-67%20363c-9%202-19%2011-19%2016l-1%205c-3%204-2%2012%200%2018%203%205%205%207%2012%2013l1%2014v13l22%2023%2022%2022v26l-5%204c-8%208-10%2013-9%2024%202%2011%206%2018%2014%2023%206%203%2023%203%2029%200%208-5%2013-13%2014-24%200-11-1-15-8-22l-5-5-1-13v-13l22-22%2022-23v-13l1-14c12-10%2017-21%2013-31l-2-6c-1-3-8-11-13-13-8-5-30-2-33%203l-2%203c-4%204-7%2013-7%2021%200%209%202%2015%209%2020%205%204%206%206%205%2016v8l-14%2014c-12%2012-14%2014-16%2013l-15-14-13-14-1-8c-1-9%200-10%206-15%206-6%208-11%208-20%200-21-16-33-36-29m2%2011c-6%202-13%2010-13%2017%200%204%205%2013%209%2015l3%202c2%202%2010%201%2014-1%2012-6%2013-22%202-31-3-2-10-3-15-2m89%200c-4%200-12%208-13%2013-1%208%203%2016%2010%2020%205%202%2012%203%2014%201l3-2c4-2%209-11%209-15s-4-12-8-15c-4-2-10-3-15-2m-47%20148c-8%204-12%2013-10%2021%206%2017%2029%2017%2034%200%205-14-11-28-24-21m-8%20226a118%20118%200%2000-44%2014%20124%20124%200%2000-43%2048%20111%20111%200%20002%2098l2%204a120%20120%200%200055%2046l6%202c5%203%2022%206%2035%205a94%2094%200%200038-7l6-2%204-2%202-1%204-2a118%20118%200%200046-55l2-6c2-2%205-20%205-32a101%20101%200%2000-7-41l-2-6-2-4-1-2-2-4a125%20125%200%2000-43-40c-2-2-10-6-13-6l-5-2c-4-3-34-7-45-5m-4%2018l-10%203-4%201a113%20113%200%2000-24%2012c-6%202-4%204%2060%2068%2047%2047%2063%2062%2064%2062%204%200%2013-16%2018-31%204-12%203-39%200-50a135%20135%200%2000-14-28%2086%2086%200%2000-50-35c-6-2-28-4-40-2m-11%2020c-2%204%200%207%203%207%204%200%205%202%205%2013v10l10%2010%2030%2029%2020%2020h10c10%200%2012%201%2012%205%200%203%203%205%208%204%202-1%202-1%202-10%200-7%200-10-2-13l-2-4h-16c-17%200-17%200-20-3-4-3-4-4%200-6%206-4%209-7%2010-13l1-5%207-1c10%200%2012-1%2012-3%200-4-2-5-12-5s-11%200-13-3c-3-2-3-3-3-13%200-11%200-11-3-12-4-1-5%201-5%2011v8l-6%201c-6%201-13%207-13%2010%200%204-3%204-6%200l-3-3v-33l-4-2c-3-2-6-2-13-2-9%200-9%200-9%203m-48%2017l-2%204a91%2091%200%2000-2%2096c5%2010%2013%2018%2028%2030a112%20112%200%200029%2012c5%202%2026%203%2035%202%2018-2%2042-14%2042-20%200-1-16-18-62-64-64-64-66-66-68-60m-4%2046c-3%200-4%202-4%208s1%208%205%208c2%200%203-1%203-4%200-4%203-5%2017-5s16%201%2013%205l-2%204-2%204c-3%206-3%2020%200%2024l2%203c0%202%208%207%2014%209%207%203%2020%202%2026-3s7-4%207%2012c0%2015-1%2017-5%2017-3%200-5%204-3%207%202%202%2014%202%2015-1l1-25v-23l-4-4-21-21-17-16h-22l-23%201m-7%20315l1%20170%2042%201h42v-36l-23-1c-19%200-23%200-24-2-2-1-2-4-2-48v-46l2-1c2-2%206-2%2018-2l16-1%201-18v-16l-37-1-36%201m86%2016l1%2019%2021-1%201-5%202-6h35c2%201%202%202%202%2018%200%2019%200%2020-6%2020-7%200-7%200-7%2012%200%209%200%2010%202%2011%203%202%2032%201%2034%200l1-43v-41l-43-1h-43v17m-36%2033c-1%202-2%2071%200%2072l71-1c2%200%201-69%200-71l-35-1-36%201m87%2050c-2%201-2%204-2%2016l-1%2017c-1%201-4%202-17%202-14%200-17%201-18%202l-1%2018c0%2016%200%2016%202%2017h72v-35l-1-37c-1-3-32-3-34%200\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/3acbbb2f132d7f0b2efc67f5e1a65f70/10e6b/DraggedImage-1.webp 102w\"\n          sizes=\"(max-width: 102px) 100vw, 102px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/3acbbb2f132d7f0b2efc67f5e1a65f70/8e189/DraggedImage-1.png 102w\"\n          sizes=\"(max-width: 102px) 100vw, 102px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/3acbbb2f132d7f0b2efc67f5e1a65f70/8e189/DraggedImage-1.png\"\n          alt=\"DraggedImage 1\"\n          title=\"DraggedImage 1\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span>\n其中第五个就是安装插件的一个 Tab，点开来，选择常用的拓展，就能看到根据安装量排序的拓展工具。\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 800px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/f20afe910439f6f7b19ca45e9cc848c3/64d87/DraggedImage-2.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'399\\'%3e%3cpath%20d=\\'M0%20199v200h10c8%200%209%200%209-2s2-4%205-4c3%201%204%203%200%203l-3%201c0%202%201%202%203%202%204%200%206-1%205-2l1-3h3c1-1%202-1%202%201v2c-2%201%201%202%206%202%204%200%204%200%204-2v-2l1%202c0%202%205%203%207%201l-1-1v-1c1-2%202-1%202%201l1%202%201-2%202-2c2%200%202%200%201%201l-1%201v1l4%201c4%200%205-1%206-2l-1-1h-2l2-1a1340%201340%200%2000167%204h167V0H13l-2%203C8%205%205%205%202%202c-2-2-2%208-2%20197M269%2021h-5v11h12v-5c0-7%200-7-7-6m-55%2025c-2%202-2%207-2%2034l-1%2031c-2-1-4%203-2%205l2%201%201%2021%201%2022h178v-57c0-55%200-57-2-58l-88-1h-86l-1%202m104%209l-1%206c0%202%200%202%201%200%202-3%203-3%203%200%200%202%201%203%202%201v-1l-1-2%203%202c3%203%204%203%204%200l-1-3-1-2%201-2%201-1c0-2-1-2-5-2h-6v4m1%2015l-1%206v4c2-3%203-2%203%200%200%201%200%202%202%201v-1l-1-2%204%202%203%201-1-1v-1l1-2h-1l-1-1%201-1v-2l1-3h-10m-42%2019l-1%2010%201-2c0-2%204-1%204%201l1%203v-3l2-2c2%200%203%201%201%203v1c1-1%202-2%202-6v-6h-5l-5%201m41%203l-1%206c0%202%200%202%201%200%202-3%203-3%203%200l2%202%201-1h-1l-1-1c0-3%201-2%204%200l2%202v-9c2-1%200-3-5-3h-5v4m0%2019l-1%206h1c2-3%203-2%203%200%200%201%200%202%202%201v-1l-1-2%204%202%203%201-1-1v-7l1-1c0-2-1-2-5-2h-6v4m-41%2015v5l-1%205c-1%201%201%201%205%201h6l-1-3v-4l1-2c-1-2-1-3-5-3l-5%201m41%205c-1%206%200%208%201%204%200-3%202-3%202%200l2%202%201-1h-1l-1-1c0-3%201-2%203%200%203%203%203%203%204-1l-1-2v-3c2-3%200-4-5-4h-5v6m0%2017l-1%206c0%202%200%202%201%200%202-3%203-3%203%200%200%202%201%203%202%201v-1l-1-2%203%202c3%203%204%203%204%200l-1-3-1-2%201-2%201-1c0-2-1-2-5-2h-6v4m-51%2015h-4c-2%202-2%203%200%205v6l1-1c0-3%202-2%203%200l1%202v-2l2-2v2l1%201c2%200%202-3%201-4v-2l2-2c0-2-3-4-4-3l-2-1c-1-1-1-1-1%201m-32%202l1%203%201%202h-1l-2-1%201%203c2%201%202%201%200%201-1%200-2%200-1%201l6%201%206-1-1-1v-2c0-2-1-3-2-1h-1l2-2%201-3c0-2-1-3-5-3-5%200-5%200-5%203m41%201l-1%206%201%202%202-2c0-2%202-2%203%200%200%202%200%202%201%200s3-3%203%200l-1%201v1c2%202%203%200%203-6v-6h-11v4m14-3l-1%206c0%205%200%205%203%205%202-1%202-1%202-3%200-3%201-4%203-1l2%201-1-3c-2-2-2-2%200-2s3%206%201%207c-2%200-2%202-1%202%205%200%205-10%201-11l-1-1-1-1-2%201c0%201-1%202-2%201v-1c0-2-1-1-3%200m28%205c-1%207%200%209%201%205l1-2v2c0%202%200%202%202%202l6-1h2l-1-1v-2l-1-2v-3l1-2c0-2-1-2-5-2h-6v6m-106%2014v5l-4-1c-4%200-4%200-5%205-1%203-1%203%201%202l2%201h1l2-1%201%201%201-1a678%20678%200%2001-4%20103c0%201%203%204%204%203l1%2031c0%2038%200%2036%2011%2036l6%201-2%201c-2%200-5%205-3%206l1%202%201%202h7c2%200%202%200%202-2-1-1-1-2%201-2v-2c-1-1-2-2-1-3l-2-1-2-1%2079-1%2080-1c1%200%202-178%201-186l-89-1h-90v4M3%20212v9l9-8%209-10H3v9m9%2052H3v9l1%208%2017-17h-9m320%2019l-1%206c0%202%200%202%201%200%202-3%203-3%203%200%200%202%201%203%202%201v-1l-1-2%203%202c3%203%204%203%204%200l-1-3v-5c1-1%200-2-5-2h-5v4m28%2049l-1%206h1c2-3%203-2%203%200%200%201%200%202%202%201v-1l-1-2%203%201c3%203%204%203%204%201l-1-3v-4l1-1c0-2-1-2-5-2h-6v4m-111%2015l-1%202v5c-1%204%200%206%201%202%201-3%204-3%204%200l1%203v-3l2-2c2%200%203%203%201%203v1c2%200%202-1%202-6v-6h-5l-5%201m55%205c-1%206%200%208%201%204%200-3%202-3%202%200l2%202v-4l2%202c3%203%203%203%204-1l-1-2v-3c2-3%200-4-5-4h-5v6\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/f20afe910439f6f7b19ca45e9cc848c3/ba381/DraggedImage-2.webp 200w,\n/static/f20afe910439f6f7b19ca45e9cc848c3/7f61c/DraggedImage-2.webp 400w,\n/static/f20afe910439f6f7b19ca45e9cc848c3/d00b9/DraggedImage-2.webp 800w,\n/static/f20afe910439f6f7b19ca45e9cc848c3/3a941/DraggedImage-2.webp 818w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/f20afe910439f6f7b19ca45e9cc848c3/772e8/DraggedImage-2.png 200w,\n/static/f20afe910439f6f7b19ca45e9cc848c3/e17e5/DraggedImage-2.png 400w,\n/static/f20afe910439f6f7b19ca45e9cc848c3/5a190/DraggedImage-2.png 800w,\n/static/f20afe910439f6f7b19ca45e9cc848c3/64d87/DraggedImage-2.png 818w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/f20afe910439f6f7b19ca45e9cc848c3/5a190/DraggedImage-2.png\"\n          alt=\"DraggedImage 2\"\n          title=\"DraggedImage 2\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span>\n如果真的想要好好运用 VSCode 的话，还是要自己多花费点时间在这些拓展上，找出几个真正适合你的。</p>\n<h2 id=\"美化一下\" style=\"position:relative;\"><a href=\"#%E7%BE%8E%E5%8C%96%E4%B8%80%E4%B8%8B\" aria-label=\"美化一下 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>美化一下</h2>\n<p>默认的 VSCode 还是蛮丑的，特别是底部蓝色的状态栏。显然需要美化一下, 从三个方面着手</p>\n<ol>\n<li>字体</li>\n<li>主题</li>\n<li>文件图标</li>\n</ol>\n<h3 id=\"字体\" style=\"position:relative;\"><a href=\"#%E5%AD%97%E4%BD%93\" aria-label=\"字体 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>字体</h3>\n<p>选一个好看的字体还是挺重要的，如果每天面对 Window 的 cmd 那种字体的话，写程序一定会十分痛苦。目前广受好评的一个开源字体是，<a href=\"https://github.com/tonsky/FiraCode\">Fira Code</a>, 好看是一方面，还支持一个特别神奇的 <em>font ligatures</em> 功能，它的效果就是能将你输入的一些特定的符号组合，换成另外一个更为<strong>写实风格</strong>的符号。比如我们常用的 <code class=\"language-text\">!=</code> 最后就长得和 <code class=\"language-text\">≠</code> 一样。 <span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 800px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 98%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'391\\'%3e%3cpath%20d=\\'M161%2018h1l5%201c1%201%200%201-4%201-6%200-6%200-5%203%202%207%2010%207%2012%201%201-3%201-4-2-6s-4-3-7%200M86%2033c-1%201%209%201%2028%201l29-1-28-1-29%201\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/34775835d427cb3f5ef2b4415bfc6afa/ba381/fira-code.webp 200w,\n/static/34775835d427cb3f5ef2b4415bfc6afa/7f61c/fira-code.webp 400w,\n/static/34775835d427cb3f5ef2b4415bfc6afa/d00b9/fira-code.webp 800w,\n/static/34775835d427cb3f5ef2b4415bfc6afa/92f8c/fira-code.webp 1200w,\n/static/34775835d427cb3f5ef2b4415bfc6afa/fad48/fira-code.webp 1600w,\n/static/34775835d427cb3f5ef2b4415bfc6afa/00324/fira-code.webp 1836w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/34775835d427cb3f5ef2b4415bfc6afa/772e8/fira-code.png 200w,\n/static/34775835d427cb3f5ef2b4415bfc6afa/e17e5/fira-code.png 400w,\n/static/34775835d427cb3f5ef2b4415bfc6afa/5a190/fira-code.png 800w,\n/static/34775835d427cb3f5ef2b4415bfc6afa/c1b63/fira-code.png 1200w,\n/static/34775835d427cb3f5ef2b4415bfc6afa/29007/fira-code.png 1600w,\n/static/34775835d427cb3f5ef2b4415bfc6afa/191e2/fira-code.png 1836w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/34775835d427cb3f5ef2b4415bfc6afa/5a190/fira-code.png\"\n          alt=\"fira code\"\n          title=\"fira code\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n    </span></p>\n<p>通过 GitHub 下载好字体文件后，安装到系统上。安装好后，进入 VSCode 的设置，设置 <code class=\"language-text\">editor.fontLigatures</code> 为 true，在 <code class=\"language-text\">editor.fontFamily</code> 的最前面加上 <code class=\"language-text\">&#39;Fira Code&#39;</code>，保存一下，去看看效果吧！</p>\n<h3 id=\"主题\" style=\"position:relative;\"><a href=\"#%E4%B8%BB%E9%A2%98\" aria-label=\"主题 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>主题</h3>\n<p>2 和 3 就不需要这些步骤了，通过按住 <code class=\"language-text\">Cmd/Ctrl</code>，接着看 K 和 T 两个键，就可以选择其他主题。不过自带的主题如果不过瘾的话，还可以下载其他主题，推荐安装一个 <em>Dracula</em></p>\n<p>而文件图标的效果就是让你的文件或者文件夹有一个小图标，提供辨识度。像这样 <span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 524px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/d76beb34e8f3330dbe8bb2368c55950a/664c8/file-icon.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 83%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'331\\'%3e%3cpath%20d=\\'M0%20166v165h401V0H0v166M47%2011v6h3c5%200%206-1%206-6%200-4-1-5-3-6-5-2-6-2-6%206m23-5c-4%203-2%2011%204%2011%205%200%207-7%203-11-2-2-4-2-7%200m0%2031v8l1%207h8c12%201%2014-1%2011-9-2-4-2-5-7-5l-5-1h-8m0%2033l-1%208%201%208h9c11%201%2012%200%2012-5l-1-4-1-3c0-2-1-2-5-2l-6-1c-1-2-6-2-8-1m0%2034l-1%208%201%207h5l9%202c4%200%208-3%207-6l-2-6c-1-3-1-4-6-4l-5-1h-8m0%2034l-1%207c0%208%200%208%208%208l5%201h1l3-1c3%200%205-4%204-6l-1-5c0-2-1-3-5-3l-5-1h-9m0%2033l-1%208c0%208%200%208%2011%209%208%200%2011-1%2011-8%200-5-2-8-8-8l-5-1h-8m8%2036c-6%206-9%2011-7%2014%203%205%2015-3%2013-8l-4-2c-3%200-3%200-1-2l4-4%203-2c0-2-2-1-8%204m30%205v8h4c5-1%207-4%205-8-2-3-3-3-5-3-2%201-2%200-2-2l-1-2-1%207m23%200v8h4c4%200%206-3%205-7%200-3-4-5-6-4-1%201-1%200-1-1l-1-3-1%207m-22%2066c-3%203-2%205%200%207%201%201%203%202%204%201l2%201-4%201c-3%200-3%200-2%202h7l1-8v-6h-3c-3%200-4%201-5%202m29%200c-3%203-2%205%200%207%201%201%203%202%204%201l2%201-4%201c-3%200-3%200-2%202h7l1-8v-6h-3c-3%200-4%201-5%202\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/d76beb34e8f3330dbe8bb2368c55950a/ba381/file-icon.webp 200w,\n/static/d76beb34e8f3330dbe8bb2368c55950a/7f61c/file-icon.webp 400w,\n/static/d76beb34e8f3330dbe8bb2368c55950a/1c5aa/file-icon.webp 524w\"\n          sizes=\"(max-width: 524px) 100vw, 524px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/d76beb34e8f3330dbe8bb2368c55950a/772e8/file-icon.png 200w,\n/static/d76beb34e8f3330dbe8bb2368c55950a/e17e5/file-icon.png 400w,\n/static/d76beb34e8f3330dbe8bb2368c55950a/664c8/file-icon.png 524w\"\n          sizes=\"(max-width: 524px) 100vw, 524px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/d76beb34e8f3330dbe8bb2368c55950a/664c8/file-icon.png\"\n          alt=\"file icon\"\n          title=\"file icon\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span>\n这个功能隐藏的比较深，需要直接去设置。按 F1，输入 <code class=\"language-text\">File Icon Theme</code> 就能找到，官方也提供了几个主题，但是不怎么全，也不是那么好看。本人推荐 <em>Material Icon Theme</em></p>\n<p>有了好看的编辑器，才有动力写出好看的代码。</p>\n<h2 id=\"安装插件\" style=\"position:relative;\"><a href=\"#%E5%AE%89%E8%A3%85%E6%8F%92%E4%BB%B6\" aria-label=\"安装插件 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>安装插件</h2>\n<p>先看看，需要配置的插件</p>\n<h3 id=\"eslint\" style=\"position:relative;\"><a href=\"#eslint\" aria-label=\"eslint permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ESLint</h3>\n<p>现在没有 ESLint 已经没法写 JS 代码了，我们不需要花太多时间在找自己的拼写错误导致的 bug 上。下载 VSCode 的 ESLint 插件后，重载 VSCode，打开设置，搜索 <em>eslint</em>。\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 800px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/e9220b82be80fb3c7b82126a19a0f78d/ea64c/DraggedImage-3.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 26.5%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'105\\'%3e%3cpath%20d=\\'M0%2053v52h401V0H226v19h-43l-1-10V0H0v53m51-25v9h44V19H51v9m0%2056v9h44V75H51v9\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/e9220b82be80fb3c7b82126a19a0f78d/ba381/DraggedImage-3.webp 200w,\n/static/e9220b82be80fb3c7b82126a19a0f78d/7f61c/DraggedImage-3.webp 400w,\n/static/e9220b82be80fb3c7b82126a19a0f78d/d00b9/DraggedImage-3.webp 800w,\n/static/e9220b82be80fb3c7b82126a19a0f78d/36c36/DraggedImage-3.webp 1116w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/e9220b82be80fb3c7b82126a19a0f78d/772e8/DraggedImage-3.png 200w,\n/static/e9220b82be80fb3c7b82126a19a0f78d/e17e5/DraggedImage-3.png 400w,\n/static/e9220b82be80fb3c7b82126a19a0f78d/5a190/DraggedImage-3.png 800w,\n/static/e9220b82be80fb3c7b82126a19a0f78d/ea64c/DraggedImage-3.png 1116w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/e9220b82be80fb3c7b82126a19a0f78d/5a190/DraggedImage-3.png\"\n          alt=\"DraggedImage 3\"\n          title=\"DraggedImage 3\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span>\n这里主要需要修改的几个配置。</p>\n<ul>\n<li><code class=\"language-text\">eslint.autoFixOnSave</code></li>\n<li>\n<p><code class=\"language-text\">eslint.packageManager</code></p>\n<p>其中第一个设置是可以在每次保存的时候，自动修复一些<strong>能自动修复</strong>的错误，比如少了分号，缩进不对等等… 注意 VSCode 的设置不能直接修改，需要复制到右边的用户设置区，来修改。通过点击左侧的那个 edit 图标就能复制到右侧，接着修改后再保存就能生效。\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 800px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/c145d6992b35b4c76d6b5de65dd7cac3/e996b/DraggedImage-4.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 13.999999999999998%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'56\\'%3e%3cpath%20d=\\'M0%2028v28h401V0H0v28m57%205l1%2010h46V23H57v10\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/c145d6992b35b4c76d6b5de65dd7cac3/ba381/DraggedImage-4.webp 200w,\n/static/c145d6992b35b4c76d6b5de65dd7cac3/7f61c/DraggedImage-4.webp 400w,\n/static/c145d6992b35b4c76d6b5de65dd7cac3/d00b9/DraggedImage-4.webp 800w,\n/static/c145d6992b35b4c76d6b5de65dd7cac3/c139f/DraggedImage-4.webp 1050w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/c145d6992b35b4c76d6b5de65dd7cac3/772e8/DraggedImage-4.png 200w,\n/static/c145d6992b35b4c76d6b5de65dd7cac3/e17e5/DraggedImage-4.png 400w,\n/static/c145d6992b35b4c76d6b5de65dd7cac3/5a190/DraggedImage-4.png 800w,\n/static/c145d6992b35b4c76d6b5de65dd7cac3/e996b/DraggedImage-4.png 1050w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/c145d6992b35b4c76d6b5de65dd7cac3/5a190/DraggedImage-4.png\"\n          alt=\"DraggedImage 4\"\n          title=\"DraggedImage 4\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span>\n第二个设置是根据你使用 yarn 还是 npm 安装 eslint 来确定的。如果使用的是 yarn，就改成 yarn；npm 保存不变。</p>\n</li>\n</ul>\n<p>eslint 通过一个<strong>规则文件</strong>驱动，可以叫做 <code class=\"language-text\">.eslintrc, .eslintrc.json, .eslintrc.js</code> 等等，刚开始的时候，你可能不知道 eslint 有哪些规则，这该怎么办？我们可以使用 eslint 默认的设置，来入门。</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">eslint --init</code></pre></div>\n<p>接着会需要你回答一些和偏好有关的问题</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">How would you like to configure ESLint?\n<span class=\"token operator\">></span> Answer questions about your style\n  Use a popular style guide\n  Inspect your JavaScript file<span class=\"token punctuation\">(</span>s<span class=\"token punctuation\">)</span></code></pre></div>\n<p>类似于这样的问题。用方向键控制，回车来确定。最简单的方式是：</p>\n<ol>\n<li>Answer questions about your style</li>\n<li>y</li>\n<li>y</li>\n<li>这个问题是根据你是在浏览器还是在 node 上</li>\n<li>这个问题是问你是否使用 CommonJS，如果不写 node 的话，选择 N</li>\n<li>Do you use JSX? 写 React 的话，就选 y</li>\n<li>Spaces</li>\n<li>Single</li>\n<li>根据电脑系统选择换行的组成。LF/CRLF</li>\n<li>y</li>\n<li>JSON\n根据我这个配置会生成如下配置代码</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"env\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"browser\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"es6\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"extends\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"eslint:recommended\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"parserOptions\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"sourceType\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"module\"</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"rules\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"indent\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"error\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"linebreak-style\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"error\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"unix\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"quotes\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"error\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"single\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"semi\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"error\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"always\"</span><span class=\"token punctuation\">]</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>注意 <code class=\"language-text\">indent</code> 这个 key，根据你的偏好来调整数字。4 表示的是 4 个空格。接着根据这个配置文件，eslint 就能发挥作用了。\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 800px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/56a79be7625a59306c6ee766158c9e6f/dd104/DraggedImage-5.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 36%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'144\\'%3e%3cpath%20d=\\'M0%2072v72h401V0H0v72m0-14\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/56a79be7625a59306c6ee766158c9e6f/ba381/DraggedImage-5.webp 200w,\n/static/56a79be7625a59306c6ee766158c9e6f/7f61c/DraggedImage-5.webp 400w,\n/static/56a79be7625a59306c6ee766158c9e6f/d00b9/DraggedImage-5.webp 800w,\n/static/56a79be7625a59306c6ee766158c9e6f/8c558/DraggedImage-5.webp 1064w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/56a79be7625a59306c6ee766158c9e6f/772e8/DraggedImage-5.png 200w,\n/static/56a79be7625a59306c6ee766158c9e6f/e17e5/DraggedImage-5.png 400w,\n/static/56a79be7625a59306c6ee766158c9e6f/5a190/DraggedImage-5.png 800w,\n/static/56a79be7625a59306c6ee766158c9e6f/dd104/DraggedImage-5.png 1064w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/56a79be7625a59306c6ee766158c9e6f/5a190/DraggedImage-5.png\"\n          alt=\"DraggedImage 5\"\n          title=\"DraggedImage 5\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span>\n像我这个代码就有很多波浪线出现，就是因为 eslint 在抗议了。第一个错误和第三个错误是因为我们在设置的时候没有选择 <code class=\"language-text\">commonJS</code> 导致的。<code class=\"language-text\">console.log</code> 下面会有波浪线是因为 <code class=\"language-text\">eslint:recommended</code> 的默认配置里，包含了一个选项\n<code class=\"language-text\">no-console: error</code>，意思就是语句中不能出现 <code class=\"language-text\">console</code>，否则就是 error（error 还是 warn 决定了能够成功编译文件，出现了 error 就不行）。调整的方法也很简单，在 <code class=\"language-text\">rules</code> 中添加一句 <code class=\"language-text\">no-console: &#39;off&#39;</code> 来覆盖这个设置就行。</p>\n<h3 id=\"code-runner\" style=\"position:relative;\"><a href=\"#code-runner\" aria-label=\"code runner permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Code Runner</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 800px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/6f4fbf287fa23b7fccd92a108843be15/d50e7/DraggedImage-6.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 35%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'140\\'%3e%3cpath%20d=\\'M0%2070v70h401V0H0v70m85-55c0%202%200%203%201%202%200-2%200-2%202%200h3c1%201%206%201%206-1s0-2%201-1c1%203%204%203%204%201l1-2v1l1%202h2c2%201%206%201%206-1l1-2c0-2-4-2-7-1h-1c-2-2-11-1-12%202-1%201-1%201-1-1l-1-2h-1c-2-3-5-1-5%203M32%2089c0%202%200%203%201%202l1-2%202%202h2c1%202%206%200%206-2h1c0%202%203%203%203%201%200-3%202-2%202%200%200%201%200%202%201%201h1c2%201%206%200%206-1l1-2c0-2-5-2-7-1h-6c-1-1-6%200-6%202h-1c-1-2-3-4-5-4s-2%201-2%204m-22%2015v2c1-1%201%200%200%200%200%202%201%202%204%202%204%200%205%200%205-2l1%201c1%202%201%203%2011%203h10v-7H26l-16%201m33%201l1%203a542%20542%200%200052-1v3h16v-7H43v2m71-1c0%203%201%204%208%204%206%200%207%200%207-2%201-1%201%200%201%201v3h21v-7h-18l-19%201m39%200c0%203%202%204%207%204%205%201%206%200%206-1%201-2%201-2%201%200v3h60v-7h-37l-37%201m76%201l1%202c0%202%2010%201%2010-1%201-1%201%200%201%201v3h19v-7h-16c-13%200-15%200-15%202\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/6f4fbf287fa23b7fccd92a108843be15/ba381/DraggedImage-6.webp 200w,\n/static/6f4fbf287fa23b7fccd92a108843be15/7f61c/DraggedImage-6.webp 400w,\n/static/6f4fbf287fa23b7fccd92a108843be15/d00b9/DraggedImage-6.webp 800w,\n/static/6f4fbf287fa23b7fccd92a108843be15/92f8c/DraggedImage-6.webp 1200w,\n/static/6f4fbf287fa23b7fccd92a108843be15/fad48/DraggedImage-6.webp 1600w,\n/static/6f4fbf287fa23b7fccd92a108843be15/c9495/DraggedImage-6.webp 2280w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/6f4fbf287fa23b7fccd92a108843be15/772e8/DraggedImage-6.png 200w,\n/static/6f4fbf287fa23b7fccd92a108843be15/e17e5/DraggedImage-6.png 400w,\n/static/6f4fbf287fa23b7fccd92a108843be15/5a190/DraggedImage-6.png 800w,\n/static/6f4fbf287fa23b7fccd92a108843be15/c1b63/DraggedImage-6.png 1200w,\n/static/6f4fbf287fa23b7fccd92a108843be15/29007/DraggedImage-6.png 1600w,\n/static/6f4fbf287fa23b7fccd92a108843be15/d50e7/DraggedImage-6.png 2280w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/6f4fbf287fa23b7fccd92a108843be15/5a190/DraggedImage-6.png\"\n          alt=\"DraggedImage 6\"\n          title=\"DraggedImage 6\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span>\n这个插件的功能是通过调用的系统的二进制文件，来直接运行代码，类似于 IDE 中的编译运行。不过在真正使用之前还需要稍微配置一下，在用户设置中搜索，<code class=\"language-text\">code-runner</code>，可以看到搜索出来的结果。\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 800px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/705799511d2df6c9957faea510f32273/bb072/DraggedImage-7.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 67.5%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'269\\'%3e%3cpath%20d=\\'M0%20135v134h401V0H0v135m27-90v8h68V37H27v8m0%2048v7h68V85H27v8m0%2047v8h68v-16H27v8m0%2047v8h68v-16H27v8m33%2056H27v15h68v-7l-1-8H60\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/705799511d2df6c9957faea510f32273/ba381/DraggedImage-7.webp 200w,\n/static/705799511d2df6c9957faea510f32273/7f61c/DraggedImage-7.webp 400w,\n/static/705799511d2df6c9957faea510f32273/d00b9/DraggedImage-7.webp 800w,\n/static/705799511d2df6c9957faea510f32273/92f8c/DraggedImage-7.webp 1200w,\n/static/705799511d2df6c9957faea510f32273/7f2f3/DraggedImage-7.webp 1318w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/705799511d2df6c9957faea510f32273/772e8/DraggedImage-7.png 200w,\n/static/705799511d2df6c9957faea510f32273/e17e5/DraggedImage-7.png 400w,\n/static/705799511d2df6c9957faea510f32273/5a190/DraggedImage-7.png 800w,\n/static/705799511d2df6c9957faea510f32273/c1b63/DraggedImage-7.png 1200w,\n/static/705799511d2df6c9957faea510f32273/bb072/DraggedImage-7.png 1318w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/705799511d2df6c9957faea510f32273/5a190/DraggedImage-7.png\"\n          alt=\"DraggedImage 7\"\n          title=\"DraggedImage 7\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span>\n有很多的配置，可能很让人头大，但是先别慌，找几个我们要用的就行。</p>\n<ul>\n<li><code class=\"language-text\">clearPreviousOutPut</code></li>\n<li><code class=\"language-text\">runInTerminal</code></li>\n<li><code class=\"language-text\">saveFileBeforeRun</code> or <code class=\"language-text\">saveAllFilesBeforeRun</code></li>\n</ul>\n<p>第一个的意思就是每次运行会清楚之前的输入，看个人喜好吧，我是觉得清楚一下会更好。第二个就是在自己系统的终端中运行这个，好处是可以直接打通我们<strong>心爱的终端</strong>，而且如果不配置这个的话，Window 会出现一些奇怪的问题，强烈推荐。</p>\n<p>第三个的意思是，运行之前保存当前文件和运行之前保存所有文件，自己选择一个设置为 True 就行。为什么需要这个？因为我们经常会碰到写完代码就去运行，但是发现自己忘记保存的情况，结果还是之前的结果。JS 的通过 node 来运行的，在我们安装后这个插件并重启后，新建一个 js 文件。比如像我下面是一个生成 HTML 模板的代码,</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const</span> <span class=\"token function-variable function\">template</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">title<span class=\"token punctuation\">,</span> content</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">\n  &lt;section>\n\t&lt;h1></span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>title<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">&lt;/h1>\n\t&lt;article></span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>content<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">&lt;/article>\n  &lt;/section>\n</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> config <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n  <span class=\"token punctuation\">{</span> title<span class=\"token operator\">:</span> <span class=\"token string\">'I can run js'</span><span class=\"token punctuation\">,</span> article<span class=\"token operator\">:</span> <span class=\"token string\">'Very Cool!'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span> title<span class=\"token operator\">:</span> <span class=\"token string\">'I can run everything'</span><span class=\"token punctuation\">,</span> article<span class=\"token operator\">:</span> <span class=\"token string\">'Really Cool!'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> theHtml <span class=\"token operator\">=</span> config\n  <span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> title<span class=\"token punctuation\">,</span> content <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">template</span><span class=\"token punctuation\">(</span>title<span class=\"token punctuation\">,</span> content<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">join</span><span class=\"token punctuation\">(</span><span class=\"token string\">'\\n'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>theHtml<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>之后点击右上角的的这个播放键\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 274px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/ce984e911a270f3bb175a39451ef4564/d3fa7/DraggedImage-8.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 30.5%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'123\\'%3e%3cpath%20d=\\'M0%2062v61h401V0H0v62m243%2012v17h41V56h-41v18M79%2059l-2%203%202%202%204%202c2%200%202%201%202%203%200%201%204%205%207%205%202%201%203%205%201%205-3%201-5%200-5-2l-2-3c-2-2-2-2-2%203l1%207c1%201%200%204-2%204-3%200-4-2-3-5%203-2%202-9%200-13-4-8-4-8-11-1l-6%208c0%202%2018%2020%2020%2020l10-10c12-11%2012-9-1-22-9-9-10-9-13-6m76%200c-2%201-1%2031%200%2032%202%200%2026-12%2029-15%203-2%202-3-16-12-11-6-12-7-13-5m91%2018v11h14V65h-14v12m20%200v11h15V65h-15v12\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/ce984e911a270f3bb175a39451ef4564/ba381/DraggedImage-8.webp 200w,\n/static/ce984e911a270f3bb175a39451ef4564/c6d10/DraggedImage-8.webp 274w\"\n          sizes=\"(max-width: 274px) 100vw, 274px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/ce984e911a270f3bb175a39451ef4564/772e8/DraggedImage-8.png 200w,\n/static/ce984e911a270f3bb175a39451ef4564/d3fa7/DraggedImage-8.png 274w\"\n          sizes=\"(max-width: 274px) 100vw, 274px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/ce984e911a270f3bb175a39451ef4564/d3fa7/DraggedImage-8.png\"\n          alt=\"DraggedImage 8\"\n          title=\"DraggedImage 8\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span>\n就能看到 <code class=\"language-text\">console.log</code> 的结果被打印出来。\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 800px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/701358a41d5df7b22b23a24cc6fc90f2/914c7/DraggedImage-9.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 41%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'164\\'%3e%3cpath%20d=\\'M0%2082v82h401V0H0v82m0%201\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/701358a41d5df7b22b23a24cc6fc90f2/ba381/DraggedImage-9.webp 200w,\n/static/701358a41d5df7b22b23a24cc6fc90f2/7f61c/DraggedImage-9.webp 400w,\n/static/701358a41d5df7b22b23a24cc6fc90f2/d00b9/DraggedImage-9.webp 800w,\n/static/701358a41d5df7b22b23a24cc6fc90f2/0e613/DraggedImage-9.webp 978w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/701358a41d5df7b22b23a24cc6fc90f2/772e8/DraggedImage-9.png 200w,\n/static/701358a41d5df7b22b23a24cc6fc90f2/e17e5/DraggedImage-9.png 400w,\n/static/701358a41d5df7b22b23a24cc6fc90f2/5a190/DraggedImage-9.png 800w,\n/static/701358a41d5df7b22b23a24cc6fc90f2/914c7/DraggedImage-9.png 978w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/701358a41d5df7b22b23a24cc6fc90f2/5a190/DraggedImage-9.png\"\n          alt=\"DraggedImage 9\"\n          title=\"DraggedImage 9\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span></p>\n<p>Code Runner 不仅仅支持 JS。我们需要这个功能可能是为了学习新语法，也可能是测试某个算法。显然使用 node REPL 或者在浏览器的 console 里写一大串代码是一个很愚蠢的行为。</p>\n<h3 id=\"prettier\" style=\"position:relative;\"><a href=\"#prettier\" aria-label=\"prettier permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Prettier</h3>\n<p>这个是最近一年最火的格式化工具，能够将你写成 💩 一样的 JS 也能格式成十分漂亮的代码（前提是没有语法没错）。同时也支持 HTML，CSS，JSON，Markdown 等等文件。\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 800px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/ec5e2d1128d5525805b70ec49d5bd3f4/90eea/DraggedImage-10.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 17.5%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'71\\'%3e%3cpath%20d=\\'M0%2036v35h401V0H0v36\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/ec5e2d1128d5525805b70ec49d5bd3f4/ba381/DraggedImage-10.webp 200w,\n/static/ec5e2d1128d5525805b70ec49d5bd3f4/7f61c/DraggedImage-10.webp 400w,\n/static/ec5e2d1128d5525805b70ec49d5bd3f4/d00b9/DraggedImage-10.webp 800w,\n/static/ec5e2d1128d5525805b70ec49d5bd3f4/92f8c/DraggedImage-10.webp 1200w,\n/static/ec5e2d1128d5525805b70ec49d5bd3f4/fad48/DraggedImage-10.webp 1600w,\n/static/ec5e2d1128d5525805b70ec49d5bd3f4/e7a4f/DraggedImage-10.webp 2254w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/ec5e2d1128d5525805b70ec49d5bd3f4/772e8/DraggedImage-10.png 200w,\n/static/ec5e2d1128d5525805b70ec49d5bd3f4/e17e5/DraggedImage-10.png 400w,\n/static/ec5e2d1128d5525805b70ec49d5bd3f4/5a190/DraggedImage-10.png 800w,\n/static/ec5e2d1128d5525805b70ec49d5bd3f4/c1b63/DraggedImage-10.png 1200w,\n/static/ec5e2d1128d5525805b70ec49d5bd3f4/29007/DraggedImage-10.png 1600w,\n/static/ec5e2d1128d5525805b70ec49d5bd3f4/90eea/DraggedImage-10.png 2254w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/ec5e2d1128d5525805b70ec49d5bd3f4/5a190/DraggedImage-10.png\"\n          alt=\"DraggedImage 10\"\n          title=\"DraggedImage 10\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span>\n为了体现它的强大，我们需要去改一些配置。和之前一样，在设置中搜索 <code class=\"language-text\">format</code>，找到</p>\n<ul>\n<li><code class=\"language-text\">editor.foramtOnPaste</code></li>\n<li><code class=\"language-text\">editor.formatOnSave</code></li>\n<li><code class=\"language-text\">editor.formatOnType</code></li>\n</ul>\n<p>解释已经有中文了，全部设置为 true 就行。至于开启它们的效果，只能自己去好好体会了。<strong>写一点缩进比较烂的代码，接着保存，所有的代码就被格式化了。</strong></p>\n<hr>\n<p>不需要配置的插件</p>\n<h3 id=\"bracket-pair-colorizer\" style=\"position:relative;\"><a href=\"#bracket-pair-colorizer\" aria-label=\"bracket pair colorizer permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Bracket Pair Colorizer</h3>\n<p>如果仅仅看它的介绍的话，这个插件是一个会将你的 <code class=\"language-text\">([{}])</code> 这些使用不同的颜色区分出来，提升鉴别度。\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 374px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/b9913877db7acc2c61cdb0f6bb6ddf86/52dba/DraggedImage-11.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 24.5%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'98\\'%3e%3cpath%20d=\\'M0%2049v49h401V0H0v49m41%2016l1%2027h152l153%201V37h-23v4l-1%2026v24H63l-1-27V37H41v28m2%200v25h18V39H43v26m8-16c-4%204-6%2012-6%2016l1%204c1%203%207%2011%209%2011s1-3-1-4c-6-5-6-19%200-26%202-3%203-5%201-5l-4%204m44%200c-8%209-7%2025%202%2030%203%202%204%200%201-2-6-7-7-18-1-26l3-6-5%204m18-3v18l1%2016h4c5%200%206-2%201-3l-2-1-1-13V49h3l4-2c0-2-9-3-10-1m48%201l-1%207c0%206-1%206-3%207-3%201-3%202%200%203%202%201%203%202%203%208l1%207h6l-2-2c-3-1-3-2-3-14s1-14%203-15l2-2c0-2-5-1-6%201m22-1c-1%201-2%203-2%208%200%206-1%207-3%207-3%200-3%203%201%203%202%201%202%201%202%207%200%207%201%209%205%209h4l-3-2c-3-3-3-3-3-8V54c0-5%200-5%202-6l3-2h-6m16%200l2%202c3%201%203%201%202%206l1%207v3l-1%206c1%206%201%206-2%207-4%202-2%204%202%203%203-1%203-1%203-9%200-5%201-6%203-6%203-2%203-4-1-4-2-1-2-1-2-7%201-4%201-6-1-7-1-2-6-3-6-1m22%200l2%202c2%201%202%202%202%207l1%207v1l-1%207c0%206%200%207-2%208-3%200-3%202%200%202%204%200%205-2%205-9%200-6%200-6%203-7%203%200%203-3%200-3-2%200-3-1-3-7%200-5-1-7-2-8h-5m45%200c-1%202%200%203%203%203h2v28h-3c-2%200-3%201-3%202l5%201h4V45h-4l-4%201m22%200l2%203c2%202%205%209%205%2014%200%204-3%2011-5%2013-2%201-3%204-1%204%201%200%207-6%208-9V55c-1-3-7-10-8-10l-1%201M135%2063v16h5l4-1-3-1h-3V48h3l3-1-4-1h-5v17\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/b9913877db7acc2c61cdb0f6bb6ddf86/ba381/DraggedImage-11.webp 200w,\n/static/b9913877db7acc2c61cdb0f6bb6ddf86/ad40e/DraggedImage-11.webp 374w\"\n          sizes=\"(max-width: 374px) 100vw, 374px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/b9913877db7acc2c61cdb0f6bb6ddf86/772e8/DraggedImage-11.png 200w,\n/static/b9913877db7acc2c61cdb0f6bb6ddf86/52dba/DraggedImage-11.png 374w\"\n          sizes=\"(max-width: 374px) 100vw, 374px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/b9913877db7acc2c61cdb0f6bb6ddf86/52dba/DraggedImage-11.png\"\n          alt=\"DraggedImage 11\"\n          title=\"DraggedImage 11\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span>\n可以看到这些括号都是彩色的。当然如果仅仅只是这么一个花哨的功能的话，对编码幸福感提升不大。其实我最看重的是它的<strong>范围高亮功能</strong>，嗯这个名字是我乱取的。就像这样：\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 448px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/1ce670f817f4157b59c32b142b47fd99/33b38/DraggedImage-12.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 54.49999999999999%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'218\\'%3e%3cpath%20d=\\'M0%20109v109h401V0H0v109m319-71v23H46v140h18v-46H48V62h289v-3c0-3%200-4%202-4s2-1%202-16%200-16-2-16-2-1-2-3v-4h-18v22m2%200v22h15V18l-8-1h-7v21m-64-7l-7%202c-1%201-2%207%200%208v2c-1%202%201%204%204%204%204%200%206%202%205%204h-8c-2-3-3-1-2%201s2%202%206%202c9%200%2011-8%201-9-4-1-5-2-1-3%205%200%206-2%206-6-1-2-1-3%201-3%201%200%202-2%200-2h-5m-76%201c-8%202-7%2016%201%2016%206%200%209-6%207-12-1-3-5-5-8-4m19%200h-4l-1%208c0%2010%202%2011%203%201%200-6%201-7%203-7h3v7c0%206%200%207%202%207l1-8c-1-8-2-10-7-8M69%2034c-6%208%202%2018%209%2012%205-5%202-14-4-14-3%200-4%201-5%202m199%2040c-1%201%200%202%202%202s2%201%202%208%200%208-2%208l-2%201c-1%201%201%201%205%201l7-1-2-1c-3%200-3%200-3-8%200-7%200-8%202-8l3-2c0-1-11-2-12%200m-72%207c-5%206%201%2016%209%2013%203-1%202-3-2-2-3%200-4%200-5-2-2-3-1-3%205-3%204%200%205%200%205-2%200-3-4-7-7-7-2%200-4%201-5%203m127-2c-2%201%200%202%203%201%202%200%205%201%205%203l-4%202c-6%201-8%205-4%208%202%201%203%202%204%201h5c3%200%203%200%202-6%200-8-2-10-7-10l-4%201m17%207c0%206%200%208%202%208l1-6c0-6%200-6%203-7%203-2%204%200%204%207%200%205%200%206%202%206%201%200%202-9%200-13-1-3-6-4-8-2h-1l-1-1c-2%200-2%202-2%208m-72%2035l2%201c3%200%203%2016%200%2016-5%201-2%203%204%203l6-1-3-2c-2%200-2-1-2-8%200-8%200-8%203-8l2-1-7-1c-4%200-6%200-5%201m-72%205c-6%207%201%2018%209%2014%203-1%202-2-1-2-2%201-4%201-5-1-3-2-2-3%204-3%205%200%205%200%205-3s-4-7-7-7l-5%202m128-1c-2%201-1%202%203%202%205%201%206%204%201%204l-5%202c-5%204%201%2010%207%207h3c1%202%202%200%201-7-1-8-4-11-10-8m17%200c-2%201-1%2016%200%2016%202%200%202-2%202-6%201-7%202-9%205-8%202%201%202%202%202%208%200%208%202%208%203-1%200-8-2-11-7-9h-5M48%20179v21h14v-43H48v22m3-16c0%201%201%202%203%202h2v23h-2c-2%200-3%201-3%202l4%201h4v-28l-4-1-4%201\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/1ce670f817f4157b59c32b142b47fd99/ba381/DraggedImage-12.webp 200w,\n/static/1ce670f817f4157b59c32b142b47fd99/7f61c/DraggedImage-12.webp 400w,\n/static/1ce670f817f4157b59c32b142b47fd99/76be4/DraggedImage-12.webp 448w\"\n          sizes=\"(max-width: 448px) 100vw, 448px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/1ce670f817f4157b59c32b142b47fd99/772e8/DraggedImage-12.png 200w,\n/static/1ce670f817f4157b59c32b142b47fd99/e17e5/DraggedImage-12.png 400w,\n/static/1ce670f817f4157b59c32b142b47fd99/33b38/DraggedImage-12.png 448w\"\n          sizes=\"(max-width: 448px) 100vw, 448px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/1ce670f817f4157b59c32b142b47fd99/33b38/DraggedImage-12.png\"\n          alt=\"DraggedImage 12\"\n          title=\"DraggedImage 12\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span>\n注意到了吗，这对 <code class=\"language-text\">[]</code> 之间是一条折线，来表明这个括号所表示的范围。这个功能在较长代码和嵌套的时候，特别有用。</p>\n<h3 id=\"auto-close-tag\" style=\"position:relative;\"><a href=\"#auto-close-tag\" aria-label=\"auto close tag permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Auto Close Tag</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 498px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/f042e1918db50d4f0fe60e49be37b59f/79e1b/DraggedImage-13.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 30%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'120\\'%3e%3cpath%20d=\\'M0%2060v60h401V0H0v60m25-37l-5%2013c0%202%203%201%204-1%200-1%201-2%203-2l3%202c0%202%203%203%203%201%200-7-6-16-8-13m34%204c-4%204-1%2010%204%2010%204%200%207-7%203-10-2-3-5-2-7%200m40%200c-4%204-1%2010%204%2010%204%200%207-7%203-10-2-3-5-2-7%200m69-1c-2%201-3%207%200%209%201%202%202%202%204%201s3%200%201%202h-4c-2-1-3%200-2%202%202%201%207%201%208-1%202-1%202-3%202-7%200-6-1-9-3-6h-6m11%2028c0%202%200%203-2%202-5-1-7%205-5%209%201%202%202%202%205%202h4v-8l-1-7-1%202m13%200c0%202%200%203-3%202-3%200-5%202-5%206s2%205%206%205h4v-8l-1-7-1%202m41-1v14l1-5%201-5%201%205c3%206%204%206%207%200l2-4v4c0%208%202%206%202-2%200-9-1-10-5-2l-3%206-2-5c-2-6-3-7-4-6m51%200v14l1-5%201-4%202%204%203%205%203-5%202-4v4l1%205%201-7c0-11-1-10-6%202-1%202-1%202-3-3-3-5-4-7-5-6m80%2026c-1%202-1%202-3%201s-4%201-3%203%201%202-1%203l-2%202%202%202c2%201%202%201%201%203s1%204%203%203%202-1%203%201l2%202%202-2c1-2%201-2%203-1s4-1%203-3-1-2%201-3c3%200%203-3%200-4-2-1-2-1-1-3s-1-4-3-3-2%201-3-1c-1-3-4-3-4%200\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/f042e1918db50d4f0fe60e49be37b59f/ba381/DraggedImage-13.webp 200w,\n/static/f042e1918db50d4f0fe60e49be37b59f/7f61c/DraggedImage-13.webp 400w,\n/static/f042e1918db50d4f0fe60e49be37b59f/71ce1/DraggedImage-13.webp 498w\"\n          sizes=\"(max-width: 498px) 100vw, 498px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/f042e1918db50d4f0fe60e49be37b59f/772e8/DraggedImage-13.png 200w,\n/static/f042e1918db50d4f0fe60e49be37b59f/e17e5/DraggedImage-13.png 400w,\n/static/f042e1918db50d4f0fe60e49be37b59f/79e1b/DraggedImage-13.png 498w\"\n          sizes=\"(max-width: 498px) 100vw, 498px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/f042e1918db50d4f0fe60e49be37b59f/79e1b/DraggedImage-13.png\"\n          alt=\"DraggedImage 13\"\n          title=\"DraggedImage 13\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span></p>\n<p>这个不解释了，就是自动帮你填充对应的 Tag。如果你对 emmet 用的很熟练的话，这个插件可能出场率不高。</p>\n<h3 id=\"auto-rename-tag\" style=\"position:relative;\"><a href=\"#auto-rename-tag\" aria-label=\"auto rename tag permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Auto Rename Tag</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 800px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/d9451876d2a67a0beb4a8ad48cf93f0a/203d3/DraggedImage-14.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 25.5%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'103\\'%3e%3cpath%20d=\\'M0%2052v51h401V0H0v52m160-35c0%202%200%207%202%207l1-3%201-3%201%203%202%204%201-4c0-4%202-4%202%200s2%205%203%202l1-1c0%203%204%204%206%202%201-2%201-2-1-1l-3-1%203-1c2%200%202%200%202-2-1-3-6-4-7-2%200%202%200%202-2%201-2-2-11-2-12-1M4%2028l27%201%2026-1-26-1-27%201m3%2019l3%201H7l-3%201a704%20704%200%200059-2l-30-1-26%201\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/d9451876d2a67a0beb4a8ad48cf93f0a/ba381/DraggedImage-14.webp 200w,\n/static/d9451876d2a67a0beb4a8ad48cf93f0a/7f61c/DraggedImage-14.webp 400w,\n/static/d9451876d2a67a0beb4a8ad48cf93f0a/d00b9/DraggedImage-14.webp 800w,\n/static/d9451876d2a67a0beb4a8ad48cf93f0a/92f8c/DraggedImage-14.webp 1200w,\n/static/d9451876d2a67a0beb4a8ad48cf93f0a/0ee79/DraggedImage-14.webp 1322w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/d9451876d2a67a0beb4a8ad48cf93f0a/772e8/DraggedImage-14.png 200w,\n/static/d9451876d2a67a0beb4a8ad48cf93f0a/e17e5/DraggedImage-14.png 400w,\n/static/d9451876d2a67a0beb4a8ad48cf93f0a/5a190/DraggedImage-14.png 800w,\n/static/d9451876d2a67a0beb4a8ad48cf93f0a/c1b63/DraggedImage-14.png 1200w,\n/static/d9451876d2a67a0beb4a8ad48cf93f0a/203d3/DraggedImage-14.png 1322w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/d9451876d2a67a0beb4a8ad48cf93f0a/5a190/DraggedImage-14.png\"\n          alt=\"DraggedImage 14\"\n          title=\"DraggedImage 14\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span></p>\n<p>和上面一个算是兄弟插件吧。嗯，作者也是同一个人。作用很明显，自动帮你改对应的 tag！同样的，如果你的结构比较复杂的话，这个还是会有点小 bug 的话，不过在时间的节省上，这个插件显然是必装的。emmet 也提供了这个功能，搜索 <code class=\"language-text\">emmet: update tag</code>，这个功能的稳定性应该会高于这个插件，但是要主动去设置快捷键。</p>\n<h3 id=\"html-css-support\" style=\"position:relative;\"><a href=\"#html-css-support\" aria-label=\"html css support permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>HTML CSS Support</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 494px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/bdab489283bc25b9e8067114fcb87cbe/d72d4/DraggedImage-15.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 28.500000000000004%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'115\\'%3e%3cpath%20d=\\'M0%2058v57h11l11-1%202-1%201%201%2023%201a103%20103%200%200029-2l6%201a91%2091%200%200029%200h22l134%201h133V0H0v58m16-38c0%206%200%207%202%207l1-3c0-3%200-3%204-3%203%200%203%200%203%203%200%202%201%203%202%203l1-7-1-8c-1%200-2%201-2%203%200%203%200%203-3%203-4%200-4%200-4-3l-1-3c-2%200-2%202-2%208m31-7c-2%201-1%2014%201%2014l1-5v-4l2%203c3%207%204%207%206%202l2-4v4c0%203%200%204%202%204l1-7c0-10-2-11-5-3l-3%206-1-3-2-5c-1-3-3-4-4-2m54%200c-4%202-2%206%202%208l4%202c0%202-3%202-4%201-2-1-4-1-4%201%200%203%209%204%2011%200%201-3%200-5-4-7l-4-2h8c0-3-6-5-9-3m14%201c-3%202-2%206%203%207%203%201%204%204%201%204l-2-1h-4l2%203c6%203%2013-3%208-7l-4-2-3-1c0-2%203-2%205-1h3c0-4-7-5-9-2m20-1c-4%202-2%206%202%208l4%202c0%202-3%202-4%201-2-1-4-1-4%201%200%203%209%204%2011%200%201-3%200-5-4-7l-4-2h8c0-3-6-5-9-3m25%2011c0%206%200%207%202%207l1-2c0-2%200-3%203-2%204%200%205-1%205-6%200-4-1-5-7-5h-4v8m14%200c0%206%200%207%202%207l1-2c0-2%200-3%203-2%203%200%205-2%205-5%200-4-2-6-7-6h-4v8m15-6c-4%203-2%209%203%209%204%200%206-2%206-5%200-6-6-8-9-4m65%2027c0%202%200%203-3%202-3%200-5%202-5%206s2%205%206%205h4v-8l-1-7c-1-1-1%200-1%202m-44%206l1%207%201-5v-5l2%205c3%206%204%206%206%200l3-5v5l1%205%201-7c0-10-2-11-5-2l-2%206-3-6c-4-8-5-8-5%202M87%2055l1%207%201-2c0-2%200-3%203-2%203%200%205-2%205-5%200-5-2-6-6-6h-4v8m13%200l1%207%201-2c0-2%200-3%203-2%204%200%206-3%204-8%200-2-1-3-5-3h-4v8m262%2015c-1%202-1%202-3%201s-4%201-3%203%201%202-1%203l-2%202%202%202c2%201%202%201%201%203s1%204%203%203%202-1%203%201l2%202%202-2c1-2%201-2%203-1s4-1%203-3-1-2%201-3l2-2-2-2c-2-1-2-1-1-3s-1-4-3-3-2%201-3-1c0-3-3-3-4%200\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/bdab489283bc25b9e8067114fcb87cbe/ba381/DraggedImage-15.webp 200w,\n/static/bdab489283bc25b9e8067114fcb87cbe/7f61c/DraggedImage-15.webp 400w,\n/static/bdab489283bc25b9e8067114fcb87cbe/32f69/DraggedImage-15.webp 494w\"\n          sizes=\"(max-width: 494px) 100vw, 494px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/bdab489283bc25b9e8067114fcb87cbe/772e8/DraggedImage-15.png 200w,\n/static/bdab489283bc25b9e8067114fcb87cbe/e17e5/DraggedImage-15.png 400w,\n/static/bdab489283bc25b9e8067114fcb87cbe/d72d4/DraggedImage-15.png 494w\"\n          sizes=\"(max-width: 494px) 100vw, 494px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/bdab489283bc25b9e8067114fcb87cbe/d72d4/DraggedImage-15.png\"\n          alt=\"DraggedImage 15\"\n          title=\"DraggedImage 15\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span></p>\n<p>刚写前端的时候，或者为了方便，我们偶尔会把 CSS 写在 HTML 里，但是那样的话是没有直接创建 <code class=\"language-text\">.css</code> 文件强大的自动补全特性的，这个插件让一切都回来了。</p>\n<h3 id=\"settings-sync\" style=\"position:relative;\"><a href=\"#settings-sync\" aria-label=\"settings sync permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Settings Sync</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 494px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/ecd09958faef608f6794cac3bc5e6d9f/d72d4/DraggedImage-16.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 27.500000000000004%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'110\\'%3e%3cpath%20d=\\'M0%2055v55h401V0H0v55m18-35c-3%202-2%206%202%207l4%203h-8c-2%201%202%204%205%204%208%200%208-8%201-9l-3-2c0-2%202-2%205-1%203%202%204%200%201-2s-4-2-7%200m94%200c-4%202-2%206%203%208%202%200%203%201%203%202h-8c0%202%202%204%206%204%206%200%208-7%202-9-4%200-6-3-4-4l3%201h4c0-2-4-4-6-4l-3%202m-31%203c-2%201-3%207%200%209%201%202%202%202%204%201h2c0%202-2%203-6%202-2%200-2%200-1%201%201%202%205%203%208%201%203-1%203-15%201-15l-2%201h-6m123%2032c-4%204-1%2010%203%209%202-1%203%200%203%201%200%202-3%203-5%201h-2c1%203%204%203%206%202%203-1%203-1%203-8v-6l-3-1c-3%200-4%201-5%202m66%206l1%207%201-2c0-2%200-2%202-1%202%200%203%200%204-2%204-5%201-9-5-9h-3v7m12-7l1%2014%201-2c0-2%200-2%202-2%205%202%209-4%206-9-2-2-8-3-10-1m80%2022c0%202-1%202-3%202-3%200-4%200-3%203%201%201%200%202-1%202l-2%203%202%202c1%200%202%201%201%202-1%203%200%203%203%203%202%200%203%200%203%202%201%203%203%203%204%200%201-1%202-2%203-1%203%200%204-1%203-3s-1-2%201-3c3-2%203-4%200-5-1%200-2-1-1-2%201-3%200-3-2-3l-4-2c-1-3-3-2-4%200\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/ecd09958faef608f6794cac3bc5e6d9f/ba381/DraggedImage-16.webp 200w,\n/static/ecd09958faef608f6794cac3bc5e6d9f/7f61c/DraggedImage-16.webp 400w,\n/static/ecd09958faef608f6794cac3bc5e6d9f/32f69/DraggedImage-16.webp 494w\"\n          sizes=\"(max-width: 494px) 100vw, 494px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/ecd09958faef608f6794cac3bc5e6d9f/772e8/DraggedImage-16.png 200w,\n/static/ecd09958faef608f6794cac3bc5e6d9f/e17e5/DraggedImage-16.png 400w,\n/static/ecd09958faef608f6794cac3bc5e6d9f/d72d4/DraggedImage-16.png 494w\"\n          sizes=\"(max-width: 494px) 100vw, 494px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/ecd09958faef608f6794cac3bc5e6d9f/d72d4/DraggedImage-16.png\"\n          alt=\"DraggedImage 16\"\n          title=\"DraggedImage 16\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span></p>\n<p>同步你在 VSCode 中的所有设置和下载过的插件，Snippet，快捷键绑定。对于有多台电脑的朋友，这个插件是必备的。不过它是基于 <strong>gist</strong> 来保存你的配置，而这个在国内需要翻墙… 同时这个插件第一次设置的也比较繁琐，需要一定的耐心。总的来说，当你必须换一台电脑的时候，一定要花点时间到这个插件上。可以节省你大量的时间！</p>\n<h3 id=\"path-intellisense\" style=\"position:relative;\"><a href=\"#path-intellisense\" aria-label=\"path intellisense permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Path Intellisense</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 492px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/b1189f788c88c0ba1841df121e97482b/5c6e9/DraggedImage-17.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 23%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'93\\'%3e%3cpath%20d=\\'M0%2047v46h401V0H0v47m16-34c0%206%200%208%202%208l1-2c0-2%201-3%203-3%208-1%207-9-1-10h-5v7m107%2026c0%203%200%203-2%202-4-3-8%204-5%209%201%201%202%202%205%202h4v-8l-1-8-1%203m64%200c0%202%200%202-2%201-5-1-8%207-4%2010%201%201%202%202%205%202h3v-8l-1-8-1%203m-18%202c-4%203-2%2011%202%2011%205%200%208-6%204-10-2-2-4-2-6-1m42%200v15l1-2c0-3%200-3%203-2%202%200%203%200%204-2%204-5%200-11-5-9h-3m32%200c-3%202-3%209%200%2010h4c2-1%202-1%202%201l-4%201c-4%200-4%200-3%202%202%201%205%201%207-1%202-1%203-12%201-13h-7m121%2022l-4%202c-2%200-2%200-2%202%200%203-1%204-2%204-3%200-2%203%200%204%202%200%202%201%202%203%200%203%200%204%203%203%201-1%202%200%202%201l3%202%202-2c0-1%201-2%202-1%203%201%203%200%203-3%200-2%200-3%202-3%202-1%203-4%200-4l-1-4c0-2-1-2-3-2l-4-2-2-2-1%202\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/b1189f788c88c0ba1841df121e97482b/ba381/DraggedImage-17.webp 200w,\n/static/b1189f788c88c0ba1841df121e97482b/7f61c/DraggedImage-17.webp 400w,\n/static/b1189f788c88c0ba1841df121e97482b/9d6da/DraggedImage-17.webp 492w\"\n          sizes=\"(max-width: 492px) 100vw, 492px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/b1189f788c88c0ba1841df121e97482b/772e8/DraggedImage-17.png 200w,\n/static/b1189f788c88c0ba1841df121e97482b/e17e5/DraggedImage-17.png 400w,\n/static/b1189f788c88c0ba1841df121e97482b/5c6e9/DraggedImage-17.png 492w\"\n          sizes=\"(max-width: 492px) 100vw, 492px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/b1189f788c88c0ba1841df121e97482b/5c6e9/DraggedImage-17.png\"\n          alt=\"DraggedImage 17\"\n          title=\"DraggedImage 17\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span></p>\n<p>提供 URL 的自动补全功能，这个必须装吧。支持任何语言，触发条件一般是在一对引号中，输入 <code class=\"language-text\">./</code> ，<code class=\"language-text\">../</code>, <code class=\"language-text\">/</code> 这些表示路径的前缀，就会跳出来了。像我们的 JS，HTML 中引用文件，CSS 中 <code class=\"language-text\">url</code> 就再也不用担心了。\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 800px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/6c313d49f82f3cd880af2fb5d5804df8/914ae/DraggedImage-18.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 77.5%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'310\\'%3e%3cpath%20d=\\'M0%2059v59h25l25%201H0v45l2-1c2%200%202%200%201-1-2%200-3-2-1-2s4%202%204%205c0%202%200%203-3%203-3-1-3-1-3%205%200%205%200%205%202%204h3c2%201%200%204-2%204H2l2%201c2%200%202%200%201%201H1c-1-1-1%202-1%2021%200%2020%200%2022%202%2021%200-1%202-2%203-1%201%200%201%201-1%201s-2%201-2%202c0%202%201%202%203%202v1H2c-2-1-2-1-2%203l1%204%201%201%202%202c1%200%202%200%202%203l-1%204-1-4-1-2-1%202-1%204-1%206c0%206%200%206%202%205%202%200%202%200%201-1-2%200-3-2-1-2s4%202%204%205c0%202%200%203-3%203-3-1-3-1-3%205l1%205h1l2%201v-2l-1-1c3%201%204%204%201%204l-2%201%202%201c2%200%202%200%201%201H2c-2-1-2%200-2%2013v14h3c2%200%203%200%202%201l-3%201c-1-1-2%200-2%201%200%202%201%202%204%202s3%200%203-4c0-5%203-7%203-3v3l1-3c1-4%202-2%203%203l1%202%202-3h3l-3-1c-2%200-2-1-1-1%202-1%205%201%205%205l2%202v-2c-2-2%201-6%204-5%202%200%201%202-1%202l-1%202%201%201%202%201%201%201%201-4c0-5%201-7%204-5%201%201%202%202%202%205-1%202%200%204%201%204v-3c0-2%200-3%202-4s4%201%204%204c-1%202%200%203%201%203%202%200%202%200%201-2s-1-3%201-4c2-3%205-1%205%203v3l1-4%201-4%201%202h1c2-2%203-1%202%201-2%202%201%205%206%205%204%200%204%200%204-4l1-4%201%202%202%201%201-2h1c2%201%200%204-3%204l-1%202c0%202%206%201%207-1v-4c-1-1%200-1%201-1h3l1%201-1%201c-2-1-3%202-2%204%202%202%205%201%204-2%200-3%202-5%204-4s2%202%202%204l-1%203h6c6%200%2010-3%209-6-1-1%201-1%209-1%2012%200%2012%200%209%204v3l2-3c2-5%204-6%204-1%200%204%200%204%202%204%203%200%205-2%205-5%200-4%201-3%201%201%200%203%201%204%203%204l2-1h-1l-2-1%202-1c2%200%203-2%201-4l1-1c2%200%203%201%202%202l1%203%202%201-1%201h-2c0%202%204%201%205-1l-2-3c-2-1-2-1%200-1l3-1c1-1%201%200%201%203l1%204%201-2%201-1%202-2c1-3%204-2%204%202%200%202%201%203%203%203v-1c-4-2-2-6%203-7l1%204c0%203%200%204%202%204s4-4%203-6v-1c1-1%201%200%201%203%200%204%200%204%203%204%202%200%202-1%202-4s1-3%203-3c3%200%203-1%201%203l-1%204%203-4c2-3%206-6%205-2l1%202c3%202%203%203%200%202l-2%201h6l-2-3-1-2%202-1c1-3%203%200%203%204%200%203%200%203%201%201%201-5%203-5%203-1%201%203%201%203%201-1s0-4%202-3c3%202%203%205%201%206-1%201-1%201%202%201%202%200%203%200%202-1v-6c2-1%204%201%204%204%200%202%201%203%203%203v-1c-3-1-3-5%200-5%202-2%2013-1%2014%200%201%200%201%202-1%203l-1%203h176V0H0v59m56-17v9l1%207h12v-6c0-5%200-7-2-8h-1v2l-1-2c0-2%200-3-4-3l-5%201m2%207v7h10v-4c0-5%200-5-2-5s-3%200-3-2%200-3-2-3c-3%200-3%200-3%207m-2%2017v9l1%207h12v-6c0-6%200-7-2-9-3-2-10-3-11-1m2%208v6h10v-4c0-5%200-5-2-5s-3-1-3-2l-2-2c-3%200-3%200-3%207m-2%2016v9l1%207h12v-6c0-6%200-7-2-9-3-2-10-3-11-1m2%208v7h10v-5l-1-5c-2%201-4%200-4-2l-2-2c-3%200-3%200-3%207m-2%2024v8h13v-6c0-8-2-10-8-10h-5v8m2%200v7h10v-4c0-4%200-5-2-5s-3-1-3-3c0-1-1-2-3-2s-2%200-2%207m-2%2024v8h13v-6c0-8-2-10-8-10h-5v8m2%200v7h10v-4c0-4%200-5-2-5s-3-1-3-3c0-1-1-2-3-2s-2%200-2%207m-2%2017v9l1%207h12v-6l-1-7h-1l-1%201-1-2c0-2%200-3-4-3l-5%201m2%207v7h10v-4c0-5%200-5-2-5s-3%200-3-2%200-3-2-3c-3%200-3%200-3%207m-2%2017v9l1%207h12v-6c0-6%200-7-2-9-3-2-10-3-11-1m2%208v6h10v-4c0-5%200-5-2-5s-3-1-3-2l-2-2c-3%200-3%200-3%207m-2%2016v9l1%207h12v-6c0-6%200-7-2-9-3-2-10-3-11-1m2%208v7h10v-5c0-5%200-5-2-5s-3-1-3-2l-2-2c-3%200-3%200-3%207m-2%2024l1%208h12v-6c0-8-2-10-8-10h-5v8m2%200v7h10v-4c0-4%200-5-2-5s-3-1-3-3c0-1-1-2-3-2s-2%200-2%207m-2%2024v8h13v-6c0-8-2-10-8-10h-5v8m2%200v7h10v-4c0-4%200-5-2-5s-3-1-3-3c0-1-1-2-3-2s-2%200-2%207m-1%2017l-1%208v7h13v-6c0-8-2-10-8-10l-4%201m1%207v7h10v-4c0-4%200-5-2-5s-3-1-3-3c0-1-1-2-3-2s-2%200-2%207\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/6c313d49f82f3cd880af2fb5d5804df8/ba381/DraggedImage-18.webp 200w,\n/static/6c313d49f82f3cd880af2fb5d5804df8/7f61c/DraggedImage-18.webp 400w,\n/static/6c313d49f82f3cd880af2fb5d5804df8/d00b9/DraggedImage-18.webp 800w,\n/static/6c313d49f82f3cd880af2fb5d5804df8/31b17/DraggedImage-18.webp 860w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/6c313d49f82f3cd880af2fb5d5804df8/772e8/DraggedImage-18.png 200w,\n/static/6c313d49f82f3cd880af2fb5d5804df8/e17e5/DraggedImage-18.png 400w,\n/static/6c313d49f82f3cd880af2fb5d5804df8/5a190/DraggedImage-18.png 800w,\n/static/6c313d49f82f3cd880af2fb5d5804df8/914ae/DraggedImage-18.png 860w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/6c313d49f82f3cd880af2fb5d5804df8/5a190/DraggedImage-18.png\"\n          alt=\"DraggedImage 18\"\n          title=\"DraggedImage 18\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span></p>\n<h3 id=\"css-peak\" style=\"position:relative;\"><a href=\"#css-peak\" aria-label=\"css peak permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>CSS Peak</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 800px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/0b0cbd23a4236f22f6570d41b569f6cc/beade/DraggedImage-19.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 16%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'64\\'%3e%3cpath%20d=\\'M0%2032v32h401V0h-13l-15%201h-2L185%200H0v32m23-16c-5%201-10%205-12%2011-7%2015%2010%2032%2026%2025%204-2%204-2%207%200%202%202%202%202%204%201%201-2%201-2-1-5-2-2-2-2-1-5%208-15-7-33-23-27m-2%204c-10%206-11%2020-2%2027%2011%209%2026%201%2026-13%200-12-14-20-24-14\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/0b0cbd23a4236f22f6570d41b569f6cc/ba381/DraggedImage-19.webp 200w,\n/static/0b0cbd23a4236f22f6570d41b569f6cc/7f61c/DraggedImage-19.webp 400w,\n/static/0b0cbd23a4236f22f6570d41b569f6cc/d00b9/DraggedImage-19.webp 800w,\n/static/0b0cbd23a4236f22f6570d41b569f6cc/92f8c/DraggedImage-19.webp 1200w,\n/static/0b0cbd23a4236f22f6570d41b569f6cc/fad48/DraggedImage-19.webp 1600w,\n/static/0b0cbd23a4236f22f6570d41b569f6cc/4b6df/DraggedImage-19.webp 2266w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/0b0cbd23a4236f22f6570d41b569f6cc/772e8/DraggedImage-19.png 200w,\n/static/0b0cbd23a4236f22f6570d41b569f6cc/e17e5/DraggedImage-19.png 400w,\n/static/0b0cbd23a4236f22f6570d41b569f6cc/5a190/DraggedImage-19.png 800w,\n/static/0b0cbd23a4236f22f6570d41b569f6cc/c1b63/DraggedImage-19.png 1200w,\n/static/0b0cbd23a4236f22f6570d41b569f6cc/29007/DraggedImage-19.png 1600w,\n/static/0b0cbd23a4236f22f6570d41b569f6cc/beade/DraggedImage-19.png 2266w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/0b0cbd23a4236f22f6570d41b569f6cc/5a190/DraggedImage-19.png\"\n          alt=\"DraggedImage 19\"\n          title=\"DraggedImage 19\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span></p>\n<p>这插件的功能就是在我们看到 HTML 或者 JSX 等代码中，如果出现了 <code class=\"language-text\">class/className</code> 的话，可以通过 <code class=\"language-text\">Cmd/Ctrl</code> ➕ 左键点击某个 class 直接跳转到对应 CSS 的定义。非常方便，但是<strong>并不是每个时候都有用</strong></p>\n<h3 id=\"live-server\" style=\"position:relative;\"><a href=\"#live-server\" aria-label=\"live server permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Live Server</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 800px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/6c73592240d9ad5c9ac39239dca439c8/beade/DraggedImage-20.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 18%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'72\\'%3e%3cpath%20d=\\'M0%2036v36h401V0H0v36m78-26c-2%204%200%209%203%206h6c1-2%201-2%201%200%201%201%201%201%201-1%200-3%202-3%203%200%200%202%202%203%202%201h2c3%201%206%201%206-2%201-3%200-4-1-2H82c0-2-3-3-4-2M13%2020c-4%207-3%2022%203%2024%203%201%203-2%201-6-4-5-4-11-1-16%202-3%203-4%202-5-2-2-3-1-5%203m26-3l2%205c3%204%203%2011%200%2016-3%206-1%208%203%204%204-6%205-16%201-22-3-4-5-5-6-3m38%2028v3h16v-7H77v4\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/6c73592240d9ad5c9ac39239dca439c8/ba381/DraggedImage-20.webp 200w,\n/static/6c73592240d9ad5c9ac39239dca439c8/7f61c/DraggedImage-20.webp 400w,\n/static/6c73592240d9ad5c9ac39239dca439c8/d00b9/DraggedImage-20.webp 800w,\n/static/6c73592240d9ad5c9ac39239dca439c8/92f8c/DraggedImage-20.webp 1200w,\n/static/6c73592240d9ad5c9ac39239dca439c8/fad48/DraggedImage-20.webp 1600w,\n/static/6c73592240d9ad5c9ac39239dca439c8/4b6df/DraggedImage-20.webp 2266w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/6c73592240d9ad5c9ac39239dca439c8/772e8/DraggedImage-20.png 200w,\n/static/6c73592240d9ad5c9ac39239dca439c8/e17e5/DraggedImage-20.png 400w,\n/static/6c73592240d9ad5c9ac39239dca439c8/5a190/DraggedImage-20.png 800w,\n/static/6c73592240d9ad5c9ac39239dca439c8/c1b63/DraggedImage-20.png 1200w,\n/static/6c73592240d9ad5c9ac39239dca439c8/29007/DraggedImage-20.png 1600w,\n/static/6c73592240d9ad5c9ac39239dca439c8/beade/DraggedImage-20.png 2266w\"\n          sizes=\"(max-width: 800px) 100vw, 800px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/6c73592240d9ad5c9ac39239dca439c8/5a190/DraggedImage-20.png\"\n          alt=\"DraggedImage 20\"\n          title=\"DraggedImage 20\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span></p>\n<p>这是一个神器，如果你还不会使用 <code class=\"language-text\">webpack 或者 parcel</code> 的话。它提供了自动保存文件后自动刷新的功能。虽然这个功能看上去并不是很起眼，和 <code class=\"language-text\">browser-sync</code> 似乎也差不多，但它能内置到 VSCode 中就大大简化了操作。</p>\n<p>对于刚写前端的朋友有一个很重要的问题，他们往往喜欢直接通过浏览器打开某个 HTML 文件，在浏览器顶部会显示这个 URL 是 <strong>file</strong> 开头的。file 也算是一个协议，和我们知道的 HTTP 协议一样。如果直接通过 file 来打开 HTML 的话，很多 JS 的功能是不能实现的。比如：</p>\n<ol>\n<li>Web Worker</li>\n<li>Service Worker</li>\n<li><code class=\"language-text\">&lt;script type=&quot;module&quot; src=&quot;&quot;&gt;&lt;/script&gt;</code></li>\n<li>cors</li>\n</ol>\n<p>通过使用这个插件，就再也不用担心这个问题。使用方式也很简单，安装好后，点击需要的启动的 HTML 文件中底部 tab 的</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 200px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/c755ad342baefc7ad5f4e6d46b13e721/772e8/DraggedImage-21.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 30%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'120\\'%3e%3cpath%20d=\\'M0%2059v59h401V0H0v59m124-11c-14%205-22%2022-16%2035%202%205%209%2013%2011%2013s1-4-2-7c-8-7-9-19-3-28%2012-18%2040-10%2040%2012%200%207-1%2011-7%2017-3%203-3%204-2%205s2%200%206-4c16-16%206-43-17-44l-10%201m5%2010l-7%204c-6%205-7%2011-5%2017%203%204%203%203%204-5%200-9%205-14%2013-13%207%202%2010%206%2010%2014%200%207%201%209%203%204%205-11-5-23-18-21m55%204c-8%207-8%2020%200%2027%208%208%2021%204%2024-6%202-7%201-8-7-8-5%200-6%201-6%202s1%202%204%202c5%200%205%203%202%207-3%205-14%203-16-3-4-10-1-18%208-20%203-1%209%202%2010%204l2%202c4-1%203-4-2-8-5-5-13-5-19%201m73-3v18l1%2016h10c9%200%2010-1%2010-2%200-2-1-3-8-3h-8V74c0-13%200-15-2-15h-3m-35%208c-8%203-11%2016-4%2022%203%203%204%204%208%204%2013%200%2016-20%203-26l-3-1-4%201m107%200c-5%202-7%205-8%2011-1%209%204%2015%2012%2015%205%200%2012-5%209-7l-5%201c-4%203-7%202-9%200-4-4-2-5%207-6h9l-1-4c0-4-3-9-6-10h-8m-45%201v13c0%2011%201%2012%203%2012s3-25%200-26l-3%201m11%200c-1%201%208%2023%209%2024%203%202%204%200%209-12%204-11%204-13%201-13-1%200-3%203-6%2013l-2%207-3-7c-4-12-6-16-8-12m-167%201l-1%205c1%203%200%204-2%205-3%203-3%208%200%2010%201%202%202%203%202%207%200%205%201%207%206%207%204%200%205-2%205-8%200-4%200-5%202-6s1-9-1-10-3-2-2-3c2-3%200-7-4-8l-5%201m93%204c-2%202-3%2010%200%2013%201%203%207%203%2010%201%202-3%202-11%200-14-3-3-7-3-10%200\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/c755ad342baefc7ad5f4e6d46b13e721/ba381/DraggedImage-21.webp 200w\"\n          sizes=\"(max-width: 200px) 100vw, 200px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/c755ad342baefc7ad5f4e6d46b13e721/772e8/DraggedImage-21.png 200w\"\n          sizes=\"(max-width: 200px) 100vw, 200px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/c755ad342baefc7ad5f4e6d46b13e721/772e8/DraggedImage-21.png\"\n          alt=\"DraggedImage 21\"\n          title=\"DraggedImage 21\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span></p>\n<p>在短暂的等待后，就会自动打开你的默认浏览器跳入由该插件启动的服务器。</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 434px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/540d5a716800cdbfda68f156e6800d98/ade6e/DraggedImage-22.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 13%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'52\\'%3e%3cpath%20d=\\'M17%2012C5%2015%205%2035%2018%2036c5%200%207%200%2011-3%209-9%201-24-12-21m-1%203c-7%204-6%2015%201%2018%209%203%2017-8%2010-15-3-3-7-4-11-3m43%202c-2%202-2%204%200%204l1-1c0-2%202-3%205-2%202%201%201%204-3%209-6%207-6%207%201%207%207-1%209-2%203-3h-4l3-4%204-7c0-4-7-7-10-3m33%201c-4%205-1%2016%205%2016%204%200%206-4%206-11-1-8-7-11-11-5m21-1c-4%205-1%2017%205%2017%204%200%206-3%206-9%200-9-6-13-11-8m73%201c-4%205-2%2014%203%2016%203%201%205-1%207-5%203-10-5-18-10-11m16%200c-4%205-1%2016%204%2016s8-7%206-13-6-8-10-3m2%201c-3%204-2%2013%202%2013%203%200%204-3%204-8%200-7-3-9-6-5m57%202c-1%202%200%203%202%202%202-2%205-1%205%201s-1%202-3%202c-4%200-6%203-5%205%200%202%205%204%206%202h3c1%202%202-10%200-12h-8m15%201c-3%202-2%208%200%2010%206%206%2013-3%208-10-1-3-6-3-8%200m44%200c0%202%200%2012%202%2012l1-6c0-5%201-5%203-5s3%200%203%206c1%206%202%205%202-2%200-4%201-4%203-4s3%200%203%205c0%208%202%208%202%200%200-7-1-9-6-7h-3c-3-1-9-1-10%201\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          data-srcset=\"/static/540d5a716800cdbfda68f156e6800d98/ba381/DraggedImage-22.webp 200w,\n/static/540d5a716800cdbfda68f156e6800d98/7f61c/DraggedImage-22.webp 400w,\n/static/540d5a716800cdbfda68f156e6800d98/e6590/DraggedImage-22.webp 434w\"\n          sizes=\"(max-width: 434px) 100vw, 434px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/540d5a716800cdbfda68f156e6800d98/772e8/DraggedImage-22.png 200w,\n/static/540d5a716800cdbfda68f156e6800d98/e17e5/DraggedImage-22.png 400w,\n/static/540d5a716800cdbfda68f156e6800d98/ade6e/DraggedImage-22.png 434w\"\n          sizes=\"(max-width: 434px) 100vw, 434px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image lazyload\"\n          data-src=\"/static/540d5a716800cdbfda68f156e6800d98/ade6e/DraggedImage-22.png\"\n          alt=\"DraggedImage 22\"\n          title=\"DraggedImage 22\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span></p>\n<p>下次要进去的话，可以直接通过 <code class=\"language-text\">localhost:5500</code>进去。值得一提的是，这个插件仅仅只是一个很方便的功能，但不代表它很强大。需要更强大的开发流程还是需要考虑 parcel 或者 webpack。</p>\n<h2 id=\"更多\" style=\"position:relative;\"><a href=\"#%E6%9B%B4%E5%A4%9A\" aria-label=\"更多 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>更多</h2>\n<p>如果还想继续提升开发的幸福感，可以考虑学习</p>\n<ol>\n<li><a href=\"https://emmet.io\">Emmet</a></li>\n<li><a href=\"https://code.visualstudio.com/docs/editor/codebasics\">VSCode 文档</a></li>\n</ol>\n<p>谢谢阅读 🌚</p>","frontmatter":{"title":"使用 VSCode 搭建一个很爽的前端环境","spoiler":null,"image":null,"date":"2018/06/04"}}},"pageContext":{"slug":"/vscode/","previous":{"fields":{"slug":"/purecomponent-is-harmful/purecomponent-is-harmful/"},"frontmatter":{"title":"PureComponent Considered Harmful","image":null,"spoiler":"不要让所有的组件都是 PureComponent 或者 memo"}},"next":{"fields":{"slug":"/git/"},"frontmatter":{"title":"The Junior Git","image":null,"spoiler":null}}}}}