{"id":40050,"date":"2023-02-25T02:09:08","date_gmt":"2022-12-19T15:44:42","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8%e8%bf%99%e4%b8%aa%ef%bc%8c%e6%88%91%e4%b9%9f%e6%88%90%e4%b8%ba%e4%ba%86kotlin%e5%b7%a5%e7%a8%8b%e5%b8%88%e3%80%82\/"},"modified":"2024-04-29T16:09:17","modified_gmt":"2024-04-29T08:09:17","slug":"%e7%94%a8%e8%bf%99%e4%b8%aa%ef%bc%8c%e6%88%91%e4%b9%9f%e6%88%90%e4%b8%ba%e4%ba%86kotlin%e5%b7%a5%e7%a8%8b%e5%b8%88%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8%e8%bf%99%e4%b8%aa%ef%bc%8c%e6%88%91%e4%b9%9f%e6%88%90%e4%b8%ba%e4%ba%86kotlin%e5%b7%a5%e7%a8%8b%e5%b8%88%e3%80%82\/","title":{"rendered":"\u7528\u8fd9\u4e2a\uff0c\u6211\u4e5f\u6210\u4e3a\u4e86Kotlin\u5de5\u7a0b\u5e08"},"content":{"rendered":"<h1>\u9996\u5148<\/h1>\n<p>\u4f60\u597d\uff0c\u6211\u662f@aucfan-engineer 3\u53f7\u3002<br \/>\n\u7531\u4e8e\u626e\u6f14\u7684\u89d2\u8272\u4e0e\u6628\u5929\u4e0d\u540c\uff0c\u8bf7\u79f0\u547c\u6211\u4e3a3\u53f7\u3002<br \/>\n\u867d\u7136\u5750\u57281\u53f7\uff08\u6628\u5929\u7684\u4eba\uff09\u65c1\u8fb9\uff0c\u4f46\u662f\u6211\u5e76\u4e0d\u5199Kotlin\u7b49\u5185\u5bb9\uff0c\u800c\u662f\u5728\u7528\u4e0d\u540c\u7684\u8bed\u8a00\u5de5\u4f5c\u3002<\/p>\n<p>\u4eca\u5929\u662f\u6211\u5199\u8fd9\u7bc7\u6587\u7ae0\u7684\u65e5\u5b50\uff0c\u5047\u8bbe\u6211\u662f1\u53f7\u56e2\u961f\u5206\u914d\u7684\u65b0\u4eba\uff0c\u6628\u5929\u4ed6\u7559\u7ed9\u6211\u7684\u624b\u518c\uff08\u6587\u7ae0\uff09\uff0c\u6211\u5c06\u6309\u7167\u5176\u4e2d\u7684\u6b65\u9aa4\u8fdb\u884c\u73af\u5883\u5efa\u7acb\u3002<\/p>\n<p>\u662f\u7684\uff0c\u8fd9\u6837\u6211\u4e5f\u6210\u4e3a\u4e86Kotlin\u5de5\u7a0b\u5e08\uff01<\/p>\n<details>\u4e00\u65e6\u88ab\u5206\u914d\u5230\u4e00\u53f7\u56e2\u961f\uff0c\u5de5\u4f5c\u6d41\u7a0b\u4f1a\u4ece\u6309\u7167\u64cd\u4f5c\u624b\u518c\u8fdb\u884c\u73af\u5883\u642d\u5efa\u5f00\u59cb\u3002<br \/>\n\u4f5c\u4e3a\u65b0\u4eba\u6216\u8005\u6ca1\u6709\u4e00\u53f7\u9879\u76ee\u7ecf\u9a8c\u7684\u4eba\u88ab\u5206\u6d3e\u5230\u56e2\u961f\u540e\uff0c\u4f1a\u88ab\u5206\u6d3e\u5230\u6b63\u5728\u8fd0\u4f5c\u7684\u9879\u76ee\uff08\u6709\u65f6\u53ef\u80fd\u662f\u4f53\u9a8c\u6027\u9879\u76ee\uff09\uff0c\u5728\u5b9e\u9645\u8fd0\u884c\u7684\u4ee3\u7801\u4e2d\u63a5\u89e6\u5230\uff0c\u7406\u89e3Kotlin\u9879\u76ee\u7684\u7ed3\u6784\uff0c\u5e76\u4e14\u5c1d\u8bd5\u52a0\u5165\u4e00\u4e9b\u5c0f\u529f\u80fd\u6216\u8005\u4fee\u6539\uff0c\u5e76\u4e14\u5728\u9700\u8981\u7684\u60c5\u51b5\u4e0b\u52a0\u5165\u6d4b\u8bd5\uff0c\u5e76\u901a\u8fc7\u4e00\u53f7\u548c\u5176\u4ed6\u524d\u8f88\u7684\u5ba1\u67e5\u6765\u5b66\u4e60\u3002<\/details>\n<h3>\u73af\u5883<\/h3>\n<p>\u987a\u4fbf\u63d0\u4e00\u53e5\uff0c\u8fd9\u6b21\u7684\u5de5\u4f5c\u73af\u5883\u662f\u4f7f\u7528\u5e73\u65f6\u95f2\u7f6e\u7684 Macbook Pro \u7684\u526f\u673a\uff0c\u5728\u66f4\u65b0\u4e86\u6700\u65b0\u7cfb\u7edf\u73af\u5883\u540e\u5f00\u59cb\u4f7f\u7528\u3002\u6211\u901a\u8fc7Launchpad\u542f\u52a8\u7ec8\u7aef\uff0c\u5728\u4e0a\u9762\u8fdb\u884c\u5de5\u4f5c\u3002\u786e\u8ba4\u4f7f\u7528\u7684\u662fChrome\u3002<\/p>\n<h2>\u9a6c\u4e0a s\u00f9)<\/h2>\n<p>\u6211\u5c07\u958b\u59cb\u5f9e\u982d\u95b1\u8b80\u9019\u7bc7\u6587\u7ae0\u3002<\/p>\n<p>\u968f\u7740\u4e00\u79cd\u6a21\u68f1\u4e24\u53ef\u7684\u5fc3\u60c5\uff0c\u6211\u5f00\u59cb\u659c\u773c\u770b\u7740\u624b\u91cc\u7684\u4e66\u3002<br \/>\n\u771f\u662f\u65b0\u4eba\u6240\u72ec\u6709\u7684\u884c\u4e3a\u3002<\/p>\n<p>\u6211\u4f1a\u8fc5\u901f\u5730\u521b\u5efa\u4e00\u4e2aSpring Boot\u9879\u76ee\u3002<\/p>\n<pre class=\"post-pre\"><code>~\/work $ unzip ~\/Downloads\/spring-boot-vue-app.zip\r\nArchive:  \/Users\/aucfan-engineer\/Downloads\/spring-boot-vue-app.zip\r\n   creating: spring-boot-vue-app\/\r\n  inflating: spring-boot-vue-app\/.gitignore  \r\n   creating: spring-boot-vue-app\/src\/\r\n   creating: spring-boot-vue-app\/src\/main\/\r\n   creating: spring-boot-vue-app\/src\/main\/kotlin\/\r\n   creating: spring-boot-vue-app\/src\/main\/kotlin\/io\/\r\n   creating: spring-boot-vue-app\/src\/main\/kotlin\/io\/aucfan\/\r\n   creating: spring-boot-vue-app\/src\/main\/kotlin\/io\/aucfan\/sample\/\r\n   creating: spring-boot-vue-app\/src\/main\/kotlin\/io\/aucfan\/sample\/spring\/\r\n   creating: spring-boot-vue-app\/src\/main\/kotlin\/io\/aucfan\/sample\/spring\/boot\/\r\n   creating: spring-boot-vue-app\/src\/main\/kotlin\/io\/aucfan\/sample\/spring\/boot\/vue\/\r\n  inflating: spring-boot-vue-app\/src\/main\/kotlin\/io\/aucfan\/sample\/spring\/boot\/vue\/SpringBootVueAppApplication.kt  \r\n   creating: spring-boot-vue-app\/src\/main\/resources\/\r\n  inflating: spring-boot-vue-app\/src\/main\/resources\/application.properties  \r\n   creating: spring-boot-vue-app\/src\/test\/\r\n   creating: spring-boot-vue-app\/src\/test\/kotlin\/\r\n   creating: spring-boot-vue-app\/src\/test\/kotlin\/io\/\r\n   creating: spring-boot-vue-app\/src\/test\/kotlin\/io\/aucfan\/\r\n   creating: spring-boot-vue-app\/src\/test\/kotlin\/io\/aucfan\/sample\/\r\n   creating: spring-boot-vue-app\/src\/test\/kotlin\/io\/aucfan\/sample\/spring\/\r\n   creating: spring-boot-vue-app\/src\/test\/kotlin\/io\/aucfan\/sample\/spring\/boot\/\r\n   creating: spring-boot-vue-app\/src\/test\/kotlin\/io\/aucfan\/sample\/spring\/boot\/vue\/\r\n  inflating: spring-boot-vue-app\/src\/test\/kotlin\/io\/aucfan\/sample\/spring\/boot\/vue\/SpringBootVueAppApplicationTests.kt  \r\n  inflating: spring-boot-vue-app\/settings.gradle.kts  \r\n  inflating: spring-boot-vue-app\/gradlew  \r\n  inflating: spring-boot-vue-app\/build.gradle.kts  \r\n  inflating: spring-boot-vue-app\/HELP.md  \r\n   creating: spring-boot-vue-app\/gradle\/\r\n   creating: spring-boot-vue-app\/gradle\/wrapper\/\r\n  inflating: spring-boot-vue-app\/gradle\/wrapper\/gradle-wrapper.properties  \r\n  inflating: spring-boot-vue-app\/gradle\/wrapper\/gradle-wrapper.jar  \r\n  inflating: spring-boot-vue-app\/gradlew.bat\r\n<\/code><\/pre>\n<p>\u53ea\u662f\u70b9\u51fb\u4e86URL\u94fe\u63a5\uff0c\u6309\u7167\u56fe\u7247\u9009\u62e9\u4e86\u5355\u9009\u6309\u94ae\u5e76\u4e0b\u8f7d\u4e86\u6587\u4ef6\uff0c\u7136\u540e\u5c55\u5f00\u4e86\u4e0b\u8f7d\u7684\u6587\u4ef6\u800c\u5df2\uff0c\u6240\u4ee5\u867d\u7136\u5c4f\u5e55\u6709\u4e9b\u53d8\u5316\uff0c\u4f46\u8fd8\u6ca1\u6709\u505a\u4efb\u4f55\u4e8b\u60c5\u7684\u611f\u89c9\uff0c\u63a5\u4e0b\u6765\u8981\u8fdb\u884cSpring Boot\u9879\u76ee\u7684\u5b50\u9879\u76ee\u5316\u3002<\/p>\n<pre class=\"post-pre\"><code>~\/work\/spring-boot-vue-app $ mkdir web-flux-server\r\n~\/work\/spring-boot-vue-app $ mv src web-flux-server\r\n~\/work\/spring-boot-vue-app $ vim settings.gradle.kts \r\n~\/work\/spring-boot-vue-app $ vim build.gradle.kts web-flux-server\/build.gradle.kts\r\n2 files to edit\r\n<\/code><\/pre>\n<p>\u53ea\u9700\u8981\u5c06\u6587\u7ae0\u5757\u590d\u5236\uff0c\u5e76\u5c06\u5176\u653e\u5165\u6253\u5f00\u7684\u6587\u4ef6\u4e2d\uff0c\u56e0\u6b64\u6211\u7684\u7ec8\u7aef\u5c31\u50cf\u662f\u8fd9\u6837\u4e00\u4e2a\u4f4e\u8c03\u7684\u611f\u89c9\u3002<br \/>\n\u7136\u540e\u5c31\u53ef\u4ee5\u7ee7\u7eed\u52a0\u5165\u4e0b\u4e00\u4e2a Vue.js \u5b50\u9879\u76ee\u3002<\/p>\n<pre class=\"post-pre\"><code>~\/work\/spring-boot-vue-app $ vim settings.gradle.kts \r\n~\/work\/spring-boot-vue-app $ vim build.gradle.kts \r\n~\/work\/spring-boot-vue-app $ mkdir web-vue2-ui\r\n~\/work\/spring-boot-vue-app $ vim web-vue2-ui\/build.gradle.kts\r\n<\/code><\/pre>\n<p>\u5728\u8bbe\u60f3\u4fee\u6539\u914d\u7f6e\u6587\u4ef6\u7684\u540c\u65f6\uff0c\u6211\u6267\u884c\u4e86\u8be5\u547d\u4ee4\u3002<\/p>\n<pre class=\"post-pre\"><code>~\/work\/spring-boot-vue-app $ .\/gradlew :web-vue2-ui:yarn  \r\nDownloading https:\/\/services.gradle.org\/distributions\/gradle-7.3.1-bin.zip\r\n...........10%...........20%...........30%...........40%...........50%...........60%...........70%...........80%...........90%...........100%\r\n\r\nWelcome to Gradle 7.3.1!\r\n\r\nHere are the highlights of this release:\r\n - Easily declare new test suites in Java projects\r\n - Support for Java 17\r\n - Support for Scala 3\r\n\r\nFor more details see https:\/\/docs.gradle.org\/7.3.1\/release-notes.html\r\n\r\nStarting a Gradle Daemon (subsequent builds will be faster)\r\n\r\n&gt; Task :web-vue2-ui:yarnSetup\r\n\r\n&gt; yarn@1.22.17 preinstall \/Users\/aucfan-engineer\/work\/spring-boot-vue-app\/web-vue2-ui\/.cache\/yarn\/yarn-v1.22.17\/lib\/node_modules\/yarn\r\n&gt; :; (node .\/preinstall.js &gt; \/dev\/null 2&gt;&amp;1 || true)\r\n\r\n\/Users\/aucfan-engineer\/work\/spring-boot-vue-app\/web-vue2-ui\/.cache\/yarn\/yarn-v1.22.17\/bin\/yarnpkg -&gt; \/Users\/aucfan-engineer\/work\/spring-boot-vue-app\/web-vue2-ui\/.cache\/yarn\/yarn-v1.22.17\/lib\/node_modules\/yarn\/bin\/yarn.js\r\n\/Users\/aucfan-engineer\/work\/spring-boot-vue-app\/web-vue2-ui\/.cache\/yarn\/yarn-v1.22.17\/bin\/yarn -&gt; \/Users\/aucfan-engineer\/work\/spring-boot-vue-app\/web-vue2-ui\/.cache\/yarn\/yarn-v1.22.17\/lib\/node_modules\/yarn\/bin\/yarn.js\r\n+ yarn@1.22.17\r\nadded 1 package in 0.788s\r\n\r\n&gt; Task :web-vue2-ui:yarn\r\nyarn install v1.22.17\r\ninfo No lockfile found.\r\n[1\/4] Resolving packages...\r\n[2\/4] Fetching packages...\r\n[3\/4] Linking dependencies...\r\n[4\/4] Building fresh packages...\r\nsuccess Saved lockfile.\r\nDone in 0.04s.\r\n\r\nBUILD SUCCESSFUL in 1m 38s\r\n3 actionable tasks: 3 executed\r\n<\/code><\/pre>\n<p>\u753b\u9762\u5fae\u5fae\u6643\u52a8\u7684\u611f\u89c9\u5f88\u6709\u8da3\u3002\u3002\u3002<\/p>\n<p>\u55ef\uff0c<\/p>\n<blockquote><p>\u6211\u4f1a\u4e8b\u5148\u7ec3\u4e60\u4f7f\u7528 yarn \u547d\u4ee4\u3002<\/p><\/blockquote>\n<p>\u5728\u5fc3\u91cc\u6697\u81ea\u5410\u69fd\uff0c\u4f60\u521a\u624d\u8bf4\u7684\u90fd\u53ea\u662f\u5634\u4e0a\u8bf4\u8bf4\uff0c\u73b0\u5728\u771f\u52a8\u8d77\u6765\u4e86\u5417\uff1f<\/p>\n<p>\u55ef\uff0c\u4e4b\u540e\u5c4f\u5e55\u4e5f\u662f\u4e00\u76f4\u5728\u4e0d\u65ad\u5730\u6eda\u52a8\u3002<\/p>\n<pre class=\"post-pre\"><code>~\/work\/spring-boot-vue-app\/web-vue2-ui $ .cache\/yarn\/yarn-v1.22.17\/bin\/yarn init\r\nyarn init v1.22.17\r\nquestion name (web-vue2-ui): spring-boot-vue-app-ui\r\nquestion version (1.0.0): 0.0.1\r\nquestion description: Spring Boot + Vue application\r\nquestion entry point (index.js): \r\nquestion repository url: \r\nquestion author: \r\nquestion license (MIT): \r\nquestion private: \r\nsuccess Saved package.json\r\n\u2728  Done in 96.04s.\r\n~\/work\/spring-boot-vue-app\/web-vue2-ui $ .cache\/yarn\/yarn-v1.22.17\/bin\/yarn add @vue\/cli \r\nyarn add v1.22.17\r\n[1\/4] ?  Resolving packages...\r\n<\/code><\/pre>\n<details>(\u4e2d\u7565)warning @vue\/cli &gt; @vue\/cli-shared-utils &gt; request@2.88.2: request has been deprecated, see https:\/\/github.com\/request\/request\/issues\/3142<br \/>\nwarning @vue\/cli &gt; @vue\/cli-shared-utils &gt; @hapi\/joi@15.1.1: Switch to &#8216;npm install joi&#8217;<br \/>\nwarning @vue\/cli &gt; @vue\/cli-shared-utils &gt; request &gt; har-validator@5.1.5: this library is no longer supported<br \/>\nwarning @vue\/cli &gt; @vue\/cli-shared-utils &gt; request &gt; uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https:\/\/v8.dev\/blog\/math-random for details.<br \/>\nwarning @vue\/cli &gt; @vue\/cli-shared-utils &gt; @hapi\/joi &gt; @hapi\/address@2.1.4: Moved to &#8216;npm install @sideway\/address&#8217;<br \/>\nwarning @vue\/cli &gt; @vue\/cli-shared-utils &gt; @hapi\/joi &gt; @hapi\/bourne@1.3.2: This version has been deprecated and is no longer supported or maintained<br \/>\nwarning @vue\/cli &gt; @vue\/cli-shared-utils &gt; @hapi\/joi &gt; @hapi\/topo@3.1.6: This version has been deprecated and is no longer supported or maintained<br \/>\nwarning @vue\/cli &gt; @vue\/cli-shared-utils &gt; @hapi\/joi &gt; @hapi\/hoek@8.5.1: This version has been deprecated and is no longer supported or maintained<br \/>\nwarning @vue\/cli &gt; @vue\/cli-shared-utils &gt; @hapi\/joi &gt; @hapi\/topo &gt; @hapi\/hoek@8.5.1: This version has been deprecated and is no longer supported or maintained<br \/>\nwarning @vue\/cli &gt; @vue\/cli-ui &gt; apollo-server-express &gt; graphql-tools@4.0.8: This package has been deprecated and now it only exports makeExecutableSchema.\\nAnd it will no longer receive updates.\\nWe recommend you to migrate to scoped packages such as @graphql-tools\/schema, @graphql-tools\/utils and etc.\\nCheck out https:\/\/www.graphql-tools.com to learn what package you should use instead<br \/>\nwarning @vue\/cli &gt; @vue\/cli-ui &gt; apollo-server-express &gt; graphql-tools &gt; uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https:\/\/v8.dev\/blog\/math-random for details.<br \/>\nwarning @vue\/cli &gt; @vue\/cli-ui &gt; apollo-server-express &gt; apollo-server-core &gt; graphql-tools@4.0.8: This package has been deprecated and now it only exports makeExecutableSchema.\\nAnd it will no longer receive updates.\\nWe recommend you to migrate to scoped packages such as @graphql-tools\/schema, @graphql-tools\/utils and etc.\\nCheck out https:\/\/www.graphql-tools.com to learn what package you should use instead<br \/>\nwarning @vue\/cli &gt; @vue\/cli-ui &gt; apollo-server-express &gt; apollo-server-core &gt; apollo-cache-control@0.14.0: The functionality provided by the `apollo-cache-control` package is built in to `apollo-server-core` starting with Apollo Server 3. See https:\/\/www.apollographql.com\/docs\/apollo-server\/migration\/#cachecontrol for details.<br \/>\nwarning @vue\/cli &gt; @vue\/cli-ui &gt; apollo-server-express &gt; apollo-server-core &gt; apollo-tracing@0.15.0: The `apollo-tracing` package is no longer part of Apollo Server 3. See https:\/\/www.apollographql.com\/docs\/apollo-server\/migration\/#tracing for details<br \/>\nwarning @vue\/cli &gt; @vue\/cli-ui &gt; apollo-server-express &gt; apollo-server-core &gt; graphql-extensions@0.15.0: The `graphql-extensions` API has been removed from Apollo Server 3. Use the plugin API instead: https:\/\/www.apollographql.com\/docs\/apollo-server\/integrations\/plugins\/<br \/>\nwarning @vue\/cli &gt; globby &gt; fast-glob &gt; micromatch &gt; snapdragon &gt; source-map-resolve &gt; resolve-url@0.2.1: https:\/\/github.com\/lydell\/resolve-url#deprecated<br \/>\nwarning @vue\/cli &gt; globby &gt; fast-glob &gt; micromatch &gt; snapdragon &gt; source-map-resolve &gt; urix@0.1.0: Please see https:\/\/github.com\/lydell\/urix#deprecated<br \/>\n[2\/4] ? Fetching packages&#8230;<br \/>\n[3\/4] ? Linking dependencies&#8230;<br \/>\n[4\/4] ? Building fresh packages&#8230;<br \/>\nsuccess Saved lockfile.<br \/>\nsuccess Saved 595 new dependencies.<br \/>\ninfo Direct dependencies<br \/>\n\u2514\u2500 @vue\/cli@4.5.15<br \/>\ninfo All dependencies<br \/>\n\u251c\u2500 @akryum\/winattr@3.0.0<br \/>\n\u251c\u2500 @apollo\/protobufjs@1.2.2<br \/>\n\u251c\u2500 @apollographql\/graphql-upload-8-fork@8.1.3<br \/>\n\u251c\u2500 @babel\/compat-data@7.16.4<br \/>\n\u251c\u2500 @babel\/core@7.16.0<br \/>\n\u251c\u2500 @babel\/helper-builder-binary-assignment-operator-visitor@7.16.0<br \/>\n\u251c\u2500 @babel\/helper-compilation-targets@7.16.3<br \/>\n\u251c\u2500 @babel\/helper-explode-assignable-expression@7.16.0<br \/>\n\u251c\u2500 @babel\/helper-get-function-arity@7.16.0<br \/>\n\u251c\u2500 @babel\/helper-module-imports@7.16.0<br \/>\n\u251c\u2500 @babel\/helper-remap-async-to-generator@7.16.4<br \/>\n\u251c\u2500 @babel\/helper-wrap-function@7.16.0<br \/>\n\u251c\u2500 @babel\/helpers@7.16.3<br \/>\n\u251c\u2500 @babel\/highlight@7.16.0<br \/>\n\u251c\u2500 @babel\/parser@7.16.4<br \/>\n\u251c\u2500 @babel\/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.16.2<br \/>\n\u251c\u2500 @babel\/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-proposal-async-generator-functions@7.16.4<br \/>\n\u251c\u2500 @babel\/plugin-proposal-class-properties@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-proposal-class-static-block@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-proposal-dynamic-import@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-proposal-export-namespace-from@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-proposal-json-strings@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-proposal-logical-assignment-operators@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-proposal-nullish-coalescing-operator@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-proposal-numeric-separator@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-proposal-object-rest-spread@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-proposal-optional-catch-binding@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-proposal-private-methods@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-proposal-private-property-in-object@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-proposal-unicode-property-regex@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-syntax-class-properties@7.12.13<br \/>\n\u251c\u2500 @babel\/plugin-syntax-flow@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-syntax-top-level-await@7.14.5<br \/>\n\u251c\u2500 @babel\/plugin-syntax-typescript@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-arrow-functions@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-async-to-generator@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-block-scoped-functions@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-block-scoping@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-classes@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-computed-properties@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-destructuring@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-dotall-regex@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-duplicate-keys@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-exponentiation-operator@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-flow-strip-types@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-for-of@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-function-name@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-literals@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-member-expression-literals@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-modules-amd@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-modules-commonjs@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-modules-systemjs@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-modules-umd@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-named-capturing-groups-regex@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-new-target@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-object-super@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-parameters@7.16.3<br \/>\n\u251c\u2500 @babel\/plugin-transform-property-literals@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-regenerator@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-reserved-words@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-shorthand-properties@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-spread@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-sticky-regex@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-template-literals@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-typeof-symbol@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-typescript@7.16.1<br \/>\n\u251c\u2500 @babel\/plugin-transform-unicode-escapes@7.16.0<br \/>\n\u251c\u2500 @babel\/plugin-transform-unicode-regex@7.16.0<br \/>\n\u251c\u2500 @babel\/preset-env@7.16.4<br \/>\n\u251c\u2500 @babel\/preset-flow@7.16.0<br \/>\n\u251c\u2500 @babel\/preset-modules@0.1.5<br \/>\n\u251c\u2500 @babel\/preset-typescript@7.16.0<br \/>\n\u251c\u2500 @babel\/register@7.16.0<br \/>\n\u251c\u2500 @babel\/runtime@7.16.3<br \/>\n\u251c\u2500 @hapi\/address@2.1.4<br \/>\n\u251c\u2500 @hapi\/bourne@1.3.2<br \/>\n\u251c\u2500 @hapi\/hoek@8.5.1<br \/>\n\u251c\u2500 @hapi\/joi@15.1.1<br \/>\n\u251c\u2500 @hapi\/topo@3.1.6<br \/>\n\u251c\u2500 @josephg\/resolvable@1.0.1<br \/>\n\u251c\u2500 @mrmlnc\/readdir-enhanced@2.2.1<br \/>\n\u251c\u2500 @nodelib\/fs.scandir@2.1.5<br \/>\n\u251c\u2500 @nodelib\/fs.stat@2.0.5<br \/>\n\u251c\u2500 @nodelib\/fs.walk@1.2.8<br \/>\n\u251c\u2500 @protobufjs\/aspromise@1.1.2<br \/>\n\u251c\u2500 @protobufjs\/base64@1.1.2<br \/>\n\u251c\u2500 @protobufjs\/codegen@2.0.4<br \/>\n\u251c\u2500 @protobufjs\/eventemitter@1.1.0<br \/>\n\u251c\u2500 @protobufjs\/fetch@1.1.0<br \/>\n\u251c\u2500 @protobufjs\/float@1.0.2<br \/>\n\u251c\u2500 @protobufjs\/path@1.1.2<br \/>\n\u251c\u2500 @protobufjs\/pool@1.1.0<br \/>\n\u251c\u2500 @protobufjs\/utf8@1.1.0<br \/>\n\u251c\u2500 @sindresorhus\/is@0.7.0<br \/>\n\u251c\u2500 @types\/accepts@1.3.5<br \/>\n\u251c\u2500 @types\/body-parser@1.19.0<br \/>\n\u251c\u2500 @types\/content-disposition@0.5.4<br \/>\n\u251c\u2500 @types\/cookies@0.7.7<br \/>\n\u251c\u2500 @types\/cors@2.8.10<br \/>\n\u251c\u2500 @types\/ejs@2.7.0<br \/>\n\u251c\u2500 @types\/express-serve-static-core@4.17.26<br \/>\n\u251c\u2500 @types\/fs-capacitor@2.0.0<br \/>\n\u251c\u2500 @types\/glob@7.2.0<br \/>\n\u251c\u2500 @types\/http-assert@1.5.3<br \/>\n\u251c\u2500 @types\/http-errors@1.8.1<br \/>\n\u251c\u2500 @types\/inquirer@6.5.0<br \/>\n\u251c\u2500 @types\/jscodeshift@0.7.2<br \/>\n\u251c\u2500 @types\/koa-compose@3.2.5<br \/>\n\u251c\u2500 @types\/long@4.0.1<br \/>\n\u251c\u2500 @types\/mime@1.3.2<br \/>\n\u251c\u2500 @types\/minimatch@3.0.5<br \/>\n\u251c\u2500 @types\/normalize-package-data@2.4.1<br \/>\n\u251c\u2500 @types\/range-parser@1.2.4<br \/>\n\u251c\u2500 @types\/serve-static@1.13.10<br \/>\n\u251c\u2500 @types\/through@0.0.30<br \/>\n\u251c\u2500 @types\/ws@7.4.7<br \/>\n\u251c\u2500 @vue\/cli-ui-addon-webpack@4.5.15<br \/>\n\u251c\u2500 @vue\/cli-ui-addon-widgets@4.5.15<br \/>\n\u251c\u2500 @vue\/cli-ui@4.5.15<br \/>\n\u251c\u2500 @vue\/cli@4.5.15<br \/>\n\u251c\u2500 @vue\/compiler-core@3.2.23<br \/>\n\u251c\u2500 @vue\/compiler-dom@3.2.23<br \/>\n\u251c\u2500 @wry\/equality@0.1.11<br \/>\n\u251c\u2500 accepts@1.3.7<br \/>\n\u251c\u2500 aggregate-error@3.1.0<br \/>\n\u251c\u2500 ajv@6.12.6<br \/>\n\u251c\u2500 ansi-align@3.0.1<br \/>\n\u251c\u2500 ansi-escapes@4.3.2<br \/>\n\u251c\u2500 ansi-regex@5.0.1<br \/>\n\u251c\u2500 ansi-styles@4.3.0<br \/>\n\u251c\u2500 apollo-cache-control@0.14.0<br \/>\n\u251c\u2500 apollo-datasource@0.9.0<br \/>\n\u251c\u2500 apollo-graphql@0.9.5<br \/>\n\u251c\u2500 apollo-link@1.2.14<br \/>\n\u251c\u2500 apollo-server-core@2.25.3<br \/>\n\u251c\u2500 apollo-server-errors@2.5.0<br \/>\n\u251c\u2500 apollo-server-express@2.25.3<br \/>\n\u251c\u2500 apollo-tracing@0.15.0<br \/>\n\u251c\u2500 apollo-utilities@1.3.4<br \/>\n\u251c\u2500 archive-type@4.0.0<br \/>\n\u251c\u2500 argparse@1.0.10<br \/>\n\u251c\u2500 arr-flatten@1.1.0<br \/>\n\u251c\u2500 array-flatten@1.1.1<br \/>\n\u251c\u2500 array-union@1.0.2<br \/>\n\u251c\u2500 array-uniq@1.0.3<br \/>\n\u251c\u2500 asn1@0.2.6<br \/>\n\u251c\u2500 assign-symbols@1.0.0<br \/>\n\u251c\u2500 async-retry@1.3.3<br \/>\n\u251c\u2500 async@2.6.3<br \/>\n\u251c\u2500 asynckit@0.4.0<br \/>\n\u251c\u2500 atob@2.1.2<br \/>\n\u251c\u2500 aws-sign2@0.7.0<br \/>\n\u251c\u2500 aws4@1.11.0<br \/>\n\u251c\u2500 babel-core@7.0.0-bridge.0<br \/>\n\u251c\u2500 babel-plugin-polyfill-corejs2@0.3.0<br \/>\n\u251c\u2500 babel-plugin-polyfill-corejs3@0.4.0<br \/>\n\u251c\u2500 babel-plugin-polyfill-regenerator@0.3.0<br \/>\n\u251c\u2500 backo2@1.0.2<br \/>\n\u251c\u2500 balanced-match@1.0.2<br \/>\n\u251c\u2500 base@0.11.2<br \/>\n\u251c\u2500 base64-js@1.5.1<br \/>\n\u251c\u2500 bcrypt-pbkdf@1.0.2<br \/>\n\u251c\u2500 bl@1.2.3<br \/>\n\u251c\u2500 body-parser@1.19.0<br \/>\n\u251c\u2500 boxen@4.2.0<br \/>\n\u251c\u2500 brace-expansion@1.1.11<br \/>\n\u251c\u2500 braces@2.3.2<br \/>\n\u251c\u2500 browserslist@4.18.1<br \/>\n\u251c\u2500 buffer-alloc-unsafe@1.1.0<br \/>\n\u251c\u2500 buffer-alloc@1.2.0<br \/>\n\u251c\u2500 buffer-crc32@0.2.13<br \/>\n\u251c\u2500 buffer-fill@1.0.0<br \/>\n\u251c\u2500 buffer@5.7.1<br \/>\n\u251c\u2500 builtins@1.0.3<br \/>\n\u251c\u2500 busboy@0.3.1<br \/>\n\u251c\u2500 cache-base@1.0.1<br \/>\n\u251c\u2500 cacheable-request@2.1.4<br \/>\n\u251c\u2500 call-me-maybe@1.0.1<br \/>\n\u251c\u2500 camelcase@5.3.1<br \/>\n\u251c\u2500 caniuse-lite@1.0.30001284<br \/>\n\u251c\u2500 caseless@0.12.0<br \/>\n\u251c\u2500 caw@2.0.1<br \/>\n\u251c\u2500 chalk@2.4.2<br \/>\n\u251c\u2500 chardet@0.7.0<br \/>\n\u251c\u2500 class-utils@0.3.6<br \/>\n\u251c\u2500 clean-stack@2.2.0<br \/>\n\u251c\u2500 cli-boxes@2.2.1<br \/>\n\u251c\u2500 cli-cursor@3.1.0<br \/>\n\u251c\u2500 cli-spinners@2.6.1<br \/>\n\u251c\u2500 cli-width@3.0.0<br \/>\n\u251c\u2500 cliui@7.0.4<br \/>\n\u251c\u2500 clone-deep@4.0.1<br \/>\n\u251c\u2500 clone-response@1.0.2<br \/>\n\u251c\u2500 clone@2.1.2<br \/>\n\u251c\u2500 cmd-shim@3.0.3<br \/>\n\u251c\u2500 collection-visit@1.0.0<br \/>\n\u251c\u2500 color-convert@2.0.1<br \/>\n\u251c\u2500 color-name@1.1.4<br \/>\n\u251c\u2500 colors@1.4.0<br \/>\n\u251c\u2500 combined-stream@1.0.8<br \/>\n\u251c\u2500 commander@2.20.3<br \/>\n\u251c\u2500 commondir@1.0.1<br \/>\n\u251c\u2500 concat-map@0.0.1<br \/>\n\u251c\u2500 config-chain@1.1.13<br \/>\n\u251c\u2500 content-disposition@0.5.3<br \/>\n\u251c\u2500 convert-source-map@1.8.0<br \/>\n\u251c\u2500 cookie-signature@1.0.6<br \/>\n\u251c\u2500 cookie@0.4.0<br \/>\n\u251c\u2500 copy-descriptor@0.1.1<br \/>\n\u251c\u2500 core-js-compat@3.19.2<br \/>\n\u251c\u2500 core-js-pure@3.19.2<br \/>\n\u251c\u2500 core-util-is@1.0.2<br \/>\n\u251c\u2500 cors@2.8.5<br \/>\n\u251c\u2500 cross-spawn@6.0.5<br \/>\n\u251c\u2500 cssfilter@0.0.10<br \/>\n\u251c\u2500 csv-parser@1.12.1<br \/>\n\u251c\u2500 dashdash@1.14.1<br \/>\n\u251c\u2500 debug@2.6.9<br \/>\n\u251c\u2500 decompress-response@3.3.0<br \/>\n\u251c\u2500 decompress-tar@4.1.1<br \/>\n\u251c\u2500 decompress-tarbz2@4.1.1<br \/>\n\u251c\u2500 decompress-targz@4.1.1<br \/>\n\u251c\u2500 decompress-unzip@4.0.1<br \/>\n\u251c\u2500 decompress@4.2.1<br \/>\n\u251c\u2500 defaults@1.0.3<br \/>\n\u251c\u2500 delayed-stream@1.0.0<br \/>\n\u251c\u2500 deprecated-decorator@0.1.6<br \/>\n\u251c\u2500 destroy@1.0.4<br \/>\n\u251c\u2500 dicer@0.3.0<br \/>\n\u251c\u2500 dir-glob@2.2.2<br \/>\n\u251c\u2500 download-git-repo@3.0.2<br \/>\n\u251c\u2500 download@7.1.0<br \/>\n\u251c\u2500 duplexer3@0.1.4<br \/>\n\u251c\u2500 easy-stack@1.0.1<br \/>\n\u251c\u2500 ecc-jsbn@0.1.2<br \/>\n\u251c\u2500 ee-first@1.1.1<br \/>\n\u251c\u2500 ejs@2.7.4<br \/>\n\u251c\u2500 electron-to-chromium@1.4.10<br \/>\n\u251c\u2500 emoji-regex@8.0.0<br \/>\n\u251c\u2500 end-of-stream@1.4.4<br \/>\n\u251c\u2500 entities@2.2.0<br \/>\n\u251c\u2500 envinfo@7.8.1<br \/>\n\u251c\u2500 error-ex@1.3.2<br \/>\n\u251c\u2500 es-abstract@1.19.1<br \/>\n\u251c\u2500 es-to-primitive@1.2.1<br \/>\n\u251c\u2500 estree-walker@2.0.2<br \/>\n\u251c\u2500 esutils@2.0.3<br \/>\n\u251c\u2500 event-pubsub@4.3.0<br \/>\n\u251c\u2500 eventemitter3@3.1.2<br \/>\n\u251c\u2500 exec-sh@0.2.2<br \/>\n\u251c\u2500 expand-brackets@2.1.4<br \/>\n\u251c\u2500 expand-tilde@2.0.2<br \/>\n\u251c\u2500 express-history-api-fallback@2.2.1<br \/>\n\u251c\u2500 ext-list@2.2.2<br \/>\n\u251c\u2500 ext-name@5.0.0<br \/>\n\u251c\u2500 extend@3.0.2<br \/>\n\u251c\u2500 external-editor@3.1.0<br \/>\n\u251c\u2500 extglob@2.0.4<br \/>\n\u251c\u2500 extsprintf@1.3.0<br \/>\n\u251c\u2500 fast-deep-equal@3.1.3<br \/>\n\u251c\u2500 fast-glob@2.2.7<br \/>\n\u251c\u2500 fastq@1.13.0<br \/>\n\u251c\u2500 fd-slicer@1.1.0<br \/>\n\u251c\u2500 figures@3.2.0<br \/>\n\u251c\u2500 filename-reserved-regex@2.0.0<br \/>\n\u251c\u2500 filenamify@2.1.0<br \/>\n\u251c\u2500 fill-range@4.0.0<br \/>\n\u251c\u2500 finalhandler@1.1.2<br \/>\n\u251c\u2500 find-cache-dir@2.1.0<br \/>\n\u251c\u2500 find-up@3.0.0<br \/>\n\u251c\u2500 fkill@6.2.0<br \/>\n\u251c\u2500 flow-parser@0.166.1<br \/>\n\u251c\u2500 for-each@0.3.3<br \/>\n\u251c\u2500 for-in@1.0.2<br \/>\n\u251c\u2500 forever-agent@0.6.1<br \/>\n\u251c\u2500 form-data@2.3.3<br \/>\n\u251c\u2500 forwarded@0.2.0<br \/>\n\u251c\u2500 fs-capacitor@2.0.4<br \/>\n\u251c\u2500 fs-constants@1.0.0<br \/>\n\u251c\u2500 fs-exists-sync@0.1.0<br \/>\n\u251c\u2500 fs.realpath@1.0.0<br \/>\n\u251c\u2500 fswin@2.17.1227<br \/>\n\u251c\u2500 generate-function@1.1.0<br \/>\n\u251c\u2500 generate-object-property@1.2.0<br \/>\n\u251c\u2500 gensync@1.0.0-beta.2<br \/>\n\u251c\u2500 get-caller-file@2.0.5<br \/>\n\u251c\u2500 get-proxy@2.1.0<br \/>\n\u251c\u2500 get-stream@3.0.0<br \/>\n\u251c\u2500 get-symbol-description@1.0.0<br \/>\n\u251c\u2500 get-value@2.0.6<br \/>\n\u251c\u2500 getpass@0.1.7<br \/>\n\u251c\u2500 git-clone@0.1.0<br \/>\n\u251c\u2500 git-config-path@1.0.1<br \/>\n\u251c\u2500 glob-parent@3.1.0<br \/>\n\u251c\u2500 glob-to-regexp@0.3.0<br \/>\n\u251c\u2500 global-dirs@0.1.1<br \/>\n\u251c\u2500 got@8.3.2<br \/>\n\u251c\u2500 graceful-fs@4.2.8<br \/>\n\u251c\u2500 graphql-extensions@0.15.0<br \/>\n\u251c\u2500 graphql-subscriptions@1.2.1<br \/>\n\u251c\u2500 graphql-tag@2.12.6<br \/>\n\u251c\u2500 graphql-type-json@0.3.2<br \/>\n\u251c\u2500 graphql@14.7.0<br \/>\n\u251c\u2500 growly@1.3.0<br \/>\n\u251c\u2500 har-schema@2.0.0<br \/>\n\u251c\u2500 har-validator@5.1.5<br \/>\n\u251c\u2500 has-flag@4.0.0<br \/>\n\u251c\u2500 has-symbol-support-x@1.4.2<br \/>\n\u251c\u2500 has-to-string-tag-x@1.4.1<br \/>\n\u251c\u2500 has-value@1.0.0<br \/>\n\u251c\u2500 homedir-polyfill@1.0.3<br \/>\n\u251c\u2500 hosted-git-info@2.8.9<br \/>\n\u251c\u2500 http-cache-semantics@3.8.1<br \/>\n\u251c\u2500 http-signature@1.2.0<br \/>\n\u251c\u2500 human-signals@1.1.1<br \/>\n\u251c\u2500 ieee754@1.2.1<br \/>\n\u251c\u2500 ignore@4.0.6<br \/>\n\u251c\u2500 import-global@0.1.0<br \/>\n\u251c\u2500 imurmurhash@0.1.4<br \/>\n\u251c\u2500 indent-string@4.0.0<br \/>\n\u251c\u2500 inflight@1.0.6<br \/>\n\u251c\u2500 inquirer@7.3.3<br \/>\n\u251c\u2500 internal-slot@1.0.3<br \/>\n\u251c\u2500 into-stream@3.1.0<br \/>\n\u251c\u2500 ipaddr.js@1.9.1<br \/>\n\u251c\u2500 is-accessor-descriptor@1.0.0<br \/>\n\u251c\u2500 is-arrayish@0.2.1<br \/>\n\u251c\u2500 is-bigint@1.0.4<br \/>\n\u251c\u2500 is-boolean-object@1.1.2<br \/>\n\u251c\u2500 is-callable@1.2.4<br \/>\n\u251c\u2500 is-core-module@2.8.0<br \/>\n\u251c\u2500 is-data-descriptor@1.0.0<br \/>\n\u251c\u2500 is-date-object@1.0.5<br \/>\n\u251c\u2500 is-descriptor@1.0.2<br \/>\n\u251c\u2500 is-docker@2.2.1<br \/>\n\u251c\u2500 is-extglob@2.1.1<br \/>\n\u251c\u2500 is-fullwidth-code-point@3.0.0<br \/>\n\u251c\u2500 is-glob@4.0.3<br \/>\n\u251c\u2500 is-natural-number@4.0.1<br \/>\n\u251c\u2500 is-negative-zero@2.0.1<br \/>\n\u251c\u2500 is-number-object@1.0.6<br \/>\n\u251c\u2500 is-object@1.0.2<br \/>\n\u251c\u2500 is-plain-object@2.0.4<br \/>\n\u251c\u2500 is-promise@2.2.2<br \/>\n\u251c\u2500 is-property@1.0.2<br \/>\n\u251c\u2500 is-regex@1.1.4<br \/>\n\u251c\u2500 is-retry-allowed@1.2.0<br \/>\n\u251c\u2500 is-shared-array-buffer@1.0.1<br \/>\n\u251c\u2500 is-string@1.0.7<br \/>\n\u251c\u2500 is-symbol@1.0.4<br \/>\n\u251c\u2500 is-typedarray@1.0.0<br \/>\n\u251c\u2500 is-weakref@1.0.1<br \/>\n\u251c\u2500 is-windows@1.0.2<br \/>\n\u251c\u2500 is-wsl@1.1.0<br \/>\n\u251c\u2500 isarray@1.0.0<br \/>\n\u251c\u2500 isbinaryfile@4.0.8<br \/>\n\u251c\u2500 isstream@0.1.2<br \/>\n\u251c\u2500 iterall@1.3.0<br \/>\n\u251c\u2500 js-message@1.0.7<br \/>\n\u251c\u2500 js-queue@2.0.2<br \/>\n\u251c\u2500 js-tokens@4.0.0<br \/>\n\u251c\u2500 js-yaml@3.14.1<br \/>\n\u251c\u2500 jscodeshift@0.11.0<br \/>\n\u251c\u2500 jsesc@2.5.2<br \/>\n\u251c\u2500 json-buffer@3.0.0<br \/>\n\u251c\u2500 json-parse-even-better-errors@2.3.1<br \/>\n\u251c\u2500 json-schema-traverse@0.4.1<br \/>\n\u251c\u2500 json-schema@0.4.0<br \/>\n\u251c\u2500 json-stringify-safe@5.0.1<br \/>\n\u251c\u2500 json5@2.2.0<br \/>\n\u251c\u2500 jsonfile@4.0.0<br \/>\n\u251c\u2500 jsprim@1.4.2<br \/>\n\u251c\u2500 keyv@3.0.0<br \/>\n\u251c\u2500 launch-editor@2.2.1<br \/>\n\u251c\u2500 leven@3.1.0<br \/>\n\u251c\u2500 lines-and-columns@1.2.4<br \/>\n\u251c\u2500 locate-path@3.0.0<br \/>\n\u251c\u2500 lodash.clonedeep@4.5.0<br \/>\n\u251c\u2500 lodash.debounce@4.0.8<br \/>\n\u251c\u2500 lodash.merge@4.6.2<br \/>\n\u251c\u2500 lodash.sortby@4.7.0<br \/>\n\u251c\u2500 lodash@4.17.21<br \/>\n\u251c\u2500 log-symbols@2.2.0<br \/>\n\u251c\u2500 loglevel@1.8.0<br \/>\n\u251c\u2500 long@4.0.0<br \/>\n\u251c\u2500 lowdb@1.0.0<br \/>\n\u251c\u2500 make-dir@1.3.0<br \/>\n\u251c\u2500 map-visit@1.0.0<br \/>\n\u251c\u2500 media-typer@0.3.0<br \/>\n\u251c\u2500 merge-descriptors@1.0.1<br \/>\n\u251c\u2500 merge-stream@2.0.0<br \/>\n\u251c\u2500 merge@1.2.1<br \/>\n\u251c\u2500 methods@1.1.2<br \/>\n\u251c\u2500 mime-db@1.51.0<br \/>\n\u251c\u2500 mime@1.6.0<br \/>\n\u251c\u2500 mimic-fn@2.1.0<br \/>\n\u251c\u2500 minimatch@3.0.4<br \/>\n\u251c\u2500 mixin-deep@1.3.2<br \/>\n\u251c\u2500 mkdirp@0.5.5<br \/>\n\u251c\u2500 ms@2.0.0<br \/>\n\u251c\u2500 mute-stream@0.0.8<br \/>\n\u251c\u2500 nanoid@2.1.11<br \/>\n\u251c\u2500 nanomatch@1.2.13<br \/>\n\u251c\u2500 ndjson@1.5.0<br \/>\n\u251c\u2500 neat-csv@2.1.0<br \/>\n\u251c\u2500 negotiator@0.6.2<br \/>\n\u251c\u2500 neo-async@2.6.2<br \/>\n\u251c\u2500 nice-try@1.0.5<br \/>\n\u251c\u2500 node-dir@0.1.17<br \/>\n\u251c\u2500 node-fetch@2.6.6<br \/>\n\u251c\u2500 node-modules-regexp@1.0.0<br \/>\n\u251c\u2500 node-notifier@9.0.1<br \/>\n\u251c\u2500 node-releases@2.0.1<br \/>\n\u251c\u2500 normalize-package-data@2.5.0<br \/>\n\u251c\u2500 normalize-url@2.0.1<br \/>\n\u251c\u2500 npm-conf@1.1.3<br \/>\n\u251c\u2500 oauth-sign@0.9.0<br \/>\n\u251c\u2500 object-assign@4.1.1<br \/>\n\u251c\u2500 object-copy@0.1.0<br \/>\n\u251c\u2500 object-inspect@1.11.0<br \/>\n\u251c\u2500 object-path@0.11.8<br \/>\n\u251c\u2500 object.assign@4.1.2<br \/>\n\u251c\u2500 object.getownpropertydescriptors@2.1.3<br \/>\n\u251c\u2500 once@1.4.0<br \/>\n\u251c\u2500 open@6.4.0<br \/>\n\u251c\u2500 ora@3.4.0<br \/>\n\u251c\u2500 os-tmpdir@1.0.2<br \/>\n\u251c\u2500 p-cancelable@0.4.1<br \/>\n\u251c\u2500 p-event@2.3.1<br \/>\n\u251c\u2500 p-is-promise@1.1.0<br \/>\n\u251c\u2500 p-limit@2.3.0<br \/>\n\u251c\u2500 p-locate@3.0.0<br \/>\n\u251c\u2500 p-try@2.2.0<br \/>\n\u251c\u2500 parse-git-config@2.0.3<br \/>\n\u251c\u2500 parse-json@5.2.0<br \/>\n\u251c\u2500 parse-passwd@1.0.0<br \/>\n\u251c\u2500 pascalcase@0.1.1<br \/>\n\u251c\u2500 path-dirname@1.0.2<br \/>\n\u251c\u2500 path-exists@3.0.0<br \/>\n\u251c\u2500 path-is-absolute@1.0.1<br \/>\n\u251c\u2500 path-key@2.0.1<br \/>\n\u251c\u2500 path-parse@1.0.7<br \/>\n\u251c\u2500 path-to-regexp@0.1.7<br \/>\n\u251c\u2500 path-type@3.0.0<br \/>\n\u251c\u2500 pend@1.2.0<br \/>\n\u251c\u2500 performance-now@2.1.0<br \/>\n\u251c\u2500 picocolors@1.0.0<br \/>\n\u251c\u2500 picomatch@2.3.0<br \/>\n\u251c\u2500 pid-from-port@1.1.3<br \/>\n\u251c\u2500 pinkie-promise@2.0.1<br \/>\n\u251c\u2500 pinkie@2.0.4<br \/>\n\u251c\u2500 pirates@4.0.1<br \/>\n\u251c\u2500 pkg-dir@3.0.0<br \/>\n\u251c\u2500 portfinder@1.0.28<br \/>\n\u251c\u2500 posix-character-classes@0.1.1<br \/>\n\u251c\u2500 prismjs@1.25.0<br \/>\n\u251c\u2500 private@0.1.8<br \/>\n\u251c\u2500 process-exists@3.1.0<br \/>\n\u251c\u2500 process-nextick-args@2.0.1<br \/>\n\u251c\u2500 proto-list@1.2.4<br \/>\n\u251c\u2500 proxy-addr@2.0.7<br \/>\n\u251c\u2500 ps-list@4.1.0<br \/>\n\u251c\u2500 pseudomap@1.0.2<br \/>\n\u251c\u2500 psl@1.8.0<br \/>\n\u251c\u2500 punycode@2.1.1<br \/>\n\u251c\u2500 query-string@5.1.1<br \/>\n\u251c\u2500 queue-microtask@1.2.3<br \/>\n\u251c\u2500 raw-body@2.4.0<br \/>\n\u251c\u2500 read-pkg@5.2.0<br \/>\n\u251c\u2500 readable-stream@2.3.7<br \/>\n\u251c\u2500 recast@0.18.10<br \/>\n\u251c\u2500 regenerate-unicode-properties@9.0.0<br \/>\n\u251c\u2500 regenerator-runtime@0.13.9<br \/>\n\u251c\u2500 regenerator-transform@0.14.5<br \/>\n\u251c\u2500 regexpu-core@4.8.0<br \/>\n\u251c\u2500 regjsgen@0.5.2<br \/>\n\u251c\u2500 regjsparser@0.7.0<br \/>\n\u251c\u2500 repeat-element@1.1.4<br \/>\n\u251c\u2500 request@2.88.2<br \/>\n\u251c\u2500 require-directory@2.1.1<br \/>\n\u251c\u2500 resolve-url@0.2.1<br \/>\n\u251c\u2500 resolve@1.20.0<br \/>\n\u251c\u2500 responselike@1.0.2<br \/>\n\u251c\u2500 restore-cursor@3.1.0<br \/>\n\u251c\u2500 ret@0.1.15<br \/>\n\u251c\u2500 retry@0.13.1<br \/>\n\u251c\u2500 reusify@1.0.4<br \/>\n\u251c\u2500 rimraf@3.0.2<br \/>\n\u251c\u2500 rss-parser@3.12.0<br \/>\n\u251c\u2500 run-async@2.4.1<br \/>\n\u251c\u2500 run-parallel@1.2.0<br \/>\n\u251c\u2500 rxjs@6.6.7<br \/>\n\u251c\u2500 safe-buffer@5.1.2<br \/>\n\u251c\u2500 safer-buffer@2.1.2<br \/>\n\u251c\u2500 sax@1.2.4<br \/>\n\u251c\u2500 sec@1.0.0<br \/>\n\u251c\u2500 seek-bzip@1.0.6<br \/>\n\u251c\u2500 semver@6.3.0<br \/>\n\u251c\u2500 serve-static@1.14.1<br \/>\n\u251c\u2500 set-value@2.0.1<br \/>\n\u251c\u2500 shallow-clone@3.0.1<br \/>\n\u251c\u2500 shebang-regex@1.0.0<br \/>\n\u251c\u2500 shell-quote@1.7.3<br \/>\n\u251c\u2500 shellwords@0.1.1<br \/>\n\u251c\u2500 side-channel@1.0.4<br \/>\n\u251c\u2500 snapdragon-node@2.1.1<br \/>\n\u251c\u2500 snapdragon-util@3.0.1<br \/>\n\u251c\u2500 sort-keys-length@1.0.1<br \/>\n\u251c\u2500 sort-keys@1.1.2<br \/>\n\u251c\u2500 source-map-resolve@0.5.3<br \/>\n\u251c\u2500 source-map-support@0.5.21<br \/>\n\u251c\u2500 source-map-url@0.4.1<br \/>\n\u251c\u2500 source-map@0.6.1<br \/>\n\u251c\u2500 spdx-correct@3.1.1<br \/>\n\u251c\u2500 spdx-exceptions@2.3.0<br \/>\n\u251c\u2500 split-string@3.1.0<br \/>\n\u251c\u2500 split2@2.2.0<br \/>\n\u251c\u2500 sprintf-js@1.0.3<br \/>\n\u251c\u2500 sshpk@1.16.1<br \/>\n\u251c\u2500 static-extend@0.1.2<br \/>\n\u251c\u2500 steno@0.4.4<br \/>\n\u251c\u2500 streamsearch@0.1.2<br \/>\n\u251c\u2500 strict-uri-encode@1.1.0<br \/>\n\u251c\u2500 string_decoder@1.1.1<br \/>\n\u251c\u2500 string.prototype.trimend@1.0.4<br \/>\n\u251c\u2500 string.prototype.trimstart@1.0.4<br \/>\n\u251c\u2500 strip-dirs@2.1.0<br \/>\n\u251c\u2500 strip-final-newline@2.0.0<br \/>\n\u251c\u2500 strip-outer@1.0.1<br \/>\n\u251c\u2500 symbol-observable@1.2.0<br \/>\n\u251c\u2500 tar-stream@1.6.2<br \/>\n\u251c\u2500 taskkill@3.1.0<br \/>\n\u251c\u2500 tasklist@3.1.1<br \/>\n\u251c\u2500 temp@0.8.4<br \/>\n\u251c\u2500 term-size@2.2.1<br \/>\n\u251c\u2500 through@2.3.8<br \/>\n\u251c\u2500 timed-out@4.0.1<br \/>\n\u251c\u2500 tmp@0.0.33<br \/>\n\u251c\u2500 to-buffer@1.1.1<br \/>\n\u251c\u2500 to-fast-properties@2.0.0<br \/>\n\u251c\u2500 to-object-path@0.3.0<br \/>\n\u251c\u2500 to-regex-range@2.1.1<br \/>\n\u251c\u2500 tough-cookie@2.5.0<br \/>\n\u251c\u2500 tr46@0.0.3<br \/>\n\u251c\u2500 trim-repeated@1.0.0<br \/>\n\u251c\u2500 tweetnacl@0.14.5<br \/>\n\u251c\u2500 type-fest@0.8.1<br \/>\n\u251c\u2500 type-is@1.6.18<br \/>\n\u251c\u2500 typescript@4.1.6<br \/>\n\u251c\u2500 unbox-primitive@1.0.1<br \/>\n\u251c\u2500 unbzip2-stream@1.4.3<br \/>\n\u251c\u2500 unicode-canonical-property-names-ecmascript@2.0.0<br \/>\n\u251c\u2500 unicode-match-property-ecmascript@2.0.0<br \/>\n\u251c\u2500 unicode-match-property-value-ecmascript@2.0.0<br \/>\n\u251c\u2500 unicode-property-aliases-ecmascript@2.0.0<br \/>\n\u251c\u2500 union-value@1.0.1<br \/>\n\u251c\u2500 universalify@0.1.2<br \/>\n\u251c\u2500 unpipe@1.0.0<br \/>\n\u251c\u2500 unset-value@1.0.0<br \/>\n\u251c\u2500 uri-js@4.4.1<br \/>\n\u251c\u2500 urix@0.1.0<br \/>\n\u251c\u2500 url-parse-lax@3.0.0<br \/>\n\u251c\u2500 use@3.1.1<br \/>\n\u251c\u2500 util-deprecate@1.0.2<br \/>\n\u251c\u2500 util.promisify@1.1.1<br \/>\n\u251c\u2500 utils-merge@1.0.1<br \/>\n\u251c\u2500 uuid@3.4.0<br \/>\n\u251c\u2500 validate-npm-package-license@3.0.4<br \/>\n\u251c\u2500 validate-npm-package-name@3.0.0<br \/>\n\u251c\u2500 vary@1.1.2<br \/>\n\u251c\u2500 verror@1.10.0<br \/>\n\u251c\u2500 vue-codemod@0.0.5<br \/>\n\u251c\u2500 vue@2.6.14<br \/>\n\u251c\u2500 watch@1.0.2<br \/>\n\u251c\u2500 wcwidth@1.0.1<br \/>\n\u251c\u2500 webidl-conversions@3.0.1<br \/>\n\u251c\u2500 whatwg-url@5.0.0<br \/>\n\u251c\u2500 which-boxed-primitive@1.0.2<br \/>\n\u251c\u2500 widest-line@3.1.0<br \/>\n\u251c\u2500 wrap-ansi@7.0.0<br \/>\n\u251c\u2500 write-file-atomic@2.4.3<br \/>\n\u251c\u2500 ws@7.5.6<br \/>\n\u251c\u2500 xml2js@0.4.23<br \/>\n\u251c\u2500 xmlbuilder@11.0.1<br \/>\n\u251c\u2500 xss@1.0.10<br \/>\n\u251c\u2500 xtend@4.0.2<br \/>\n\u251c\u2500 y18n@5.0.8<br \/>\n\u251c\u2500 yallist@4.0.0<br \/>\n\u251c\u2500 yaml-front-matter@3.4.1<br \/>\n\u251c\u2500 yargs-parser@20.2.9<br \/>\n\u251c\u2500 yargs@16.2.0<br \/>\n\u251c\u2500 yauzl@2.10.0<br \/>\n\u251c\u2500 zen-observable-ts@0.8.21<br \/>\n\u2514\u2500 zen-observable@0.8.15<br \/>\n\u2728 Done in 31.63s.<\/p>\n<\/details>\n<pre class=\"post-pre\"><code>~\/work\/spring-boot-vue-app\/web-vue2-ui $ .\/node_modules\/.bin\/vue create spring-boot-vue-app-ui\r\n\r\n\r\nVue CLI v4.5.15\r\n? Please pick a preset: Default ([Vue 2] babel, eslint)\r\n? Pick the package manager to use when installing dependencies: Yarn\r\n\r\n\r\nVue CLI v4.5.15\r\n\u2728  Creating project in \/Users\/aucfan-engineer\/work\/spring-boot-vue-app\/web-vue2-ui\/spring-boot-vue-app-ui.\r\n\u2699\ufe0f  Installing CLI plugins. This might take a while...\r\n\r\nyarn install v1.19.1\r\ninfo No lockfile found.\r\n[1\/4] ?  Resolving packages...\r\n[2\/4] ?  Fetching packages...\r\n\r\n\r\n\r\nsuccess Saved lockfile.\r\n\u2728  Done in 30.33s.\r\n?  Invoking generators...\r\n?  Installing additional dependencies...\r\n\r\nyarn install v1.19.1\r\n[1\/4] ?  Resolving packages...\r\n[2\/4] ?  Fetching packages...\r\n[3\/4] ?  Linking dependencies...\r\n[4\/4] ?  Building fresh packages...\r\n\r\nsuccess Saved lockfile.\r\n\u2728  Done in 7.85s.\r\n\u2693  Running completion hooks...\r\n\r\n?  Generating README.md...\r\n\r\n?  Successfully created project spring-boot-vue-app-ui.\r\n?  Get started with the following commands:\r\n\r\n $ cd spring-boot-vue-app-ui\r\n $ yarn serve\r\n\r\n~\/work\/spring-boot-vue-app\/web-vue2-ui $ rm -rf node_modules package.json yarn.lock \r\n~\/work\/spring-boot-vue-app\/web-vue2-ui $ mv spring-boot-vue-app-ui\/* .\r\n~\/work\/spring-boot-vue-app\/web-vue2-ui $ mv spring-boot-vue-app-ui\/.gitignore .\r\n~\/work\/spring-boot-vue-app\/web-vue2-ui $ rm -rf spring-boot-vue-app-ui\r\n~\/work\/spring-boot-vue-app\/web-vue2-ui $ vim .gitignore\r\n~\/work\/spring-boot-vue-app\/web-vue2-ui $ vim package.json\r\n<\/code><\/pre>\n<p>\u6240\u4ee5\uff0c\u7ec8\u4e8e\u8fdb\u884c\u4e86\u4e00\u6b21\u64cd\u4f5c\u786e\u8ba4\u3002<br \/>\n\u4e0d\u77e5\u4e3a\u4f55\uff0c\u6bcf\u5f53\u8981\u8fd0\u884c\u7a0b\u5e8f\u65f6\uff0c\u5c31\u4f1a\u6709\u70b9\u5174\u594b\u5462\u3002\u3002<\/p>\n<pre class=\"post-pre\"><code>~\/work\/spring-boot-vue-app\/web-vue2-ui $ .cache\/yarn\/yarn-v1.22.17\/bin\/yarn serve\r\nyarn run v1.22.17\r\n$ vue-cli-service serve\r\n INFO  Starting development server...\r\n98% after emitting CopyPlugin\r\n\r\n DONE  Compiled successfully in 2377ms                                                                                                                                                              23:23:58\r\n\r\n\r\n  App running at:\r\n  - Local:   http:\/\/localhost:8080\/ \r\n  - Network: http:\/\/192.168.3.11:8080\/\r\n\r\n  Note that the development build is not optimized.\r\n  To create a production build, run yarn build.\r\n\r\n<\/code><\/pre>\n<p>\u6267\u884c\u547d\u4ee4\u540e\u6709\u4e00\u79cd\u8fd0\u4f5c\u7684\u611f\u89c9\u3002<br \/>\n\u5f53\u7136\uff0c\u6309\u7167\u8bf4\u660e\u8bbf\u95ee http:\/\/localhost:8080\/\uff0c\u5c06\u663e\u793a\u7c7b\u4f3c\u4e8e\u8bf4\u660e\u4e2d\u7684\u4e3b\u9875\u3002<br \/>\n&#8230;\u8fd9\u4e2a\u6807\u5fd7\u7559\u4e0b\u4e86\u5f88\u6df1\u7684\u5370\u8c61\uff0c\u6709\u70b9\u50cf\u663e\u793a\u4e86\u9ed8\u8ba4\u7684\u67d0\u4e9b\u5185\u5bb9\uff0c\u8ba9\u4eba\u611f\u89c9\u81ea\u5df1\u597d\u50cf\u6ca1\u505a\u4ec0\u4e48&#8230;<\/p>\n<p>\u4e00\u65e6\u5b8c\u6210\uff0c\u5c06\u8fdb\u4e00\u6b65\u5b9e\u73b0 Spring Boot \u548c Vue.js \u5b50\u9879\u76ee\u7684\u534f\u4f5c\u3002<br \/>\n\u867d\u7136\u672c\u5e94\u4e0d\u82b1\u592a\u591a\u65f6\u95f4\uff0c\u4f46\u662f\u5fc3\u60c5\u5df2\u7ecf\u5b8c\u5168\u53d8\u6210\u4e86\u5de5\u4f5c\u72c2\u3002<\/p>\n<pre class=\"post-pre\"><code>^C\r\n~\/work\/spring-boot-vue-app\/web-vue2-ui $ cd ..\r\n~\/work\/spring-boot-vue-app $ git init\r\nxcrun: error: invalid active developer path (\/Library\/Developer\/CommandLineTools), missing xcrun at: \/Library\/Developer\/CommandLineTools\/usr\/bin\/xcrun\r\n<\/code><\/pre>\n<p>\u7ed9\u3002\u7b2c\u4e00\u6b21\u9047\u5230\u9519\u8bef\u4fe1\u606f\uff01\uff01\u6fc0\u52a8\u4e0d\u5df2<br \/>\n\u679c\u7136\uff0c\u5982\u679c\u6ca1\u6709\u9519\u8bef\u5c31\u65e0\u6cd5\u611f\u53d7\u5230\u6311\u6218\u7684\u5fc3\u60c5\uff0c\u8fd9\u79cd\u611f\u89c9\u6709\u70b9\u4e0d\u5bf9\u52b2\u3002\u771f\u597d\u3002<\/p>\n<p>\u55ef\uff0c\u53ef\u4ee5\u5411\u8c37\u6b4c\u8001\u5e08\u63d0\u95ee\uff0c\u5ffd\u7565\u7b54\u6848\u7684\u6b63\u786e\u6027\uff0c\u7136\u540e\u8fc5\u901f\u5730\u505a\u7247\u65ad\u3002<\/p>\n<pre class=\"post-pre\"><code>~\/work\/spring-boot-vue-app $ xcode-select --install\r\nxcode-select: note: install requested for command line developer tools\r\n~\/work\/spring-boot-vue-app $ git init                     \r\nhint: Using 'master' as the name for the initial branch. This default branch name\r\nhint: is subject to change. To configure the initial branch name to use in all\r\nhint: of your new repositories, which will suppress this warning, call:\r\nhint: \r\nhint:   git config --global init.defaultBranch &lt;name&gt;\r\nhint: \r\nhint: Names commonly chosen instead of 'master' are 'main', 'trunk' and\r\nhint: 'development'. The just-created branch can be renamed via this command:\r\nhint: \r\nhint:   git branch -m &lt;name&gt;\r\nInitialized empty Git repository in \/Users\/aucfan-engineer\/work\/spring-boot-vue-app\/.git\/\r\n<\/code><\/pre>\n<p>\u7136\u540e\uff0c\u9ed8\u9ed8\u5730\u7ee7\u7eed\u524d\u8fdb&#8230; \u524d\u8fdb&#8230;<\/p>\n<pre class=\"post-pre\"><code>~\/work\/spring-boot-vue-app $ vim web-vue2-ui\/package.json \r\n~\/work\/spring-boot-vue-app $ vim .gitignore\r\n~\/work\/spring-boot-vue-app $ .\/gradlew :web-vue2-ui:yarn_build \r\n\r\n&gt; Task :web-vue2-ui:yarn_build\r\nyarn run v1.22.17\r\n$ vue-cli-service build --dest ..\/web-flux-server\/src\/main\/resources\/static\/\r\n\r\n-  Building for production...\r\n DONE  Compiled successfully in 4415ms23:33:45\r\n\r\n  File                                      Size             Gzipped\r\n\r\n  ..\/web-flux-server\/src\/main\/resources\/    93.69 KiB        33.62 KiB\r\n  static\/js\/chunk-vendors.ed938911.js\r\n  ..\/web-flux-server\/src\/main\/resources\/    4.58 KiB         1.63 KiB\r\n  static\/js\/app.84f70641.js\r\n  ..\/web-flux-server\/src\/main\/resources\/    0.33 KiB         0.23 KiB\r\n  static\/css\/app.fb0c6e1c.css\r\n\r\n  Images and other types of assets omitted.\r\n\r\n DONE  Build complete. The ..\/web-flux-server\/src\/main\/resources\/static directory is ready to be deployed.\r\n INFO  Check out deployment instructions at https:\/\/cli.vuejs.org\/guide\/deployment.html\r\n\r\nDone in 8.15s.\r\n\r\nBUILD SUCCESSFUL in 9s\r\n3 actionable tasks: 1 executed, 2 up-to-date\r\n~\/work\/spring-boot-vue-app $ vim web-vue2-ui\/build.gradle.kts \r\n~\/work\/spring-boot-vue-app $ vim web-flux-server\/build.gradle.kts\r\n~\/work\/spring-boot-vue-app $ vim web-flux-server\/src\/main\/kotlin\/io\/aucfan\/sample\/spring\/boot\/vue\/IndexHandler.kt\r\n~\/work\/spring-boot-vue-app $ vim web-flux-server\/src\/main\/kotlin\/io\/aucfan\/sample\/spring\/boot\/vue\/IndexRouterConfiguration.kt\r\n<\/code><\/pre>\n<p>\u5feb\u6765\u8fdb\u884c\u9879\u76ee\u7684\u6784\u5efa\u548c\u6267\u884c\u5427\uff01<\/p>\n<p>\u53ea\u9700\u6309\u4e0b\u56de\u8f66\u952e\uff0c\u7528\u8fd9\u6837\u7684\u5fc3\u60c5\u8f93\u5165\u547d\u4ee4\u3002<\/p>\n<pre class=\"post-pre\"><code>~\/work\/spring-boot-vue-app $ .\/gradlew clean build -x test\r\n\r\n&gt; Configure project :web-flux-server\r\ne: \/Users\/aufan-engineer\/work\/spring-boot-vue-app\/web-flux-server\/build.gradle.kts:30:16: Unresolved reference: ProcessResource\uff56\uff56s\r\ne: \/Users\/aufan-engineer\/work\/spring-boot-vue-app\/web-flux-server\/build.gradle.kts:30:36: Type mismatch: inferred type is () -&gt; Unit but Class&lt;TypeVariable(S)!&gt;! was expected\r\ne: \/Users\/aufan-engineer\/work\/spring-boot-vue-app\/web-flux-server\/build.gradle.kts:31:2: Unresolved reference: dependsOn\r\n\r\nFAILURE: Build failed with an exception.\r\n\r\n* Where:\r\nBuild file '\/Users\/aufan-engineer\/work\/spring-boot-vue-app\/web-flux-server\/build.gradle.kts' line: 30\r\n\r\n* What went wrong:\r\nScript compilation errors:\r\n\r\n  Line 30: tasks.withType&lt;ProcessResource\uff56\uff56s&gt; {\r\n                          ^ Unresolved reference: ProcessResource\uff56\uff56s\r\n\r\n  Line 30: tasks.withType&lt;ProcessResource\uff56\uff56s&gt; {\r\n                                              ^ Type mismatch: inferred type is () -&gt; Unit but Class&lt;TypeVariable(S)!&gt;! was expected\r\n\r\n  Line 31:      dependsOn(\":web-vue2-ui:yarn_build\")\r\n            ^ Unresolved reference: dependsOn\r\n\r\n3 errors\r\n\r\n* Try:\r\n&gt; Run with --stacktrace option to get the stack trace.\r\n&gt; Run with --info or --debug option to get more log output.\r\n&gt; Run with --scan to get full insights.\r\n\r\n* Get more help at https:\/\/help.gradle.org\r\n\r\nBUILD FAILED in 1s\r\n<\/code><\/pre>\n<p>\u4e16\u754c\u4e0a\u6ca1\u6709\u4ec0\u4e48\u4e8b\u60c5\u4f1a\u90a3\u4e48\u987a\u5229\u3002<br \/>\n\u6bcf\u4e2a\u4eba\u5f00\u59cb\u90fd\u4f1a\u5931\u8d25\uff0c\u9996\u5148\u5728\u5fc3\u91cc\u9ed8\u9ed8\u5730\u8bf4\u51fa\u6765\u3002<\/p>\n<p>\u7136\u540e\u5728\u51b7\u9759\u4e0b\u6765\u540e\uff0c\u81ea\u95ee\uff1a\u201c\u54ea\u91cc\u51fa\u9519\u4e86\uff1f\u201d<\/p>\n<p>\u55ef\uff0c\u51fa\u73b0\u4e86\u9519\u8bef\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u4ed4\u7ec6\u770b\u7684\u8bdd\uff0c\u4f1a\u53d1\u73b0\u4e00\u4e9b\u5947\u602a\u7684\u4e0d\u5e73\u8861\u7684\u6587\u5b57&#8230;&#8230;\u3002<\/p>\n<blockquote><p>\u672a\u89e3\u51b3\u7684\u5f15\u7528\uff1a\u5904\u7406\u8d44\u6e90 vs<\/p><\/blockquote>\n<p>\u5728&#8221;code&#8221;\u4e4b\u5916\u611f\u89c9\u66f4\u52a0\u522b\u626d\u554a\uff0c\u5927\u54e5\u4e00\u53f7\uff0c\u4f60\u8ff7\u8ff7\u7cca\u7cca\u5730\u641e\u9519\u4e86\u554a\uff01<\/p>\n<p>\u5f53\u7acb\u523b\u8fdb\u884c\u4fee\u6b63\u5e76\u8bd5\u7740\u8fd0\u884c\u65f6\u3002<\/p>\n<pre class=\"post-pre\"><code>~\/work\/spring-boot-vue-app $ .\/gradlew clean build -x test                     \r\n\r\n&gt; Task :web-vue2-ui:yarn_install\r\nyarn install v1.22.17\r\n[1\/4] Resolving packages...\r\n[2\/4] Fetching packages...\r\n[3\/4] Linking dependencies...\r\n[4\/4] Building fresh packages...\r\nDone in 9.59s.\r\n\r\n&gt; Task :web-vue2-ui:yarn_build\r\nyarn run v1.22.17\r\n$ vue-cli-service build --dest ..\/web-flux-server\/src\/main\/resources\/static\/\r\n\r\n-  Building for production...\r\n DONE  Compiled successfully in 1727ms0:20:59\r\n\r\n  File                                      Size             Gzipped\r\n\r\n  ..\/web-flux-server\/src\/main\/resources\/    93.69 KiB        33.62 KiB\r\n  static\/js\/chunk-vendors.ed938911.js\r\n  ..\/web-flux-server\/src\/main\/resources\/    4.58 KiB         1.63 KiB\r\n  static\/js\/app.84f70641.js\r\n  ..\/web-flux-server\/src\/main\/resources\/    0.33 KiB         0.23 KiB\r\n  static\/css\/app.fb0c6e1c.css\r\n\r\n  Images and other types of assets omitted.\r\n\r\n DONE  Build complete. The ..\/web-flux-server\/src\/main\/resources\/static directory is ready to be deployed.\r\n INFO  Check out deployment instructions at https:\/\/cli.vuejs.org\/guide\/deployment.html\r\n\r\nDone in 5.27s.\r\n\r\nBUILD SUCCESSFUL in 40s\r\n17 actionable tasks: 13 executed, 4 up-to-date\r\n<\/code><\/pre>\n<p>\u597d\u7684?<\/p>\n<pre class=\"post-pre\"><code>~\/work\/spring-boot-vue-app $ cd web-flux-server\/build\/libs\/                                                  \r\n~\/work\/spring-boot-vue-app\/web-flux-server\/build\/libs $ java -jar spring-boot-vue-app-web-flux-server-0.0.1-SNAPSHOT.jar \r\n\r\n  .   ____          _            __ _ _\r\n \/\\\\ \/ ___'_ __ _ _(_)_ __  __ _ \\ \\ \\ \\\r\n( ( )\\___ | '_ | '_| | '_ \\\/ _` | \\ \\ \\ \\\r\n \\\\\/  ___)| |_)| | | | | || (_| |  ) ) ) )\r\n  '  |____| .__|_| |_|_| |_\\__, | \/ \/ \/ \/\r\n =========|_|==============|___\/=\/_\/_\/_\/\r\n :: Spring Boot ::                (v2.5.7)\r\n\r\n2021-12-04 00:28:12.649  INFO 3639 --- [           main] .a.s.s.b.v.SpringBootVueAppApplicationKt : Starting SpringBootVueAppApplicationKt using Java 13 on notaketatsuyanoMacBook-Pro.local with PID 3639 (\/Users\/aufan-engineer\/work\/spring-boot-vue-app\/web-flux-server\/build\/libs\/spring-boot-vue-app-web-flux-server-0.0.1-SNAPSHOT.jar started by aufan-engineer in \/Users\/aufan-engineer\/work\/spring-boot-vue-app\/web-flux-server\/build\/libs)\r\n2021-12-04 00:28:12.651  INFO 3639 --- [           main] .a.s.s.b.v.SpringBootVueAppApplicationKt : No active profile set, falling back to default profiles: default\r\n2021-12-04 00:28:14.144  INFO 3639 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8080\r\n2021-12-04 00:28:14.154  INFO 3639 --- [           main] .a.s.s.b.v.SpringBootVueAppApplicationKt : Started SpringBootVueAppApplicationKt in 1.985 seconds (JVM running for 2.411)\r\n<\/code><\/pre>\n<p>\u7136\u540e\uff0c\u6559\u7a0b\u7ed3\u675f\u4e86\uff01<\/p>\n<p>&#8230;\u518d\u6b21\uff0c\u4e4b\u524d\u7684\u753b\u9762\u518d\u6b21\u663e\u793a\u51fa\u6765\u3002<br \/>\n\u54ce\u5440\uff0c\u867d\u7136\u662f\u7406\u6240\u5f53\u7136\u7684\uff0c\u4f46\u771f\u7684\uff0c\u548c\u521a\u624d\u4e00\u70b9\u53d8\u5316\u4e5f\u6ca1\u6709\u3002<br \/>\n\u6587\u7ae0\u53d8\u5f97\u8fd9\u4e48\u957f\u4e86\uff0c\u5230\u5e95\u5728\u5e72\u4ec0\u4e48\uff0c\u4e5f\u4ea7\u751f\u4e86\u8fd9\u79cd\u611f\u89c9\uff08\u7565<\/p>\n<h1>\u7ed3\u675f<\/h1>\n<p>\u5728\u6628\u5929\u7684\u6587\u7ae0\u4e2d\u786e\u5b9e\u6709\u5199\u5230\u3002<\/p>\n<blockquote><p>\u5728\u6b64\u4e4b\u524d\u7684\u9879\u76ee\u6784\u5efa\u4e2d\uff0c\u5e76\u6ca1\u6709\u5728Spring Boot\u7684WebFlux\u670d\u52a1\u5668\u4e2d\u5b9e\u73b0\u4efb\u4f55Web API\u3002\u4ece\u73b0\u5728\u5f00\u59cb\uff0c\u6211\u4eec\u5c06\u4f7f\u7528Kotlin\u6765\u5b9e\u73b0Web API\uff0c\u5e76\u901a\u8fc7Vue.js\u7684axios\u8fdb\u884c\u5f00\u53d1\u3002<\/p><\/blockquote>\n<p>\u6700\u540e\uff0c\u4e8b\u5b9e\u4e0a\u8fde\u4e00\u884cKotlin\u4ee3\u7801\u90fd\u8fd8\u6ca1\u6709\u5199\uff01<\/p>\n<p>\u5c3d\u7ba1\u611f\u89c9\u5c31\u50cf\u770b\u4e86\u4e00\u4e2a\u5c0f\u65f6\u7684\u767d\u65e5\u68a6\uff0c\u4f46\u53ea\u9700\u82b1\u8d39\u76f8\u540c\u7684\u65f6\u95f4\u52a8\u624b\u64cd\u4f5c\uff0c\u5c31\u80fd\u5efa\u7acb\u4e00\u4e2a\u4f7f\u7528Kotlin\u548cVue.js\u7684\u7f51\u7ad9\u6846\u67b6\u3002<\/p>\n<p>\u6700\u8fd1\u6709\u5f88\u591a\u5145\u5b9e\u7684\u6587\u7ae0\uff0c\u4ee5\u641c\u7d22\u548c\u8bbf\u95ee\u4e0d\u540c\u7684\u5730\u65b9\u4e3a\u7279\u70b9\uff0c\u6709\u5f88\u591a\u7b80\u4fbf\u7684\u5165\u95e8\u6559\u7a0b\u53ef\u4f9b\u9009\u62e9\u3002\u4e0d\u4ec5\u4ec5\u662f\u9605\u8bfb\uff0c\u52a8\u52a8\u624b\u5c31\u80fd\u8fc8\u51fa\u7b2c\u4e00\u6b65\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 \u4f60\u597d\uff0c\u6211\u662f@aucfan-engineer 3\u53f7\u3002 \u7531\u4e8e\u626e\u6f14\u7684\u89d2\u8272\u4e0e\u6628\u5929\u4e0d\u540c\uff0c\u8bf7\u79f0\u547c\u6211\u4e3a3\u53f7\u3002 \u867d\u7136\u5750\u5728 [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-40050","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u7528\u8fd9\u4e2a\uff0c\u6211\u4e5f\u6210\u4e3a\u4e86Kotlin\u5de5\u7a0b\u5e08 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u7528\u8fd9\u4e2a\uff0c\u6211\u4e5f\u6210\u4e3a\u4e86kotlin\u5de5\u7a0b\u5e08\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u7528\u8fd9\u4e2a\uff0c\u6211\u4e5f\u6210\u4e3a\u4e86Kotlin\u5de5\u7a0b\u5e08\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 \u4f60\u597d\uff0c\u6211\u662f@aucfan-engineer 3\u53f7\u3002 \u7531\u4e8e\u626e\u6f14\u7684\u89d2\u8272\u4e0e\u6628\u5929\u4e0d\u540c\uff0c\u8bf7\u79f0\u547c\u6211\u4e3a3\u53f7\u3002 \u867d\u7136\u5750\u5728 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u7528\u8fd9\u4e2a\uff0c\u6211\u4e5f\u6210\u4e3a\u4e86kotlin\u5de5\u7a0b\u5e08\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-19T15:44:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T08:09:17+00:00\" \/>\n<meta name=\"author\" content=\"\u79d1, \u96c5\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u79d1, \u96c5\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8%e8%bf%99%e4%b8%aa%ef%bc%8c%e6%88%91%e4%b9%9f%e6%88%90%e4%b8%ba%e4%ba%86kotlin%e5%b7%a5%e7%a8%8b%e5%b8%88%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8%e8%bf%99%e4%b8%aa%ef%bc%8c%e6%88%91%e4%b9%9f%e6%88%90%e4%b8%ba%e4%ba%86kotlin%e5%b7%a5%e7%a8%8b%e5%b8%88%e3%80%82\/\",\"name\":\"\u7528\u8fd9\u4e2a\uff0c\u6211\u4e5f\u6210\u4e3a\u4e86Kotlin\u5de5\u7a0b\u5e08 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2022-12-19T15:44:42+00:00\",\"dateModified\":\"2024-04-29T08:09:17+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8%e8%bf%99%e4%b8%aa%ef%bc%8c%e6%88%91%e4%b9%9f%e6%88%90%e4%b8%ba%e4%ba%86kotlin%e5%b7%a5%e7%a8%8b%e5%b8%88%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8%e8%bf%99%e4%b8%aa%ef%bc%8c%e6%88%91%e4%b9%9f%e6%88%90%e4%b8%ba%e4%ba%86kotlin%e5%b7%a5%e7%a8%8b%e5%b8%88%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8%e8%bf%99%e4%b8%aa%ef%bc%8c%e6%88%91%e4%b9%9f%e6%88%90%e4%b8%ba%e4%ba%86kotlin%e5%b7%a5%e7%a8%8b%e5%b8%88%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u7528\u8fd9\u4e2a\uff0c\u6211\u4e5f\u6210\u4e3a\u4e86Kotlin\u5de5\u7a0b\u5e08\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a\",\"name\":\"\u79d1, \u96c5\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g\",\"caption\":\"\u79d1, \u96c5\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/keya\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8%e8%bf%99%e4%b8%aa%ef%bc%8c%e6%88%91%e4%b9%9f%e6%88%90%e4%b8%ba%e4%ba%86kotlin%e5%b7%a5%e7%a8%8b%e5%b8%88%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u7528\u8fd9\u4e2a\uff0c\u6211\u4e5f\u6210\u4e3a\u4e86Kotlin\u5de5\u7a0b\u5e08 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u7528\u8fd9\u4e2a\uff0c\u6211\u4e5f\u6210\u4e3a\u4e86kotlin\u5de5\u7a0b\u5e08\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u7528\u8fd9\u4e2a\uff0c\u6211\u4e5f\u6210\u4e3a\u4e86Kotlin\u5de5\u7a0b\u5e08","og_description":"\u9996\u5148 \u4f60\u597d\uff0c\u6211\u662f@aucfan-engineer 3\u53f7\u3002 \u7531\u4e8e\u626e\u6f14\u7684\u89d2\u8272\u4e0e\u6628\u5929\u4e0d\u540c\uff0c\u8bf7\u79f0\u547c\u6211\u4e3a3\u53f7\u3002 \u867d\u7136\u5750\u5728 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u7528\u8fd9\u4e2a\uff0c\u6211\u4e5f\u6210\u4e3a\u4e86kotlin\u5de5\u7a0b\u5e08\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2022-12-19T15:44:42+00:00","article_modified_time":"2024-04-29T08:09:17+00:00","author":"\u79d1, \u96c5","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u79d1, \u96c5","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"14 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8%e8%bf%99%e4%b8%aa%ef%bc%8c%e6%88%91%e4%b9%9f%e6%88%90%e4%b8%ba%e4%ba%86kotlin%e5%b7%a5%e7%a8%8b%e5%b8%88%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8%e8%bf%99%e4%b8%aa%ef%bc%8c%e6%88%91%e4%b9%9f%e6%88%90%e4%b8%ba%e4%ba%86kotlin%e5%b7%a5%e7%a8%8b%e5%b8%88%e3%80%82\/","name":"\u7528\u8fd9\u4e2a\uff0c\u6211\u4e5f\u6210\u4e3a\u4e86Kotlin\u5de5\u7a0b\u5e08 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2022-12-19T15:44:42+00:00","dateModified":"2024-04-29T08:09:17+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8%e8%bf%99%e4%b8%aa%ef%bc%8c%e6%88%91%e4%b9%9f%e6%88%90%e4%b8%ba%e4%ba%86kotlin%e5%b7%a5%e7%a8%8b%e5%b8%88%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8%e8%bf%99%e4%b8%aa%ef%bc%8c%e6%88%91%e4%b9%9f%e6%88%90%e4%b8%ba%e4%ba%86kotlin%e5%b7%a5%e7%a8%8b%e5%b8%88%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8%e8%bf%99%e4%b8%aa%ef%bc%8c%e6%88%91%e4%b9%9f%e6%88%90%e4%b8%ba%e4%ba%86kotlin%e5%b7%a5%e7%a8%8b%e5%b8%88%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u7528\u8fd9\u4e2a\uff0c\u6211\u4e5f\u6210\u4e3a\u4e86Kotlin\u5de5\u7a0b\u5e08"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a","name":"\u79d1, \u96c5","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g","caption":"\u79d1, \u96c5"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/keya\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8%e8%bf%99%e4%b8%aa%ef%bc%8c%e6%88%91%e4%b9%9f%e6%88%90%e4%b8%ba%e4%ba%86kotlin%e5%b7%a5%e7%a8%8b%e5%b8%88%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40050","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=40050"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40050\/revisions"}],"predecessor-version":[{"id":86286,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40050\/revisions\/86286"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=40050"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=40050"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=40050"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}