From effaa0e7ed41e74a5cbac20bcfa5837a8c7be388 Mon Sep 17 00:00:00 2001 From: JimhHan <50871214+JimhHan@users.noreply.github.com> Date: Tue, 6 Apr 2021 19:05:35 +0800 Subject: [PATCH] Chore: lint --- .github/workflows/build.yml | 2 +- .github/workflows/prettier.yml | 16 ++-- .prettierignore | 4 + README.md | 2 +- docs/.vuepress/config.js | 54 ++++++------ docs/.vuepress/theme/components/NavLinks.vue | 6 +- docs/.vuepress/theme/index.js | 2 +- docs/.vuepress/theme/layouts/Layout.vue | 4 +- docs/about/news.md | 1 + docs/config/inbounds/shadowsocks.md | 26 +++--- docs/config/outbounds/trojan.md | 5 +- docs/config/outbounds/vless.md | 3 +- docs/config/reverse.md | 86 ++++++++++---------- docs/config/transports/websocket.md | 2 - docs/document/command.md | 2 +- docs/document/level-0/ch01-preface.md | 2 +- docs/document/level-0/ch04-security.md | 35 ++++---- package.json | 4 +- yarn.lock | 10 +-- 19 files changed, 132 insertions(+), 134 deletions(-) create mode 100644 .prettierignore diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bdb1f69ed..67055ad0f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,7 +10,7 @@ jobs: - name: Checkout uses: actions/checkout@v2 with: - fetch-depth: 0 + fetch-depth: 0 - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index f8bd1b183..a9c373650 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -9,12 +9,12 @@ jobs: runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v2 + - name: Checkout + uses: actions/checkout@v2 - - name: Prettify code - uses: creyD/prettier_action@v3.1 - with: - prettier_options: --write **/*.{js,ts,md,vue} - only_changed: true - dry: true + - name: Prettify code + uses: creyD/prettier_action@v3.1 + with: + prettier_options: --write **/*.{js,ts,md,vue} + only_changed: true + dry: true diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..7e5f626fe --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +node_modules/ +.vuepress/dist +.temp/ +dist/ diff --git a/README.md b/README.md index e5a28b677..b1dfec0b3 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# Xray-docs-next \ No newline at end of file +# Xray-docs-next diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 4bcb26462..46fac68f1 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -5,8 +5,8 @@ module.exports = { "/": { lang: "zh-CN", title: "Project X", - description: "Xray 官方文档" - } + description: "Xray 官方文档", + }, }, themeConfig: { smoothScroll: true, @@ -30,9 +30,9 @@ module.exports = { ariaLabel: "Language Menu", items: [ { text: "简体中文", link: "/" }, - { text: "English", link: "/en" } - ] - } + { text: "English", link: "/en" }, + ], + }, ], sidebar: { "/config/": [ @@ -43,8 +43,8 @@ module.exports = { "features/xtls", "features/fallback", "features/env", - "features/multiple" - ] + "features/multiple", + ], }, { title: "基础配置", @@ -60,8 +60,8 @@ module.exports = { "reverse", "routing", "stats", - "transport" - ] + "transport", + ], }, { title: "入站代理", @@ -74,8 +74,8 @@ module.exports = { "inbounds/socks", "inbounds/trojan", "inbounds/vless", - "inbounds/vmess" - ] + "inbounds/vmess", + ], }, { title: "出站代理", @@ -90,8 +90,8 @@ module.exports = { "outbounds/socks", "outbounds/trojan", "outbounds/vless", - "outbounds/vmess" - ] + "outbounds/vmess", + ], }, { title: "底层传输", @@ -103,9 +103,9 @@ module.exports = { "transports/mkcp", "transports/quic", "transports/tcp", - "transports/websocket" - ] - } + "transports/websocket", + ], + }, ], "/document/level-0/": [ "ch01-preface", @@ -116,41 +116,41 @@ module.exports = { "ch06-certificates", "ch07-xray-server", "ch08-xray-clients", - "ch09-appendix" + "ch09-appendix", ], "/document/level-1/": [ "fallbacks-lv1", "routing-lv1-part1", "routing-lv1-part2", "work", - "fallbacks-with-sni" + "fallbacks-with-sni", ], "/document/level-2/": [ "transparent_proxy/transparent_proxy", "tproxy", "iptables_gid", - "redirect" + "redirect", ], - "/": "auto" - } + "/": "auto", + }, }, markdown: { toc: { - includeLevel: [2] + includeLevel: [2], }, - extendMarkdown: md => { + extendMarkdown: (md) => { md.use(require("markdown-it-footnote")); - } + }, }, - chainWebpack: config => { + chainWebpack: (config) => { config.module .rule("webp") .test(/\.(webp)(\?.*)?$/) .use("file-loader") .loader("file-loader") .options({ - name: `assets/img/[name].[hash:8].[ext]` + name: `assets/img/[name].[hash:8].[ext]`, }); }, - postcss: { plugins: [require("autoprefixer")] } + postcss: { plugins: [require("autoprefixer")] }, }; diff --git a/docs/.vuepress/theme/components/NavLinks.vue b/docs/.vuepress/theme/components/NavLinks.vue index f995520c4..c041afea3 100644 --- a/docs/.vuepress/theme/components/NavLinks.vue +++ b/docs/.vuepress/theme/components/NavLinks.vue @@ -21,7 +21,7 @@ export default Vue.extend({ data() { return { enable: false, - text: "" + text: "", }; }, mounted() { @@ -40,7 +40,7 @@ export default Vue.extend({ } else { html.setAttribute("theme", "light"); } - } - } + }, + }, }); diff --git a/docs/.vuepress/theme/index.js b/docs/.vuepress/theme/index.js index b4eddc0df..0fe3d63fe 100644 --- a/docs/.vuepress/theme/index.js +++ b/docs/.vuepress/theme/index.js @@ -1,3 +1,3 @@ module.exports = { - extend: "@vuepress/theme-default" + extend: "@vuepress/theme-default", }; diff --git a/docs/.vuepress/theme/layouts/Layout.vue b/docs/.vuepress/theme/layouts/Layout.vue index 6a8137327..87d04a790 100644 --- a/docs/.vuepress/theme/layouts/Layout.vue +++ b/docs/.vuepress/theme/layouts/Layout.vue @@ -7,8 +7,8 @@ import ParentLayout from "@parent-theme/layouts/Layout.vue"; import Vue from "vue"; export default Vue.extend({ components: { - ParentLayout - } + ParentLayout, + }, }); diff --git a/docs/about/news.md b/docs/about/news.md index 1ca40ddba..e73b86307 100644 --- a/docs/about/news.md +++ b/docs/about/news.md @@ -21,6 +21,7 @@ sidebar: auto ## 2021.3.25 + 没错还在变。 -_- ## 2021.3.15 diff --git a/docs/config/inbounds/shadowsocks.md b/docs/config/inbounds/shadowsocks.md index 1402bbdff..d16029213 100644 --- a/docs/config/inbounds/shadowsocks.md +++ b/docs/config/inbounds/shadowsocks.md @@ -7,17 +7,17 @@ - 支持 TCP 和 UDP 数据包转发,其中 UDP 可选择性关闭; - 推荐的加密方式: - - AES-256-GCM - - AES-128-GCM - - ChaCha20-Poly1305 或称 ChaCha20-IETF-Poly1305 - - none 或 plain + - AES-256-GCM + - AES-128-GCM + - ChaCha20-Poly1305 或称 ChaCha20-IETF-Poly1305 + - none 或 plain 不推荐的加密方式: - - AES-256-CFB - - AES-128-CFB - - ChaCha20 - - ChaCha20-IETF + - AES-256-CFB + - AES-128-CFB + - ChaCha20 + - ChaCha20-IETF ::: danger "none" 不加密方式下,服务器端不会验证 "password" 中的密码。为确保安全性, 一般需要加上 TLS 并在传输层使用安全配置,例如 WebSocket 配置较长的 path @@ -65,10 +65,10 @@ 必填。 - 推荐的加密方式: - - AES-256-GCM - - AES-128-GCM - - ChaCha20-Poly1305 或称 ChaCha20-IETF-Poly1305 - - none 或 plain + - AES-256-GCM + - AES-128-GCM + - ChaCha20-Poly1305 或称 ChaCha20-IETF-Poly1305 + - none 或 plain > `password`: string @@ -84,4 +84,4 @@ Shadowsocks 协议不限制密码长度,但短密码会更可能被破解, > `email`: string -用户邮箱,用于区分不同用户的流量(日志、统计)。 \ No newline at end of file +用户邮箱,用于区分不同用户的流量(日志、统计)。 diff --git a/docs/config/outbounds/trojan.md b/docs/config/outbounds/trojan.md index 91d48b787..0e897528f 100644 --- a/docs/config/outbounds/trojan.md +++ b/docs/config/outbounds/trojan.md @@ -75,9 +75,8 @@ Trojan 被设计工作在正确配置的加密 TLS 隧道 此外,目前 XTLS 仅支持 TCP、mKCP、DomainSocket 这三种传输方式。 - -::: tip 关于 xtls-rprx-\*-udp443 流控模式 - + +::: tip 关于 xtls-rprx-\*-udp443 流控模式 启用了 Xray-core 的 XTLS 时,通往 UDP 443 端口的流量默认会被拦截(一般情况下为 QUIC),这样应用就不会使用 QUIC 而会使用 TLS,XTLS 才会真正生效。实际上,QUIC 本身也不适合被代理,因为 QUIC 自带了 TCP 的功能, 它作为 UDP 流量在通过 Trojan 协议传输时,底层协议为 TCP,就相当于两层 TCP 了。 diff --git a/docs/config/outbounds/vless.md b/docs/config/outbounds/vless.md index 25f1b8df7..f5b0d847d 100644 --- a/docs/config/outbounds/vless.md +++ b/docs/config/outbounds/vless.md @@ -113,9 +113,8 @@ VLESS 的用户 ID,可以是任意小于 30 字节的字符串, 也可以是 此外,目前 XTLS 仅支持 TCP、mKCP、DomainSocket 这三种传输方式。 ::: - + ::: tip 关于 xtls-rprx-*-udp443 流控模式 - 启用了 Xray-core 的 XTLS 时,通往 UDP 443 端口的流量默认会被拦截(一般情况下为 QUIC),这样应用就不会使用 QUIC 而会使用 TLS,XTLS 才会真正生效。实际上,QUIC 本身也不适合被代理,因为 QUIC 自带了 TCP 的功能,它作为 UDP 流量在通过 VLESS 协议传输时,底层协议为 TCP,就相当于两层 TCP 了。 diff --git a/docs/config/reverse.md b/docs/config/reverse.md index bae37ceec..b49fa873d 100644 --- a/docs/config/reverse.md +++ b/docs/config/reverse.md @@ -114,13 +114,16 @@ outbound: ```json -({ +{ "tag": "out", "protocol": "freedom", "settings": { "redirect": "127.0.0.1:80" // 将所有流量转发到网页服务器 } -}, +} +``` + +```json { "protocol": "vmess", "settings": { @@ -137,32 +140,26 @@ outbound: ] }, "tag": "interconn" -}) +} ``` 路由配置: ```json -"routing": { - "rules": [ - { - "type": "field", - "inboundTag": [ - "bridge" - ], - "domain": [ - "full:test.xray.com" - ], - "outboundTag": "interconn" - }, - { - "type": "field", - "inboundTag": [ - "bridge" - ], - "outboundTag": "out" - } - ] +{ + "rules": [ + { + "type": "field", + "inboundTag": ["bridge"], + "domain": ["full:test.xray.com"], + "outboundTag": "interconn" + }, + { + "type": "field", + "inboundTag": ["bridge"], + "outboundTag": "out" + } + ] } ``` @@ -186,18 +183,21 @@ outbound: inbound: ```json -({ +{ "tag": "external", - "port": 80, // 开放 80 端口,用于接收外部的 HTTP 访问 + "port": 80, "protocol": "dokodemo-door", "settings": { "address": "127.0.0.1", "port": 80, "network": "tcp" } -}, +} +``` + +```json { - "port": 1024, // 用于接收 bridge 的连接 + "port": 1024, "tag": "interconn", "protocol": "vmess", "settings": { @@ -207,28 +207,24 @@ inbound: } ] } -}) +} ``` 路由配置: ```json -"routing": { - "rules": [ - { - "type": "field", - "inboundTag": [ - "external" - ], - "outboundTag": "portal" - }, - { - "type": "field", - "inboundTag": [ - "interconn" - ], - "outboundTag": "portal" - } - ] +{ + "rules": [ + { + "type": "field", + "inboundTag": ["external"], + "outboundTag": "portal" + }, + { + "type": "field", + "inboundTag": ["interconn"], + "outboundTag": "portal" + } + ] } ``` diff --git a/docs/config/transports/websocket.md b/docs/config/transports/websocket.md index bee23a305..6806749a3 100644 --- a/docs/config/transports/websocket.md +++ b/docs/config/transports/websocket.md @@ -83,5 +83,3 @@ WebSocket 所使用的 HTTP 协议路径,默认值为 `"/"`。 - 设置环境变量指定要监听的地址端口,比如 `XRAY_BROWSER_DIALER = 127.0.0.1:8080`。 - 先运行 Xray-core,再用任一浏览器访问上面指定的地址端口,还可以 `F12` 看 `Console` 和 `Network`。 - 浏览器会限制 WebSocket 连接数,所以建议开启 `Mux.Cool`。 - - diff --git a/docs/document/command.md b/docs/document/command.md index 6e61707d9..143f560f5 100644 --- a/docs/document/command.md +++ b/docs/document/command.md @@ -1,6 +1,6 @@ # 命令参数 -::: tip +::: tip Xray 使用 Go 风格的命令及参数 ::: diff --git a/docs/document/level-0/ch01-preface.md b/docs/document/level-0/ch01-preface.md index 11b2d44e1..9323bc09d 100644 --- a/docs/document/level-0/ch01-preface.md +++ b/docs/document/level-0/ch01-preface.md @@ -29,7 +29,7 @@ 一、科学上网这件事 科学上网这件事情,说来已经发展了近二十年(震惊!!!.jpg)。最初,自己稍微动动手即可(改改 host、连一下 ssh)、后来需要找一个网页代理,再后来需要写一个私有协议(比如 Shadowsocks)等等。 - + 随着 GFW 技术这十几年来不断的迭代升级,若要完成【自己动手科学上网】这个目标,需要做的事情已经包括但不限于: 1. 了解Linux系统基本命令 diff --git a/docs/document/level-0/ch04-security.md b/docs/document/level-0/ch04-security.md index 0d73b816a..d3aee3394 100644 --- a/docs/document/level-0/ch04-security.md +++ b/docs/document/level-0/ch04-security.md @@ -77,10 +77,9 @@ Linux 服务器的安全防护是一个纷繁复杂的巨大课题。无数的 - 删除 `22` 并改成 `9753` - 说明:如果这一行开头有个`#`,证明这一行【不生效】(被注释掉了),你可像我一样在文件最后写一个不带`#`的,或者把`#`删掉就好。 - - ::: warning 注意 - 本文以`9753`为例,就意味着随着本文的发布,这个端口会变成一个不大不小的特征,也许会被攻击者优先尝试、也许被GFW干扰、阻断。所以我强烈建议你用一个自己想到的其他端口,毕竟,你有6万多个端口可以自由选择。 - ::: + ::: warning + 注意 本文以`9753`为例,就意味着随着本文的发布,这个端口会变成一个不大不小的特征,也许会被攻击者优先尝试、也许被 GFW 干扰、阻断。所以我强烈建议你用一个自己想到的其他端口,毕竟,你有 6 万多个端口可以自由选择。 + ::: 6. 我们要做的第三件事,是【保存文件并退出】 @@ -121,16 +120,16 @@ Linux 服务器的安全防护是一个纷繁复杂的巨大课题。无数的 # adduser vpsadmin ``` - 执行命令后,根据提示操作即可。请务必设置一个用户密码(别忘记设置密码时你时看不到 `******` 的)。之后系统会询问你一些用户的附加信息,这些就可以无视,一路回车即可。 + 执行命令后,根据提示操作即可。请务必设置一个用户密码(别忘记设置密码时你时看不到 `******` 的)。之后系统会询问你一些用户的附加信息,这些就可以无视,一路回车即可。 - ![建立新用户](./ch04-img03-adduser.png) + ![建立新用户](./ch04-img03-adduser.png) ::: warning 注意 本文以`vpsadmin`为例,就意味着随着本文的发布,这个用户名也会变成一个不大不小的特征,也许会被攻击者优先尝试。所以和端口一样,我强烈建议你用一个自己想到的其他用户名。 ::: 4. 完整流程演示如下: - + ![建立新用户](./ch04-img04-adduser-full.gif) 5. 我们要做的第二件事,是【安装`sudo`功能】(`sudo` 就是在关键时刻,让普通账户临时获得 `root` 的神力,战力全开拯救世界) @@ -139,7 +138,8 @@ Linux 服务器的安全防护是一个纷繁复杂的巨大课题。无数的 # apt update && apt install sudo ``` - 聪明的你大概已经发现,这一行命令其实是两个命令。前一半 `apt update` 你之前已经见过并且用过了,是去服务器刷新软件版本信息。后面的 `apt install` 就是这一次要用到的【安装命令】。两条连接在一起,就是让系统去【刷新可用的最新软件,然后安装最新版的`sudo`程序】。 `&&` 则是把两个命令连起来执行的意思。 + 聪明的你大概已经发现,这一行命令其实是两个命令。前一半 `apt update` 你之前已经见过并且用过了,是去服务器刷新软件版本信息。后面的 `apt install` + 就是这一次要用到的【安装命令】。两条连接在一起,就是让系统去【刷新可用的最新软件,然后安装最新版的`sudo`程序】。 `&&` 则是把两个命令连起来执行的意思。 6. 我们要做的第三件事,是【把`vpsadmin`用户加入`sudo`名单里,让他有资格借用`root`的神力】 @@ -149,15 +149,15 @@ Linux 服务器的安全防护是一个纷繁复杂的巨大课题。无数的 在 `User Privilege Specification` 下加入一行 `vpsadmin ALL=(ALL) NOPASSWD: ALL` 即可。 + ::: warning 注意 我要特别说明的是`NOPASSWD`这个设置,它的意思是`vpsadmin`用户临时使用`root`权限时,不用额外输入密码。**这与一般的安全建议相反** + 。我之所以如此推荐,是因为很多新人不顾危险坚持使用`root`账号就是因为用`root`时不用重复输入密码、觉得轻松。“两害相权取其轻”,我认为【直接用`root`用户的风险】大于【使用`sudo` + 时不用输密码的风险】,所以做了以上的建议。 - ::: warning 注意 - 我要特别说明的是`NOPASSWD`这个设置,它的意思是`vpsadmin`用户临时使用`root`权限时,不用额外输入密码。**这与一般的安全建议相反**。我之所以如此推荐,是因为很多新人不顾危险坚持使用`root`账号就是因为用`root`时不用重复输入密码、觉得轻松。“两害相权取其轻”,我认为【直接用`root`用户的风险】大于【使用`sudo`时不用输密码的风险】,所以做了以上的建议。 - - 如果你希望遵守传统习惯、每次使用`sudo`时需要输入密码,那么这一行改成 `vpsadmin ALL=(ALL:ALL) ALL` 即可。 - ::: + 如果你希望遵守传统习惯、每次使用`sudo`时需要输入密码,那么这一行改成 `vpsadmin ALL=(ALL:ALL) ALL` 即可。 + ::: 7. 完整流程演示如下: - + ![建立新用户](./ch04-img05-sudo-full.gif) ## 4.6 禁用 root 用户 SSH 远程登录 @@ -185,7 +185,7 @@ Linux 服务器的安全防护是一个纷繁复杂的巨大课题。无数的 ``` 5. 完整流程演示如下: - + ![禁用root用户SSH远程登录](./ch04-img06-ssh-no-root-full.gif) 6. 下次通过 PuTTY 远程 SSH 登录的时候,`root`用户已无法连接,用户名就要换成`vpsadmin`了!方便起见,我们可以在 PuTTY 中把`vpsadmin`设置成默认登录用户名。(啰嗦君:别忘了保存 Session) @@ -251,7 +251,7 @@ Linux 服务器的安全防护是一个纷繁复杂的巨大课题。无数的 ![本地和远程文件夹](./ch04-img12-winscp-locations.png) 6. 在右边(VPS 中)点击右键并新建文件夹,起名`.ssh` (注意有一个`.`) - + ![在VPS中建立放置公钥的文件夹](./ch04-img13-winscp-newfolder-key.png) 7. 将【公钥】`authorized_keys`上传到`.ssh`文件夹内 @@ -299,14 +299,13 @@ Linux 服务器的安全防护是一个纷繁复杂的巨大课题。无数的 ``` 8. 完整流程如下: - + ![SSH开启密钥验证并禁用密码验证](./ch04-img17-rsa-login-full.gif) 4. VPS 端已经设置好了公钥,现在要给 PuTTY 指定私钥位置供登录时使用(啰嗦君:别忘了保存 Session) ![PuTTY指定私钥位置](./ch04-img18-putty-privatekey-location.png) - 5. 至此,【密钥登录】已成功开启、【密码验证】已成功关闭、并且还给 PuTTY 保存了默认的登录用户名和私钥。未来使用 PuTTY 登录时,载入`VPS-SERVER`配置后,点击`Open`就可以一键登录了。 如果你给私钥设置了密码保护,登录时当然还需要输入这个密码才能使用密钥,如下图: diff --git a/package.json b/package.json index 9ca8ac79c..5ec15649b 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "@types/bootstrap": "^5.0.11", "@types/jquery": "^3.5.5", "@vuepress/plugin-back-to-top": "^1.8.2", + "prettier": "^2.2.1", "sass": "^1.32.8", "sass-loader": "^8.0.2", "vue-property-decorator": "^9.1.2", @@ -16,7 +17,8 @@ }, "scripts": { "docs:dev": "vuepress dev docs", - "docs:build": "vuepress build docs" + "docs:build": "vuepress build docs", + "lint": "prettier --write ." }, "dependencies": { "@popperjs/core": "^2.9.1", diff --git a/yarn.lock b/yarn.lock index d963d23d0..95e876f9b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6398,6 +6398,11 @@ prettier@^1.18.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== +prettier@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== + pretty-error@^2.0.2: version "2.1.2" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" @@ -8103,11 +8108,6 @@ vuepress-plugin-smooth-scroll@^0.0.3: dependencies: smoothscroll-polyfill "^0.4.3" -vuepress-theme-default-prefers-color-scheme@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/vuepress-theme-default-prefers-color-scheme/-/vuepress-theme-default-prefers-color-scheme-2.0.0.tgz#c5d305b1b4d10d0915b4bb413e554966d5171b25" - integrity sha512-4sA3DCiaIIHVjcIC5+mF00mf29IU27KSH97Ga4xb4nUwwlC6eYHg2qchEVOgV25XogCtGgpZ/DCrTkywxvuBcg== - vuepress@^1.8.2: version "1.8.2" resolved "https://registry.yarnpkg.com/vuepress/-/vuepress-1.8.2.tgz#97e8bf979630611fc7b621fc4cc35b798ee5e847"