{"id":47849,"date":"2023-07-30T02:04:21","date_gmt":"2022-12-26T15:12:49","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e7%9d%80%e5%81%9a%e4%ba%86amplify%e7%9a%84%e6%95%99%e7%a8%8bvue-js%e3%80%82\/"},"modified":"2024-04-30T16:02:04","modified_gmt":"2024-04-30T08:02:04","slug":"%e6%88%91%e8%af%95%e7%9d%80%e5%81%9a%e4%ba%86amplify%e7%9a%84%e6%95%99%e7%a8%8bvue-js%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e7%9d%80%e5%81%9a%e4%ba%86amplify%e7%9a%84%e6%95%99%e7%a8%8bvue-js%e3%80%82\/","title":{"rendered":"\u6211\u8bd5\u7740\u505a\u4e86Amplify\u7684\u6559\u7a0b(Vue.js)"},"content":{"rendered":"<h1>\u9996\u5148<\/h1>\n<p>\u7531\u4e8e\u4e0d\u592a\u7406\u89e3Amplify\u662f\u4ec0\u4e48\uff0c\u6240\u4ee5\u6211\u5c1d\u8bd5\u505a\u4e86\u4e00\u4e0b\u6559\u7a0b\u3002<br \/>\n\u6709\u5f88\u591a\u4eba\u4ecb\u7ecd\u4e86\u5404\u79cd\u6559\u7a0b\uff0c\u4f46\u662f\u5185\u5bb9\u6709\u70b9\u8fc7\u65f6\uff0c\u6240\u4ee5\u6211\u6309\u7167\u5b98\u65b9\uff08\uff1f\uff09\u7684\u6559\u7a0b\u4e00\u6b65\u6b65\u5c1d\u8bd5\u4e86\u4e00\u4e0b\u3002<br \/>\n\uff08\u8fd9\u53ea\u662f\u6211\u7559\u4e0b\u7684\u8bb0\u5f55\uff0c\u4f9b\u81ea\u5df1\u505a\u5907\u5fd8\u3002\uff09<\/p>\n<div>\u7531\u4e8eAmplify\u548cVue\u90fd\u662f\u4e3a\u521d\u5b66\u8005\u8bbe\u8ba1\u7684\uff0c\u6240\u4ee5\u53ef\u80fd\u6709\u4e00\u4e9b\u5730\u65b9\u5185\u5bb9\u8fd8\u4e0d\u80fd\u7406\u89e3&#8230;\uff08\u8fd9\u53ea\u662f\u6284\u5199\u7684\u7ed3\u679c\uff09\u3002\uff08\u6211\u60f3\u53ef\u80fd\u4e5f\u6709\u66f4\u8be6\u7ec6\u89e3\u91ca\u7684\u4eba\uff0c\u5c3d\u91cf\u5305\u542b\u4e00\u4e9b\u547d\u4ee4\u8f93\u51fa\u7684\u7ed3\u679c\u3002\uff09<\/div>\n<h1>\u76ee\u6807\u6559\u7a0b<\/h1>\n<p>&nbsp;<\/p>\n<h1>\u524d\u63d0\u6761\u4ef6<\/h1>\n<h2>\u73af\u5883<\/h2>\n<p>\u73af\u5883\u8981\u7d20<\/p>\n<pre class=\"post-pre\"><code>Node.js v14.x or later\r\nnpm v6.14.4 or later\r\ngit v2.14.1 or later\r\n<\/code><\/pre>\n<p>\u5728\u672c\u5730\u73af\u5883\u4e0b\u4f7f\u7528Windows10\u548cWindows Terminal\u3002<\/p>\n<pre class=\"post-pre\"><code>\u276f node -v\r\nv16.13.1\r\n\u276f npm -v\r\n8.1.2\r\n\u276f git --version\r\ngit version 2.39.0.windows.2\r\n<\/code><\/pre>\n<h2>AWS\u8d26\u6237<\/h2>\n<p>\u5229\u7528\u73b0\u6709\u7684\u4e1c\u897f\u3002<\/p>\n<h2>\u5b89\u88c5 Amplify CLI<\/h2>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d810b913a08637a6ac1a2\/14-0.png\" alt=\"image.png\" \/><\/div>\n<h2>\u589e\u5f3a\u8bbe\u7f6e<\/h2>\n<pre class=\"post-pre\"><code>amplify configure\r\n<\/code><\/pre>\n<p>\u6307\u5b9a\u4f7f\u7528\u533a\u57df\u548cIAM\u7528\u6237\u3002<\/p>\n<pre class=\"post-pre\"><code>Specify the AWS Region\r\n? region:  us-east-1\r\nSpecify the username of the new IAM user:\r\n? user name:  amplify-test\r\n<\/code><\/pre>\n<h2>\u6dfb\u52a0IAM\u7528\u6237<\/h2>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d810b913a08637a6ac1a2\/20-0.png\" alt=\"image.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d810b913a08637a6ac1a2\/21-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u521b\u5efa\u7528\u6237\u8bbf\u95ee\u5bc6\u94a5\uff0c\u5e76\u8bb0\u4e0b&#8221;Access key ID&#8221;\u548c&#8221;Secret access key&#8221;\u3002<br \/>\n\u5728\u7ec8\u7aef\u4e0a\u8f93\u5165\u5e76\u8f93\u5165\u914d\u7f6e\u6587\u4ef6\u540d\u79f0\u3002\uff08\u7531\u4e8e\u4e0d\u60f3\u4f7f\u7528\u9ed8\u8ba4\u914d\u7f6e\uff0c\u6211\u8fdb\u884c\u4e86\u6307\u5b9a\u3002\uff09<\/p>\n<pre class=\"post-pre\"><code>Enter the access key of the newly created user:\r\n? accessKeyId:  ********************\r\n? secretAccessKey:  ****************************************\r\nThis would update\/create the AWS Profile in your local machine\r\n? Profile Name:  amplify-test\r\n<\/code><\/pre>\n<h1>\u5efa\u7acb\u5168\u6808\u9879\u76ee<\/h1>\n<h2>\u521b\u5efaVue3\u5e94\u7528\u7a0b\u5e8f<\/h2>\n<pre class=\"post-pre\"><code>\u276f npm init vue@3\r\nNeed to install the following packages:\r\n  create-vue@3\r\nOk to proceed? (y) y\r\n\r\nVue.js - The Progressive JavaScript Framework\r\n\r\n\u221a Project name: ... myamplifyproject\r\n\u221a Add TypeScript? ... No\r\n\u221a Add JSX Support? ... No\r\n\u221a Add Vue Router for Single Page Application development? ... No\r\n\u221a Add Pinia for state management? ... No\r\n\u221a Add Vitest for Unit Testing? ... No\r\n\u221a Add an End-to-End Testing Solution? \u00bb No\r\n\u221a Add ESLint for code quality? ... No\r\n<\/code><\/pre>\n<p>\u5b89\u88c5\u6240\u9700\u7684\u6a21\u5757\u3002<\/p>\n<pre class=\"post-pre\"><code>cd myamplifyproject\r\nnpm install\r\n<\/code><\/pre>\n<p>\u5e94\u7528\u7a0b\u5e8f\u7684\u8fd0\u884c<\/p>\n<pre class=\"post-pre\"><code>npm run dev\r\n<\/code><\/pre>\n<p>\u4ece\u7ec8\u7aef\u663e\u793a\u7684\u672c\u5730URL\u5904\u8fdb\u884c\u67e5\u770b\u3002<\/p>\n<pre class=\"post-pre\"><code>  VITE v4.0.3  ready in 1166 ms\r\n\r\n  \u279c  Local:   http:\/\/127.0.0.1:5173\/\r\n  \u279c  Network: use --host to expose\r\n  \u279c  press h to show help\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d810b913a08637a6ac1a2\/33-0.png\" alt=\"image.png\" \/><\/div>\n<h2>\u521d\u59cb\u5316\u65b0\u7684\u540e\u7aef<\/h2>\n<pre class=\"post-pre\"><code>amplify init\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u276f amplify init\r\nNote: It is recommended to run this command from the root of your app directory\r\n? Enter a name for the project todo &lt;--- TODO \u3068\u6307\u5b9a\r\nThe following configuration will be applied:\r\n\r\nProject information\r\n| Name: todo\r\n| Environment: dev\r\n| Default editor: Visual Studio Code\r\n| App type: javascript\r\n| Javascript framework: vue\r\n| Source Directory Path: src\r\n| Distribution Directory Path: dist\r\n| Build Command: npm.cmd run-script build\r\n| Start Command: npm.cmd run-script serve\r\n\r\n? Initialize the project with the above configuration? Yes\r\nUsing default provider  awscloudformation\r\n? Select the authentication method you want to use: AWS profile &lt;---\u8a8d\u8a3c\u306fprofile\r\n? Please choose the profile you want to use amplify-test &lt;--- \u5148\u307b\u3069\u4f5c\u6210\u3057\u305f\u3082\u306e\u3092\u6307\u5b9a\r\n<\/code><\/pre>\n<p>\u4f7f\u7528 CloudFormation \u521b\u5efa\u3002<\/p>\n<pre class=\"post-pre\"><code>Adding backend environment dev to AWS Amplify app: **********\r\n\r\nDeployment completed.\r\nDeployed root stack todo [ ======================================== ] 4\/4\r\n        AuthRole                       AWS::IAM::Role                 CREATE_COMPLETE\r\n        DeploymentBucket               AWS::S3::Bucket                CREATE_COMPLETE\r\n        UnauthRole                     AWS::IAM::Role                 CREATE_COMPLETE\r\n        amplify-todo-dev-*****         AWS::CloudFormation::Stack     CREATE_COMPLETE\r\n\r\n\u221a Help improve Amplify CLI by sharing non sensitive configurations on failures (y\/N)  &lt;--- N\u3092\u6307\u5b9a\r\nDeployment bucket fetched.\r\n\u221a Initialized provider successfully.\r\n\u221a Initialized your environment successfully.\r\n\r\nYour project has been successfully initialized and connected to the cloud!\r\n<\/code><\/pre>\n<p>\u5b89\u88c5Amplify\u5e93<\/p>\n<pre class=\"post-pre\"><code>npm install aws-amplify @aws-amplify\/ui-vue\r\n<\/code><\/pre>\n<h2>\u524d\u7aef\u8bbe\u7f6e<\/h2>\n<p>\u4fee\u6539 src\/main.js<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">createApp<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">vue<\/span><span class=\"dl\">'<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">App<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/App.vue<\/span><span class=\"dl\">'<\/span>\r\n\r\n<span class=\"k\">import<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/assets\/main.css<\/span><span class=\"dl\">'<\/span>\r\n\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Amplify<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">aws-amplify<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/\u8ffd\u52a0<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">awsExports<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/aws-exports<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/\u8ffd\u52a0<\/span>\r\n<span class=\"nx\">Amplify<\/span><span class=\"p\">.<\/span><span class=\"nf\">configure<\/span><span class=\"p\">(<\/span><span class=\"nx\">awsExports<\/span><span class=\"p\">);<\/span> <span class=\"c1\">\/\/\u8ffd\u52a0<\/span>\r\n\r\n<span class=\"nf\">createApp<\/span><span class=\"p\">(<\/span><span class=\"nx\">App<\/span><span class=\"p\">).<\/span><span class=\"nf\">mount<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">#app<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span>\r\n<\/code><\/pre>\n<h2>\u4fee\u590dVue Vite\u914d\u7f6e<\/h2>\n<p>\u5728index.html\u4e2d\u6dfb\u52a0\u5185\u5bb9<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;!DOCTYPE html&gt;<\/span>\r\n<span class=\"nt\">&lt;html<\/span> <span class=\"na\">lang=<\/span><span class=\"s\">\"en\"<\/span><span class=\"nt\">&gt;<\/span>\r\n  <span class=\"nt\">&lt;head&gt;<\/span>\r\n    <span class=\"nt\">&lt;meta<\/span> <span class=\"na\">charset=<\/span><span class=\"s\">\"UTF-8\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;link<\/span> <span class=\"na\">rel=<\/span><span class=\"s\">\"icon\"<\/span> <span class=\"na\">href=<\/span><span class=\"s\">\"\/favicon.ico\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;meta<\/span> <span class=\"na\">name=<\/span><span class=\"s\">\"viewport\"<\/span> <span class=\"na\">content=<\/span><span class=\"s\">\"width=device-width, initial-scale=1.0\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;title&gt;<\/span>Vite App<span class=\"nt\">&lt;\/title&gt;<\/span>\r\n  <span class=\"nt\">&lt;\/head&gt;<\/span>\r\n  <span class=\"nt\">&lt;body&gt;<\/span>\r\n    <span class=\"nt\">&lt;div<\/span> <span class=\"na\">id=<\/span><span class=\"s\">\"app\"<\/span><span class=\"nt\">&gt;&lt;\/div&gt;<\/span>\r\n    <span class=\"nt\">&lt;script <\/span><span class=\"na\">type=<\/span><span class=\"s\">\"module\"<\/span> <span class=\"na\">src=<\/span><span class=\"s\">\"\/src\/main.js\"<\/span><span class=\"nt\">&gt;&lt;\/script&gt;<\/span>\r\n    <span class=\"c\">&lt;!-- \u8ffd\u52a0 --&gt;<\/span>\r\n    <span class=\"nt\">&lt;script&gt;<\/span>\r\n      <span class=\"nb\">window<\/span><span class=\"p\">.<\/span><span class=\"nb\">global<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">window<\/span><span class=\"p\">;<\/span>\r\n      <span class=\"kd\">var<\/span> <span class=\"nx\">exports<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{};<\/span>\r\n    <span class=\"nt\">&lt;\/script&gt;<\/span>\r\n    <span class=\"c\">&lt;!-- \u8ffd\u52a0 --&gt;<\/span>\r\n  <span class=\"nt\">&lt;\/body&gt;<\/span>\r\n<span class=\"nt\">&lt;\/html&gt;<\/span>\r\n<\/code><\/pre>\n<p>\u4fee\u6539\u522b\u540d\u7684\u5185\u5bb9<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">fileURLToPath<\/span><span class=\"p\">,<\/span> <span class=\"nx\">URL<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">node:url<\/span><span class=\"dl\">'<\/span>\r\n\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">defineConfig<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">vite<\/span><span class=\"dl\">'<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">vue<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@vitejs\/plugin-vue<\/span><span class=\"dl\">'<\/span>\r\n\r\n<span class=\"c1\">\/\/ https:\/\/vitejs.dev\/config\/<\/span>\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nf\">defineConfig<\/span><span class=\"p\">({<\/span>\r\n  <span class=\"na\">plugins<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"nf\">vue<\/span><span class=\"p\">()],<\/span>\r\n  <span class=\"na\">resolve<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"na\">alias<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n      <span class=\"p\">{<\/span>\r\n        <span class=\"na\">find<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/runtimeConfig<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"na\">replacement<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/runtimeConfig.browser<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">]<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">})<\/span>\r\n<\/code><\/pre>\n<p>\u4e0d\u4f7f\u7528TypeScript\uff0c\u6240\u4ee5\u4e0d\u9700\u8981\u4fee\u6539tsconfig.json\u3002<\/p>\n<h1>3. \u5c06API\u548c\u6570\u636e\u5e93\u8fde\u63a5\u5230\u5e94\u7528\u7a0b\u5e8f\u4e0a\u3002<\/h1>\n<h2>\u521b\u5efaGraphQL API\u548c\u6570\u636e\u5e93\u3002<\/h2>\n<pre class=\"post-pre\"><code>amplify add api\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u276f amplify add api\r\n? Select from one of the below mentioned services: (Use arrow keys)\r\n&gt; GraphQL\r\n  REST\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>? Provide API name: todo\r\n? Choose the default authorization type for the API (Use arrow keys)\r\n&gt; API key\r\n  Amazon Cognito User Pool\r\n  IAM\r\n  OpenID Connect\r\n  Lambda\r\n? Enter a description for the API key: \u00bb 7\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>? Here is the GraphQL API that we will create. Select a setting to edit or continue (Use arrow keys)\r\n\r\n  Name: todo\r\n  Authorization modes: API key (default, expiration time: 7 days from now)\r\n  Conflict detection (required for DataStore): Disabled\r\n&gt; Continue  &lt;--- \u3053\u3053\u306fContinue\u3067\u6b21\u3078\u9032\u3080\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>? Choose a schema template: (Use arrow keys)\r\n&gt; Single object with fields (e.g., \u201cTodo\u201d with ID, name, description)\r\n  One-to-many relationship (e.g., \u201cBlogs\u201d with \u201cPosts\u201d and \u201cComments\u201d)\r\n  Blank Schema\r\n<\/code><\/pre>\n<p>\u5728\u6307\u5b9a\u7684\u7f16\u8f91\u5668\u4e2d\u6253\u5f00\u4e86\u6a21\u5f0f\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>\u221a Do you want to edit the schema now? (Y\/n) \u00b7 yes\r\nEdit the file in your editor: C:\\Users\\***\\myamplifyproject\\amplify\\backend\\api\\todo\\schema.graphql\r\n<\/code><\/pre>\n<p>\u4f3c\u4e4e\u662f\u4e3a\u4e86\u4f7f\u6a21\u578b\u7684\u63cf\u8ff0\u88abAmplify\u7cfb\u7edf\u8bc6\u522b\u800c\u8fdb\u884c\u7684\u63cf\u8ff0\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">input<\/span> <span class=\"n\">AMPLIFY<\/span> <span class=\"p\">{<\/span> <span class=\"n\">globalAuthRule<\/span><span class=\"p\">:<\/span> <span class=\"n\">AuthRule<\/span> <span class=\"err\">=<\/span> <span class=\"err\">{<\/span> <span class=\"n\">allow<\/span><span class=\"p\">:<\/span> <span class=\"n\">public<\/span> <span class=\"p\">}<\/span> <span class=\"err\">}<\/span> <span class=\"c\"># FOR TESTING ONLY!<\/span>\r\n\r\n<span class=\"k\">type<\/span> <span class=\"n\">Todo<\/span> <span class=\"err\">@<\/span><span class=\"n\">model<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">ID<\/span><span class=\"p\">!<\/span>\r\n  <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">!<\/span>\r\n  <span class=\"n\">description<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h2>GraphQL API \u7684\u90e8\u7f72<\/h2>\n<pre class=\"post-pre\"><code>amplify push\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u221a GraphQL schema compiled successfully.\r\n\u221a Successfully pulled backend environment dev from the cloud.\r\n\u221a  GraphQL schema compiled successfully.\r\n(\u30e1\u30c3\u30bb\u30fc\u30b8\u4e00\u90e8\u5272\u611b)\r\n\r\n    Current Environment: dev\r\n\r\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502 Category \u2502 Resource name \u2502 Operation \u2502 Provider plugin   \u2502\r\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502 Api      \u2502 todo          \u2502 Create    \u2502 awscloudformation \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\r\n? Are you sure you want to continue? Yes\r\n\u221a GraphQL schema compiled successfully.\r\n<\/code><\/pre>\n<h3>\u751f\u6210\u9002\u7528\u4e8eGraphQL API\u7684\u524d\u7aef\u4ee3\u7801\u3002<\/h3>\n<pre class=\"post-pre\"><code>? Do you want to generate code for your newly created GraphQL API Yes\r\n? Choose the code generation language target (Use arrow keys)\r\n&gt; javascript\r\n  typescript\r\n  flow\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>? Do you want to generate code for your newly created GraphQL API Yes\r\n? Choose the code generation language target javascript\r\n? Enter the file name pattern of graphql queries, mutations and subscriptions (src\\graphql\\**\\*.js) &lt;--- Enter\u3067\u9032\u3080\r\n? Do you want to generate\/update all possible GraphQL operations - queries, mutations and subscripti\r\nons (Y\/n) Y\r\n? Enter maximum statement depth [increase from default if your schema is deeply nested] (2)\u3000&lt;--- Enter\u3067\u9032\u3080\r\n<\/code><\/pre>\n<p>\u5728CloudFormation\u4e0a\u5efa\u7acb\u73af\u5883\u3002<\/p>\n<pre class=\"post-pre\"><code>Deployment completed.\r\nDeployed root stack todo [ ======================================== ] 2\/2\r\n        amplify-todo-dev-****        AWS::CloudFormation::Stack     UPDATE_COMPLETE\r\n        apitodo                        AWS::CloudFormation::Stack     CREATE_COMPLETE\r\nDeployed api todo [ ======================================== ] 6\/6\r\n        GraphQLAPI                     AWS::AppSync::GraphQLApi       CREATE_COMPLETE\r\n        GraphQLAPINONE**********       AWS::AppSync::DataSource       CREATE_COMPLETE\r\n        GraphQLAPIDefaultApiKey****    AWS::AppSync::ApiKey           CREATE_COMPLETE\r\n        GraphQLAPITransformerSchema3C\u2026 AWS::AppSync::GraphQLSchema    CREATE_COMPLETE\r\n        Todo                           AWS::CloudFormation::Stack     CREATE_COMPLETE\r\n        CustomResourcesjson            AWS::CloudFormation::Stack     CREATE_COMPLETE\r\n\r\n\u221a Generated GraphQL operations successfully and saved at src\\graphql\r\n<\/code><\/pre>\n<p>\u786e\u8ba4amplify\u7684\u72b6\u6001<\/p>\n<pre class=\"post-pre\"><code>amplify status\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>    Current Environment: dev\r\n\r\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502 Category \u2502 Resource name \u2502 Operation \u2502 Provider plugin   \u2502\r\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502 Api      \u2502 todo          \u2502 No Change \u2502 awscloudformation \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\r\n\r\nGraphQL endpoint: https:\/\/********.appsync-api.us-east-1.amazonaws.com\/graphql\r\nGraphQL API KEY: ************\r\n\r\nGraphQL transformer version: 2\r\n<\/code><\/pre>\n<h3>\u5bf9API\u8fdb\u884c\u6d4b\u8bd5\u3002<\/h3>\n<p>\u5728\u63a7\u5236\u53f0\u4e0a\u786e\u8ba4\u3002(\u867d\u7136\u5efa\u8bae\u4f7f\u7528Amplify Studio\uff0c\u4f46\u6682\u65f6\u53ef\u4ee5\u5728AWS\u63a7\u5236\u53f0\u4e0a\u786e\u8ba4)<br \/>\n\u53ef\u4ee5\u6267\u884c\u67e5\u8be2\u5e76\u786e\u8ba4\u3002<\/p>\n<pre class=\"post-pre\"><code>amplify console\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d810b913a08637a6ac1a2\/75-2.png\" alt=\"image.png\" \/><\/div>\n<h2>\u5c06\u524d\u7aef\u4e0eAPI\u8fde\u63a5<\/h2>\n<h3>\u4f7f\u7528GraphQL\u7684\u64cd\u4f5c\u8bf4\u660e<\/h3>\n<p>\u6539\u5199App.vue\u6587\u4ef6\u3002\uff08\u6559\u7a0b\u4e2d\u5206\u4e3a3\u4e2a\u6b65\u9aa4\uff0c\u4f46\u4e0b\u9762\u662f\u6700\u7ec8\u7248\u3002\uff09<\/p>\n<pre class=\"post-pre\"><code><span class=\"nt\">&lt;<\/span><span class=\"k\">template<\/span><span class=\"nt\">&gt;<\/span>\r\n  <span class=\"nt\">&lt;div<\/span> <span class=\"na\">id=<\/span><span class=\"s\">\"app\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;h1&gt;<\/span>Todo App<span class=\"nt\">&lt;\/h1&gt;<\/span>\r\n    <span class=\"nt\">&lt;input<\/span> <span class=\"na\">type=<\/span><span class=\"s\">\"text\"<\/span> <span class=\"na\">v-model=<\/span><span class=\"s\">\"name\"<\/span> <span class=\"na\">placeholder=<\/span><span class=\"s\">\"Todo name\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n    <span class=\"nt\">&lt;input<\/span> <span class=\"na\">type=<\/span><span class=\"s\">\"text\"<\/span> <span class=\"na\">v-model=<\/span><span class=\"s\">\"description\"<\/span> <span class=\"na\">placeholder=<\/span><span class=\"s\">\"Todo description\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n    <span class=\"nt\">&lt;button<\/span> <span class=\"na\">v-on:click=<\/span><span class=\"s\">\"createTodo\"<\/span><span class=\"nt\">&gt;<\/span>Create Todo<span class=\"nt\">&lt;\/button&gt;<\/span>\r\n    <span class=\"nt\">&lt;div<\/span> <span class=\"na\">v-for=<\/span><span class=\"s\">\"item in todos\"<\/span> <span class=\"na\">:key=<\/span><span class=\"s\">\"item.id\"<\/span><span class=\"nt\">&gt;<\/span>\r\n      <span class=\"nt\">&lt;h3&gt;<\/span><span class=\"si\">{{<\/span> <span class=\"nx\">item<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span> <span class=\"si\">}}<\/span><span class=\"nt\">&lt;\/h3&gt;<\/span>\r\n      <span class=\"nt\">&lt;p&gt;<\/span><span class=\"si\">{{<\/span> <span class=\"nx\">item<\/span><span class=\"p\">.<\/span><span class=\"nx\">description<\/span> <span class=\"si\">}}<\/span><span class=\"nt\">&lt;\/p&gt;<\/span>\r\n    <span class=\"nt\">&lt;\/div&gt;<\/span>\r\n  <span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;\/<\/span><span class=\"k\">template<\/span><span class=\"nt\">&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;<\/span><span class=\"k\">script<\/span><span class=\"nt\">&gt;<\/span>\r\n  <span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">API<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">aws-amplify<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">createTodo<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/graphql\/mutations<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">listTodos<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/graphql\/queries<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">onCreateTodo<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/graphql\/subscriptions<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n  <span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">App<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"k\">async<\/span> <span class=\"nf\">created<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nf\">getTodos<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nf\">data<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"k\">return<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"dl\">''<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"na\">description<\/span><span class=\"p\">:<\/span> <span class=\"dl\">''<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"na\">todos<\/span><span class=\"p\">:<\/span> <span class=\"p\">[]<\/span>\r\n      <span class=\"p\">};<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nf\">created<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nf\">getTodos<\/span><span class=\"p\">();<\/span>\r\n      <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nf\">subscribe<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"na\">methods<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"k\">async<\/span> <span class=\"nf\">createTodo<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">name<\/span><span class=\"p\">,<\/span> <span class=\"nx\">description<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"k\">this<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nx\">name<\/span> <span class=\"o\">||<\/span> <span class=\"o\">!<\/span><span class=\"nx\">description<\/span><span class=\"p\">)<\/span> <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"kd\">const<\/span> <span class=\"nx\">todo<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">name<\/span><span class=\"p\">,<\/span> <span class=\"nx\">description<\/span> <span class=\"p\">};<\/span>\r\n        <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[...<\/span><span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span><span class=\"p\">,<\/span> <span class=\"nx\">todo<\/span><span class=\"p\">];<\/span>\r\n        <span class=\"k\">await<\/span> <span class=\"nx\">API<\/span><span class=\"p\">.<\/span><span class=\"nf\">graphql<\/span><span class=\"p\">({<\/span>\r\n          <span class=\"na\">query<\/span><span class=\"p\">:<\/span> <span class=\"nx\">createTodo<\/span><span class=\"p\">,<\/span>\r\n          <span class=\"na\">variables<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span> <span class=\"na\">input<\/span><span class=\"p\">:<\/span> <span class=\"nx\">todo<\/span> <span class=\"p\">}<\/span>\r\n        <span class=\"p\">});<\/span>\r\n        <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">''<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">description<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">''<\/span><span class=\"p\">;<\/span>\r\n      <span class=\"p\">},<\/span>\r\n      <span class=\"k\">async<\/span> <span class=\"nf\">getTodos<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"kd\">const<\/span> <span class=\"nx\">todos<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">API<\/span><span class=\"p\">.<\/span><span class=\"nf\">graphql<\/span><span class=\"p\">({<\/span>\r\n          <span class=\"na\">query<\/span><span class=\"p\">:<\/span> <span class=\"nx\">listTodos<\/span>\r\n        <span class=\"p\">});<\/span>\r\n        <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">todos<\/span><span class=\"p\">.<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">listTodos<\/span><span class=\"p\">.<\/span><span class=\"nx\">items<\/span><span class=\"p\">;<\/span>\r\n      <span class=\"p\">},<\/span>\r\n      <span class=\"nf\">subscribe<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">API<\/span><span class=\"p\">.<\/span><span class=\"nf\">graphql<\/span><span class=\"p\">({<\/span> <span class=\"na\">query<\/span><span class=\"p\">:<\/span> <span class=\"nx\">onCreateTodo<\/span> <span class=\"p\">}).<\/span><span class=\"nf\">subscribe<\/span><span class=\"p\">({<\/span>\r\n          <span class=\"na\">next<\/span><span class=\"p\">:<\/span> <span class=\"p\">(<\/span><span class=\"nx\">eventData<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"kd\">let<\/span> <span class=\"nx\">todo<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">eventData<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span><span class=\"p\">.<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">onCreateTodo<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span><span class=\"p\">.<\/span><span class=\"nf\">some<\/span><span class=\"p\">((<\/span><span class=\"nx\">item<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">item<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span> <span class=\"o\">===<\/span> <span class=\"nx\">todo<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span><span class=\"p\">))<\/span> <span class=\"k\">return<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ remove duplications<\/span>\r\n            <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[...<\/span><span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span><span class=\"p\">,<\/span> <span class=\"nx\">todo<\/span><span class=\"p\">];<\/span>\r\n          <span class=\"p\">}<\/span>\r\n        <span class=\"p\">});<\/span>\r\n      <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}<\/span>\r\n  <span class=\"p\">};<\/span>\r\n<span class=\"nt\">&lt;\/<\/span><span class=\"k\">script<\/span><span class=\"nt\">&gt;<\/span>\r\n<\/code><\/pre>\n<h1>4. \u589e\u52a0\u8eab\u4efd\u9a8c\u8bc1<\/h1>\n<h2>\u5728Amplify\u4e0a\u7684\u8eab\u4efd\u9a8c\u8bc1<\/h2>\n<pre class=\"post-pre\"><code>amplify add auth\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>Using service: Cognito, provided by: awscloudformation\r\n\r\n The current configured provider is Amazon Cognito.\r\n\r\n Do you want to use the default authentication and security configuration? Default configuration\r\n Warning: you will not be able to edit these selections.\r\n How do you want users to be able to sign in? Username &lt;--- Username\u3092\u9078\u629e\r\n Do you want to configure advanced settings? No, I am done. &lt;--- No, I am done.\u3092\u9078\u629e\r\n\u221a Successfully added auth resource todo****** locally\r\n<\/code><\/pre>\n<p>\u6267\u884c\u90e8\u7f72\u64cd\u4f5c\u3002<\/p>\n<pre class=\"post-pre\"><code>amplify push\r\n<\/code><\/pre>\n<p>\u4f7f\u7528CloudFormation\u6765\u521b\u5efaCognito\u3002<\/p>\n<pre class=\"post-pre\"><code>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502 Category \u2502 Resource name \u2502 Operation \u2502 Provider plugin   \u2502\r\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502 Auth     \u2502 todo******    \u2502 Create    \u2502 awscloudformation \u2502\r\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502 Api      \u2502 todo          \u2502 No Change \u2502 awscloudformation \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\r\n? Are you sure you want to continue? Yes\r\nDeployment completed.\r\nDeployed root stack todo [ ======================================== ] 3\/3\r\n        amplify-todo-dev-****          AWS::CloudFormation::Stack     UPDATE_COMPLETE\r\n        authtodo*****                  AWS::CloudFormation::Stack     CREATE_COMPLETE\r\n        apitodo                        AWS::CloudFormation::Stack     UPDATE_COMPLETE\r\nDeployed auth todo*****  [ ======================================== ] 10\/10\r\n        UserPool                       AWS::Cognito::UserPool         CREATE_COMPLETE\r\n        UserPoolClientWeb              AWS::Cognito::UserPoolClient   CREATE_COMPLETE\r\n        UserPoolClient                 AWS::Cognito::UserPoolClient   CREATE_COMPLETE\r\n        UserPoolClientRole             AWS::IAM::Role                 CREATE_COMPLETE\r\n        UserPoolClientLambda           AWS::Lambda::Function          CREATE_COMPLETE\r\n        UserPoolClientLambdaPolicy     AWS::IAM::Policy               CREATE_COMPLETE\r\n        UserPoolClientLogPolicy        AWS::IAM::Policy               CREATE_COMPLETE\r\n        UserPoolClientInputs           Custom::LambdaCallout          CREATE_COMPLETE\r\n        IdentityPool                   AWS::Cognito::IdentityPool     CREATE_COMPLETE\r\n        IdentityPoolRoleMap            AWS::Cognito::IdentityPoolRol\u2026 CREATE_COMPLETE\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d810b913a08637a6ac1a2\/88-1.png\" alt=\"image.png\" \/><\/div>\n<h3>\u521b\u5efa\u767b\u5f55\u754c\u9762<\/h3>\n<p>\u5728App.vue\u4e2d\u6dfb\u52a0\u8eab\u4efd\u9a8c\u8bc1\u5185\u5bb9\u3002\uff08\u8bf7\u539f\u8c05\u5e03\u5c40\u53ef\u80fd\u4e0d\u591f\u5408\u9002\u7684\u5730\u65b9&#8230;\uff09<\/p>\n<pre class=\"post-pre\"><code><span class=\"nt\">&lt;<\/span><span class=\"k\">template<\/span><span class=\"nt\">&gt;<\/span>\r\n  <span class=\"nt\">&lt;div<\/span> <span class=\"na\">id=<\/span><span class=\"s\">\"app\"<\/span><span class=\"nt\">&gt;<\/span>\r\n      <span class=\"nt\">&lt;authenticator&gt;<\/span>\r\n        <span class=\"nt\">&lt;template<\/span> <span class=\"na\">v-slot=<\/span><span class=\"s\">\"<\/span>{ user, signOut }\"&gt;\r\n          <span class=\"nt\">&lt;h2&gt;<\/span>Hello <span class=\"si\">{{<\/span> <span class=\"nx\">user<\/span><span class=\"p\">.<\/span><span class=\"nx\">username<\/span> <span class=\"si\">}}<\/span>!<span class=\"nt\">&lt;\/h2&gt;<\/span>\r\n          <span class=\"nt\">&lt;button<\/span> <span class=\"err\">@<\/span><span class=\"na\">click=<\/span><span class=\"s\">\"signOut\"<\/span><span class=\"nt\">&gt;<\/span>Sign Out<span class=\"nt\">&lt;\/button&gt;<\/span>\r\n          <span class=\"nt\">&lt;h2&gt;<\/span>Todo App<span class=\"nt\">&lt;\/h2&gt;<\/span>\r\n          <span class=\"nt\">&lt;input<\/span> <span class=\"na\">type=<\/span><span class=\"s\">\"text\"<\/span> <span class=\"na\">v-model=<\/span><span class=\"s\">\"name\"<\/span> <span class=\"na\">placeholder=<\/span><span class=\"s\">\"Todo name\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n          <span class=\"nt\">&lt;input<\/span> <span class=\"na\">type=<\/span><span class=\"s\">\"text\"<\/span> <span class=\"na\">v-model=<\/span><span class=\"s\">\"description\"<\/span> <span class=\"na\">placeholder=<\/span><span class=\"s\">\"Todo description\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n          <span class=\"nt\">&lt;button<\/span> <span class=\"na\">v-on:click=<\/span><span class=\"s\">\"createTodo\"<\/span><span class=\"nt\">&gt;<\/span>Create Todo<span class=\"nt\">&lt;\/button&gt;<\/span>\r\n          <span class=\"nt\">&lt;div<\/span> <span class=\"na\">v-for=<\/span><span class=\"s\">\"item in todos\"<\/span> <span class=\"na\">:key=<\/span><span class=\"s\">\"item.id\"<\/span><span class=\"nt\">&gt;<\/span>\r\n            <span class=\"nt\">&lt;h3&gt;<\/span><span class=\"si\">{{<\/span> <span class=\"nx\">item<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span> <span class=\"si\">}}<\/span><span class=\"nt\">&lt;\/h3&gt;<\/span>\r\n            <span class=\"nt\">&lt;p&gt;<\/span><span class=\"si\">{{<\/span> <span class=\"nx\">item<\/span><span class=\"p\">.<\/span><span class=\"nx\">description<\/span> <span class=\"si\">}}<\/span><span class=\"nt\">&lt;\/p&gt;<\/span>\r\n          <span class=\"nt\">&lt;\/div&gt;<\/span>\r\n        <span class=\"nt\">&lt;\/<\/span><span class=\"k\">template<\/span><span class=\"nt\">&gt;<\/span>\r\n      <span class=\"nt\">&lt;\/authenticator&gt;<\/span>\r\n  <span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;\/template&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;<\/span><span class=\"k\">script<\/span><span class=\"nt\">&gt;<\/span>\r\n  <span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">API<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">aws-amplify<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">createTodo<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/graphql\/mutations<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">listTodos<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/graphql\/queries<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">onCreateTodo<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/graphql\/subscriptions<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Authenticator<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@aws-amplify\/ui-vue<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ \u8ffd\u52a0<\/span>\r\n  <span class=\"k\">import<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@aws-amplify\/ui-vue\/styles.css<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ \u8ffd\u52a0<\/span>\r\n\r\n  <span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">App<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"k\">async<\/span> <span class=\"nf\">created<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nf\">getTodos<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nf\">data<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"k\">return<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"dl\">''<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"na\">description<\/span><span class=\"p\">:<\/span> <span class=\"dl\">''<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"na\">todos<\/span><span class=\"p\">:<\/span> <span class=\"p\">[]<\/span>\r\n      <span class=\"p\">};<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"na\">components<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span> <span class=\"c1\">\/\/ \u8ffd\u52a0<\/span>\r\n      <span class=\"nx\">Authenticator<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nf\">created<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nf\">getTodos<\/span><span class=\"p\">();<\/span>\r\n      <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nf\">subscribe<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"na\">methods<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"k\">async<\/span> <span class=\"nf\">createTodo<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">name<\/span><span class=\"p\">,<\/span> <span class=\"nx\">description<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"k\">this<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nx\">name<\/span> <span class=\"o\">||<\/span> <span class=\"o\">!<\/span><span class=\"nx\">description<\/span><span class=\"p\">)<\/span> <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"kd\">const<\/span> <span class=\"nx\">todo<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">name<\/span><span class=\"p\">,<\/span> <span class=\"nx\">description<\/span> <span class=\"p\">};<\/span>\r\n        <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[...<\/span><span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span><span class=\"p\">,<\/span> <span class=\"nx\">todo<\/span><span class=\"p\">];<\/span>\r\n        <span class=\"k\">await<\/span> <span class=\"nx\">API<\/span><span class=\"p\">.<\/span><span class=\"nf\">graphql<\/span><span class=\"p\">({<\/span>\r\n          <span class=\"na\">query<\/span><span class=\"p\">:<\/span> <span class=\"nx\">createTodo<\/span><span class=\"p\">,<\/span>\r\n          <span class=\"na\">variables<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span> <span class=\"na\">input<\/span><span class=\"p\">:<\/span> <span class=\"nx\">todo<\/span> <span class=\"p\">}<\/span>\r\n        <span class=\"p\">});<\/span>\r\n        <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">''<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">description<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">''<\/span><span class=\"p\">;<\/span>\r\n      <span class=\"p\">},<\/span>\r\n      <span class=\"k\">async<\/span> <span class=\"nf\">getTodos<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"kd\">const<\/span> <span class=\"nx\">todos<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">API<\/span><span class=\"p\">.<\/span><span class=\"nf\">graphql<\/span><span class=\"p\">({<\/span>\r\n          <span class=\"na\">query<\/span><span class=\"p\">:<\/span> <span class=\"nx\">listTodos<\/span>\r\n        <span class=\"p\">});<\/span>\r\n        <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">todos<\/span><span class=\"p\">.<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">listTodos<\/span><span class=\"p\">.<\/span><span class=\"nx\">items<\/span><span class=\"p\">;<\/span>\r\n      <span class=\"p\">},<\/span>\r\n      <span class=\"nf\">subscribe<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">API<\/span><span class=\"p\">.<\/span><span class=\"nf\">graphql<\/span><span class=\"p\">({<\/span> <span class=\"na\">query<\/span><span class=\"p\">:<\/span> <span class=\"nx\">onCreateTodo<\/span> <span class=\"p\">}).<\/span><span class=\"nf\">subscribe<\/span><span class=\"p\">({<\/span>\r\n          <span class=\"na\">next<\/span><span class=\"p\">:<\/span> <span class=\"p\">(<\/span><span class=\"nx\">eventData<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"kd\">let<\/span> <span class=\"nx\">todo<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">eventData<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span><span class=\"p\">.<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">onCreateTodo<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span><span class=\"p\">.<\/span><span class=\"nf\">some<\/span><span class=\"p\">((<\/span><span class=\"nx\">item<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">item<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span> <span class=\"o\">===<\/span> <span class=\"nx\">todo<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span><span class=\"p\">))<\/span> <span class=\"k\">return<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ remove duplications<\/span>\r\n            <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[...<\/span><span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span><span class=\"p\">,<\/span> <span class=\"nx\">todo<\/span><span class=\"p\">];<\/span>\r\n          <span class=\"p\">}<\/span>\r\n        <span class=\"p\">});<\/span>\r\n      <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}<\/span>\r\n  <span class=\"p\">};<\/span>\r\n<span class=\"nt\">&lt;\/<\/span><span class=\"k\">script<\/span><span class=\"nt\">&gt;<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d810b913a08637a6ac1a2\/92-0.png\" alt=\"image.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d810b913a08637a6ac1a2\/93-0.png\" alt=\"image.png\" \/><\/div>\n<h1>5. \u90e8\u7f72\u548c\u6258\u7ba1\u5e94\u7528\u7a0b\u5e8f h\u00e9<\/h1>\n<h2>\u589e\u52a0\u4e3b\u673a\u9009\u9879<\/h2>\n<pre class=\"post-pre\"><code>amplify add hosting\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>? Select the plugin module to execute ...  (Use arrow keys or type to filter)\r\n\u276f Hosting with Amplify Console (Managed hosting with custom domains, Continuous deployment)\r\n  Amazon CloudFront and S3\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>? Choose a type (Use arrow keys)\r\n  Continuous deployment (Git-based deployments)\r\n&gt; Manual deployment\r\n  Learn more\r\n<\/code><\/pre>\n<h2>\u53d1\u5e03\u5e94\u7528\u7a0b\u5e8f<\/h2>\n<pre class=\"post-pre\"><code>amplify publish\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u276f amplify publish\r\n(\u7565)\r\n    Current Environment: dev\r\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502 Category \u2502 Resource name  \u2502 Operation \u2502 Provider plugin   \u2502\r\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502 Hosting  \u2502 amplifyhosting \u2502 Create    \u2502 awscloudformation \u2502\r\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502 Api      \u2502 todo           \u2502 No Change \u2502 awscloudformation \u2502\r\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502 Auth     \u2502 todo06ef4fc2   \u2502 No Change \u2502 awscloudformation \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\r\n? Are you sure you want to continue? Yes\r\n\r\nDeployment completed.\r\nDeployed root stack todo [ ======================================== ] 4\/4\r\n        amplify-todo-dev-******        AWS::CloudFormation::Stack     UPDATE_COMPLETE\r\n        apitodo                        AWS::CloudFormation::Stack     UPDATE_COMPLETE\r\n        hostingamplifyhosting          AWS::CloudFormation::Stack     CREATE_COMPLETE\r\n        authtodo********               AWS::CloudFormation::Stack     UPDATE_COMPLETE\r\nDeployed hosting amplifyhosting [ ======================================== ] 1\/1\r\n        AmplifyBranch                  AWS::Amplify::Branch           CREATE_COMPLETE\r\n(\u7565)\r\nPublish started for amplifyhosting\r\n\r\n&gt; myamplifyproject@0.0.0 build\r\n&gt; vite build\r\n(\u7565)\r\n\u221a Zipping artifacts completed.\r\n\u221a Deployment complete!\r\nhttps:\/\/dev.***********.amplifyapp.com\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d810b913a08637a6ac1a2\/102-0.png\" alt=\"image.png\" \/><\/div>\n<h3>\u66f4\u65b0\u65b9\u5f0f<\/h3>\n<p>\u53ea\u8981\u8fdb\u884c\u4fee\u6b63\uff0c\u5c31\u9700\u8981\u91cd\u65b0\u5f00\u59cb\u3002<\/p>\n<pre class=\"post-pre\"><code>amplify publish\r\n<\/code><\/pre>\n<h1>6. \u73af\u5883\u6e05\u7406<\/h1>\n<p>\u5982\u679c\u8981\u5220\u9664\u521b\u5efa\u7684\u73af\u5883\uff0c\u8bf7\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\u3002<\/p>\n<pre class=\"post-pre\"><code>amplify delete\r\n<\/code><\/pre>\n<h1>\u8ff7\u4eba\u7684\u4eae\u70b9<\/h1>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d810b913a08637a6ac1a2\/110-0.png\" alt=\"image.png\" \/><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 \u7531\u4e8e\u4e0d\u592a\u7406\u89e3Amplify\u662f\u4ec0\u4e48\uff0c\u6240\u4ee5\u6211\u5c1d\u8bd5\u505a\u4e86\u4e00\u4e0b\u6559\u7a0b\u3002 \u6709\u5f88\u591a\u4eba\u4ecb\u7ecd\u4e86\u5404\u79cd\u6559\u7a0b\uff0c\u4f46\u662f\u5185\u5bb9\u6709\u70b9\u8fc7\u65f6\uff0c\u6240 [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-47849","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>\u6211\u8bd5\u7740\u505a\u4e86Amplify\u7684\u6559\u7a0b(Vue.js) - 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\/\u6211\u8bd5\u7740\u505a\u4e86amplify\u7684\u6559\u7a0bvue-js\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u6211\u8bd5\u7740\u505a\u4e86Amplify\u7684\u6559\u7a0b(Vue.js)\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 \u7531\u4e8e\u4e0d\u592a\u7406\u89e3Amplify\u662f\u4ec0\u4e48\uff0c\u6240\u4ee5\u6211\u5c1d\u8bd5\u505a\u4e86\u4e00\u4e0b\u6559\u7a0b\u3002 \u6709\u5f88\u591a\u4eba\u4ecb\u7ecd\u4e86\u5404\u79cd\u6559\u7a0b\uff0c\u4f46\u662f\u5185\u5bb9\u6709\u70b9\u8fc7\u65f6\uff0c\u6240 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u6211\u8bd5\u7740\u505a\u4e86amplify\u7684\u6559\u7a0bvue-js\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-26T15:12:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T08:02:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d810b913a08637a6ac1a2\/14-0.png\" \/>\n<meta name=\"author\" content=\"\u6587, \u7fd4\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6587, \u7fd4\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 \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\/%e6%88%91%e8%af%95%e7%9d%80%e5%81%9a%e4%ba%86amplify%e7%9a%84%e6%95%99%e7%a8%8bvue-js%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e7%9d%80%e5%81%9a%e4%ba%86amplify%e7%9a%84%e6%95%99%e7%a8%8bvue-js%e3%80%82\/\",\"name\":\"\u6211\u8bd5\u7740\u505a\u4e86Amplify\u7684\u6559\u7a0b(Vue.js) - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2022-12-26T15:12:49+00:00\",\"dateModified\":\"2024-04-30T08:02:04+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e7%9d%80%e5%81%9a%e4%ba%86amplify%e7%9a%84%e6%95%99%e7%a8%8bvue-js%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e7%9d%80%e5%81%9a%e4%ba%86amplify%e7%9a%84%e6%95%99%e7%a8%8bvue-js%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e7%9d%80%e5%81%9a%e4%ba%86amplify%e7%9a%84%e6%95%99%e7%a8%8bvue-js%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u6211\u8bd5\u7740\u505a\u4e86Amplify\u7684\u6559\u7a0b(Vue.js)\"}]},{\"@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\/64d5cc7727fffbff2f9a2a8da1de3e5c\",\"name\":\"\u6587, \u7fd4\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"caption\":\"\u6587, \u7fd4\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e7%9d%80%e5%81%9a%e4%ba%86amplify%e7%9a%84%e6%95%99%e7%a8%8bvue-js%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u6211\u8bd5\u7740\u505a\u4e86Amplify\u7684\u6559\u7a0b(Vue.js) - 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\/\u6211\u8bd5\u7740\u505a\u4e86amplify\u7684\u6559\u7a0bvue-js\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u6211\u8bd5\u7740\u505a\u4e86Amplify\u7684\u6559\u7a0b(Vue.js)","og_description":"\u9996\u5148 \u7531\u4e8e\u4e0d\u592a\u7406\u89e3Amplify\u662f\u4ec0\u4e48\uff0c\u6240\u4ee5\u6211\u5c1d\u8bd5\u505a\u4e86\u4e00\u4e0b\u6559\u7a0b\u3002 \u6709\u5f88\u591a\u4eba\u4ecb\u7ecd\u4e86\u5404\u79cd\u6559\u7a0b\uff0c\u4f46\u662f\u5185\u5bb9\u6709\u70b9\u8fc7\u65f6\uff0c\u6240 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u6211\u8bd5\u7740\u505a\u4e86amplify\u7684\u6559\u7a0bvue-js\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2022-12-26T15:12:49+00:00","article_modified_time":"2024-04-30T08:02:04+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d810b913a08637a6ac1a2\/14-0.png"}],"author":"\u6587, \u7fd4","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6587, \u7fd4","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"9 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e7%9d%80%e5%81%9a%e4%ba%86amplify%e7%9a%84%e6%95%99%e7%a8%8bvue-js%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e7%9d%80%e5%81%9a%e4%ba%86amplify%e7%9a%84%e6%95%99%e7%a8%8bvue-js%e3%80%82\/","name":"\u6211\u8bd5\u7740\u505a\u4e86Amplify\u7684\u6559\u7a0b(Vue.js) - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2022-12-26T15:12:49+00:00","dateModified":"2024-04-30T08:02:04+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e7%9d%80%e5%81%9a%e4%ba%86amplify%e7%9a%84%e6%95%99%e7%a8%8bvue-js%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e7%9d%80%e5%81%9a%e4%ba%86amplify%e7%9a%84%e6%95%99%e7%a8%8bvue-js%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e7%9d%80%e5%81%9a%e4%ba%86amplify%e7%9a%84%e6%95%99%e7%a8%8bvue-js%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u6211\u8bd5\u7740\u505a\u4e86Amplify\u7684\u6559\u7a0b(Vue.js)"}]},{"@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\/64d5cc7727fffbff2f9a2a8da1de3e5c","name":"\u6587, \u7fd4","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","caption":"\u6587, \u7fd4"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e8%af%95%e7%9d%80%e5%81%9a%e4%ba%86amplify%e7%9a%84%e6%95%99%e7%a8%8bvue-js%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\/47849","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\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=47849"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/47849\/revisions"}],"predecessor-version":[{"id":92884,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/47849\/revisions\/92884"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=47849"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=47849"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=47849"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}