{"id":48325,"date":"2024-01-10T18:22:26","date_gmt":"2023-06-10T23:16:57","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-vue-js-%e5%92%8c-typescript-%e6%9d%a5%e6%90%ad%e5%bb%ba-amplify-%e7%9a%84%e8%bf%9c%e7%a8%8b%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/"},"modified":"2024-05-04T17:44:39","modified_gmt":"2024-05-04T09:44:39","slug":"%e4%bd%bf%e7%94%a8-vue-js-%e5%92%8c-typescript-%e6%9d%a5%e6%90%ad%e5%bb%ba-amplify-%e7%9a%84%e8%bf%9c%e7%a8%8b%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-vue-js-%e5%92%8c-typescript-%e6%9d%a5%e6%90%ad%e5%bb%ba-amplify-%e7%9a%84%e8%bf%9c%e7%a8%8b%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/","title":{"rendered":"\u4f7f\u7528 Vue.js \u548c TypeScript \u6765\u642d\u5efa Amplify \u7684\u8fdc\u7a0b\u5f00\u53d1\u73af\u5883"},"content":{"rendered":"<h1>\u7b80\u5316\u3002<\/h1>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8460913a08637a6b6122\/1-0.jpg\" alt=\"\" \/><\/div>\n<h2>\u9996\u5148<\/h2>\n<p>\u203b\u6211\u5c062022\u5e743\u6708\u7684\u6587\u7ae0\u66f4\u65b0\u81f32022\u5e7411\u6708\u3002\uff08\u671f\u95f4\u6709\u76f8\u5f53\u6fc0\u70c8\u7684\u66f4\u65b0\u3002\uff09<br \/>\n\u6211\u5728JAWS-UG\u6d5c\u677e\u8fdb\u884c\u6d3b\u52a8\u3002\u6211\u4eec\u4e5f\u6709\u5728\u7ebf\u5b66\u4e60\u4f1a\u8bae\uff0c\u6b22\u8fce\u53c2\u52a0\u3002\u8c22\u8c22\u3002<\/p>\n<p>\u4f7f\u7528Amplify\uff0c\u6211\u4eec\u8fdb\u884c\u4e86\u4e00\u7cfb\u5217\u7684\u6559\u7a0b\u3002\u63a5\u4e0b\u6765\uff0c\u5f53\u6211\u4eec\u5c1d\u8bd5\u521b\u5efa\u4e00\u4e9b\u4e1c\u897f\u65f6\uff0c\u6211\u4eec\u88ab\u4e0d\u65ad\u6709\u65b0\u7248\u672c\u66f4\u65b0\u7684\u5e93\u548c\u5927\u91cf\u7684Amplify\u8fd9\u4e2a\u8bcd\u6240\u56f0\u6270\u3002\u6b64\u5916\uff0c\u6a21\u62df\u529f\u80fd\u4e5f\u8868\u73b0\u4e0d\u7a33\u5b9a\uff0cAmplify push\u4e5f\u5931\u8d25\u4e86\uff0c\u5bfc\u81f4\u6211\u56db\u5904\u78b0\u58c1\uff0c\u6700\u7ec8\u4e0d\u5f97\u4e0d\u91cd\u65b0\u6784\u5efa\u5f00\u53d1\u73af\u5883\u3002\u5728Vue\u7684\u5f00\u53d1\u4e2d\uff0c\u4e5f\u9700\u8981\u5171\u4eab\u73af\u5883\u8bbe\u7f6e\uff08\u5982node.js\u548cVue\uff09\u6765\u9002\u5e94\u4e0d\u540c\u7684\u7248\u672c\u8981\u6c42\u3002<\/p>\n<h2>\u73af\u5883\u6837\u4f8b<\/h2>\n<p>\u6587\u4ef6\u7ed3\u6784<\/p>\n<pre class=\"post-pre\"><code>amplify-vuejs-docker\r\n\u251c\u2500\u2500 .devcontainer\/\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 devcontainer.json\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 docker-compose.yml\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 web\/\r\n\u2502\u00a0\u00a0\t  \u2514\u2500\u2500 Dockerfile\r\n\u2514\u2500\u2500 server\/\r\n<\/code><\/pre>\n<h3>1. docker-compose.yml<\/h3>\n<p>1. Docker-compose.yml\u6587\u4ef6<\/p>\n<p>\u7531\u4e8e\u4f7f\u7528vuetify+vite\u6846\u67b6\uff0c\u5728\u8fd9\u6b21\u60c5\u51b5\u4e0b\u8fdb\u884c\u4e86\u7aef\u53e33000\u7684\u5f00\u653e\u3002\u800c\u7aef\u53e320002\u662f\u7528\u4e8e\u6a21\u62df\u7684\u3002<br \/>\n\u5728Windows\u73af\u5883\u4e0b\uff0c\u65e0\u9700\u8fdb\u884c\u6b64\u8bbe\u7f6e\u4e5f\u53ef\u4ee5\u4f7f\u7528\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">version<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">3.8'<\/span>\r\n\r\n<span class=\"na\">services<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">amplify<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">build<\/span><span class=\"pi\">:<\/span> <span class=\"s\">.\/web<\/span>\r\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"c1\"># yarn dev<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">3000:3000<\/span>\r\n      <span class=\"c1\"># mock api<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">20002:20002<\/span>\r\n    <span class=\"na\">stdin_open<\/span><span class=\"pi\">:<\/span> <span class=\"kc\">true<\/span>\r\n    <span class=\"na\">working_dir<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">\/app'<\/span>\r\n    <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">..\/server:\/app<\/span>\r\n      <span class=\"c1\"># credential,config\u3092\u4fdd\u7ba1\u3057\u305f\u3044\u4eba\u5411\u3051<\/span>\r\n      <span class=\"c1\"># - ..\/dev\/aws\/:\/root\/.aws\/<\/span>\r\n    <span class=\"na\">tty<\/span><span class=\"pi\">:<\/span> <span class=\"kc\">true<\/span>\r\n<\/code><\/pre>\n<h3>2. Dockerfile<br \/>\n2. Docker \u914d\u7f6e\u6587\u4ef6<\/h3>\n<p>\u4e3a\u4e86\u4f7f\u7528Amplify Mocking\uff08\u672c\u5730\u6a21\u62df\uff09\uff0c\u5b89\u88c5Java\u3002<br \/>\n\u5c1d\u8bd5\u4f7f\u7528Amazon Corretto\u3002<br \/>\n\u6211\u4eec\u4f7f\u7528\u6700\u65b0\u7a33\u5b9a\u7248\u672c\u7684Docker\u6765\u8fd0\u884cNode\u3002<br \/>\n\u91cd\u8981\u7684\u662f\u8981\u8fdb\u884c\u7248\u672c\u6307\u5b9a\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">FROM<\/span><span class=\"s\"> node:18.12.1<\/span>\r\n<span class=\"c\"># java for Amplify Mock<\/span>\r\n<span class=\"k\">RUN <\/span>apt update<span class=\"p\">;<\/span> apt <span class=\"nb\">install<\/span> <span class=\"nt\">-y<\/span> wget software-properties-common apt-transport-https\r\n<span class=\"k\">RUN <\/span>wget <span class=\"nt\">-O-<\/span> https:\/\/apt.corretto.aws\/corretto.key | apt-key add - \r\n<span class=\"k\">RUN <\/span>add-apt-repository <span class=\"s1\">'deb https:\/\/apt.corretto.aws stable main'<\/span>\r\n<span class=\"k\">RUN <\/span>apt update<span class=\"p\">;<\/span> apt-get <span class=\"nb\">install<\/span> <span class=\"nt\">-y<\/span> java-18-amazon-corretto-jdk\r\n<span class=\"c\"># git-flow<\/span>\r\n<span class=\"k\">RUN <\/span>apt <span class=\"nb\">install <\/span>git-flow\r\n<span class=\"c\"># amplify<\/span>\r\n<span class=\"k\">RUN <\/span>yarn global add @aws-amplify\/cli@10.5.1\r\n<\/code><\/pre>\n<h3>3. \u5f00\u53d1\u5bb9\u5668\u7684\u914d\u7f6e\u6587\u4ef6 devcontainer.json<\/h3>\n<p>\u6211\u8981\u5206\u4eabVSCode\u7684\u8bbe\u7f6e\u3002<br \/>\n\u5982\u679c\u4f7f\u7528Vue 3.x\uff0c\u5c31\u8981\u4f7f\u7528volar\u63d2\u4ef6\u3002 (misterj.vue-volar-\u6269\u5c55\u5305)<br \/>\n\u6211\u8fd8\u4f1a\u6dfb\u52a0\u8981\u5171\u4eab\u7684\u73af\u5883\u4fe1\u606f\u7b49\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"p\">{<\/span>\r\n  <span class=\"nl\">\"name\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"Amplify Vue3\"<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"nl\">\"dockerComposeFile\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"docker-compose.yml\"<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"nl\">\"service\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"amplify\"<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"nl\">\"workspaceFolder\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"\/app\"<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"nl\">\"extensions\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n    <span class=\"s2\">\"misterj.vue-volar-extention-pack\"<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"s2\">\"aws-amplify.aws-amplify-vscode\"<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"s2\">\"GraphQL.vscode-graphql\"<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"s2\">\"oderwat.indent-rainbow\"<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"s2\">\"mhutchie.git-graph\"<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"s2\">\"eamodio.gitlens\"<\/span>\r\n  <span class=\"p\">],<\/span>\r\n  <span class=\"nl\">\"settings\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nl\">\"eslint.options\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nl\">\"extensions\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"s2\">\".js\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\".vue\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\".ts\"<\/span><span class=\"p\">]<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nl\">\"eslint.validate\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"s2\">\"typescript\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"javascript\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"vue\"<\/span><span class=\"p\">],<\/span>\r\n    <span class=\"nl\">\"editor.codeActionsOnSave\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nl\">\"source.organizeImports\"<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nl\">\"source.fixAll.eslint\"<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nl\">\"source.fixAll\"<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nl\">\"typescript.preferences.importModuleSpecifierEnding\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"minimal\"<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nl\">\"eslint.format.enable\"<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nl\">\"editor.defaultFormatter\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"esbenp.prettier-vscode\"<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nl\">\"prettier.trailingComma\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"all\"<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nl\">\"prettier.useEditorConfig\"<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nl\">\"prettier.jsxSingleQuote\"<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nl\">\"prettier.printWidth\"<\/span><span class=\"p\">:<\/span> <span class=\"mi\">100<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nl\">\"prettier.semi\"<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nl\">\"prettier.singleQuote\"<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nl\">\"prettier.tabWidth\"<\/span><span class=\"p\">:<\/span> <span class=\"mi\">2<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h2>\u7528\u6cd5<\/h2>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u5b89\u88c5Docker<\/ol>\n<\/li>\n<\/ol>\n<p>\u5b89\u88c5VSCode<\/p>\n<p>\u5b89\u88c5VSCode\u7684Remote Development\u6269\u5c55<\/p>\n<p>\u514b\u9686\u4ed3\u5e93<\/p>\n<pre class=\"post-pre\"><code>git clone https:\/\/github.com\/covasue\/amplify-vuejs-docker\r\n<\/code><\/pre>\n<p>\u5c06\u514b\u9686\u7684amplify-vuejs-docker\u5bfc\u822a\u5230\u6307\u5b9a\u4f4d\u7f6e\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">cd <\/span>amplify-vuejs-docker\r\n<\/code><\/pre>\n<p>\u5728\u8fd9\u91cc\u8fdb\u884c\u73af\u5883\u8bbe\u7f6e\u3002<br \/>\n\u542f\u52a8VSCode\u5e76\u70b9\u51fb&#8221;\u5728\u5bb9\u5668\u4e2d\u91cd\u65b0\u6253\u5f00&#8221;\u3002<\/p>\n<pre class=\"post-pre\"><code>code <span class=\"nb\">.<\/span>\r\n<\/code><\/pre>\n<p>\u7531\u4e8e\u521d\u59cb\u914d\u7f6e\u7684\u6784\u5efa\uff0c\u7b2c\u4e00\u6b21\u9700\u8981\u7ea64\u52305\u5206\u949f\u7684\u65f6\u95f4\u624d\u80fd\u5efa\u7acb\u5bb9\u5668\uff0c\u4f46\u662f\u4ece\u7b2c\u4e8c\u6b21\u5f00\u59cb\uff0c\u5bb9\u5668\uff08\u5f00\u53d1\u73af\u5883\uff09\u5c06\u57284\u52305\u79d2\u5185\u542f\u52a8\u3002<br \/>\n\u4e00\u65e6\u5173\u95edVSCode\uff0c\u5bb9\u5668\u5c06\u81ea\u52a8\u505c\u6b62\u3002<\/p>\n<h3>\u5728Windows\u4e2d\uff0c\u5e94\u8be5\u901a\u8fc7WSL2\u6765\u8fd0\u884c\u3002<\/h3>\n<p>\u5728\u4f7f\u7528\u8fdc\u7a0b\u5f00\u53d1\u65f6\uff0c\u539f\u672c\u5e94\u8be5\u53ef\u4ee5\u4ee5\u7206\u901f\u8fdb\u884c\u5f00\u53d1\u7684\uff0c\u4f46\u662f\u5374\u53d8\u5f97\u5f02\u5e38\u7f13\u6162\uff0c\u800c\u4e14\u5728webpack5 (vue\/cli@5)\u4e2d\u51fa\u73b0\u4e86\u65e0\u6cd5\u8fdb\u884c\u70ed\u91cd\u8f7d\u7684\u95ee\u9898\u3002\u7ecf\u8fc7\u8c03\u67e5\u53d1\u73b0\uff0c\u4e0d\u80fd\u6df7\u5408\u4f7f\u7528FileSystem\u3002\u8fd9\u4e2a\u7f51\u7ad9\u4e0a\u6709\u8be6\u7ec6\u7684\u8bf4\u660e\u3002<br \/>\nhttps:\/\/levelup.gitconnected.com\/docker-desktop-on-wsl2-the-problem-with-mixing-file-systems-a8b5dcd79b22<br \/>\n\u73b0\u5728yarn dev\u6216build\u751a\u81f3\u6bd4\u4f7f\u7528Docker\u4e4b\u524d\u8fd8\u8981\u5feb\uff0c\u7b80\u76f4\u8ba9\u4eba\u96be\u4ee5\u7f6e\u4fe1\u3002<\/p>\n<h2>\u5728\u4e0a\u8ff0\u7684\u73af\u5883\u4e2d\u7684\u4f18\u70b9<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Amplify CLI\u3068Vue CLI\u3068Mock\u306e\u5fc5\u9808\u6761\u4ef6\u306eJDK\u3092\u305d\u308c\u305e\u308c\u30d0\u30fc\u30b8\u30e7\u30f3\u6307\u5b9a\u3057\u305f\u72b6\u614b\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\u72b6\u614b\u306b\u306a\u308b\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u69cb\u7bc9\u4f5c\u696d\u3092\u7d42\u3048\u308b\u3068\u3001VSCode\u306e\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u958b\u304f\u3060\u3051\u3067\u3001Docker\u64cd\u4f5c\u3092\u7279\u306b\u610f\u8b58\u3059\u308b\u3053\u3068\u306a\u304f\u30b3\u30f3\u30c6\u30ca\u306b\u5165\u308a\u3001\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u306e\u3088\u3046\u306bVSCode\u304b\u3089\u30bf\u30fc\u30df\u30ca\u30eb\u3092\u305f\u305f\u304f\u3053\u3068\u304c\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">git clone ,git checkout xxx, amplify init ,yarn\u3000\u6982\u306d4\u30b9\u30c6\u30c3\u30d7\u3067\u74b0\u5883\u518d\u73fe<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">VSCode\u306e\u8a2d\u5b9a\u3092\u5171\u6709\u3067\u304d\u308b\u3002\u4f8b\u3048\u3070\u30bb\u30df\u30b3\u30ed\u30f3\u3001\u30af\u30a9\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u306a\u3069\u306e\u8a2d\u5b9a\u3092\u4fdd\u6301\u3067\u304d\u308b<\/ul>\n<h2>\u6211\u5c06\u4f7f\u7528TypeScript\u6765\u5c1d\u8bd5\u516c\u5f0f\u6559\u7a0b\u3002<\/h2>\n<h3>\u524d\u63d0\u6761\u4ef6\uff08\u6b65\u9aa41\uff09<\/h3>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8460913a08637a6b6122\/31-0.jpg\" alt=\"\" \/><\/div>\n<p>\u9996\u5148\uff0c\u901a\u8fc7Amplify CLI\u7684\u547d\u4ee4\u201camplify configure\u201d\u521b\u5efaIAM\u7528\u6237\u3002<br \/>\n\u5728\u6b64\u8fc7\u7a0b\u4e2d\uff0c\u9700\u8981\u8bbf\u95eeWeb\u63a7\u5236\u53f0\uff0c\u8bf7\u51c6\u5907\u597d\u8bbf\u95eeWeb\u63a7\u5236\u53f0\u7684\u6761\u4ef6\u3002<\/p>\n<h4>1. \u901a\u8fc7\u4f7f\u7528Amplify\u914d\u7f6e\u6765\u521b\u5efa\u65b0\u7684IAM\u7528\u6237\u3002<\/h4>\n<pre class=\"post-pre\"><code>amplify configure\r\n<\/code><\/pre>\n<h4>2. \u7531\u4e8e\u4ee5\u5bf9\u8bdd\u5f62\u5f0f\u8fdb\u884c\u63d0\u95ee\uff0c\u56e0\u6b64\u8bf7\u6309\u7167\u6307\u5bfc\u8fdb\u884c\u8f93\u5165\u3002<\/h4>\n<p>\u5efa\u8bae\u9009\u62e9\u4e1c\u4eac\u533a\u57df(ap-northeast-1)\u4f5c\u4e3a\u6700\u4f73\u9009\u62e9\u3002<\/p>\n<pre class=\"post-pre\"><code>Specify the AWS Region\r\n? region:  # Your preferred region \r\nSpecify the username of the new IAM user:\r\n? user name:  # User name for Amplify IAM user\r\nComplete the user creation using the AWS console\r\n<\/code><\/pre>\n<h4>3. \u6d4f\u89c8\u5668\u5c06\u6253\u5f00\u5e76\u63d0\u793a\u7528\u6237\u8fdb\u884c\u521b\u5efa\u3002<\/h4>\n<p>\u6700\u540e\uff0c\u5c06Access key\u548cSecret Access key\u4fdd\u5b58\u8d77\u6765\u3002<\/p>\n<h4>4. \u8f93\u5165\u4e0b\u4e00\u90e8\u5206\u3002<\/h4>\n<pre class=\"post-pre\"><code>Enter the access key of the newly created user:\r\n? accessKeyId:  # YOUR_ACCESS_KEY_ID\u3000\u3055\u304d\u307b\u3069\u4fdd\u5b58\u3057\u305fAccess key\r\n? secretAccessKey:  # YOUR_SECRET_ACCESS_KEY \u3055\u304d\u307b\u3069\u4fdd\u5b58\u3057\u305f Secret Access key\r\nThis would update\/create the AWS Profile in your local machine\r\n? Profile Name:  # (default) \u4f55\u304b\u540d\u524d\u3092\u4ed8\u3051\u307e\u3057\u3087\u3046\u3002 \r\n\r\nSuccessfully set up the new user.\r\n<\/code><\/pre>\n<p>\u5728Step1\u7684\u64cd\u4f5c\u5df2\u7ecf\u5b8c\u6210\u3002<br \/>\nAccess key\u548cSecret Access key\u5728Step2\u4e2d\u4e5f\u4f1a\u7528\u5230\u3002<\/p>\n<h3>\u521b\u5efa\u5168\u6808\u9879\u76ee\uff08\u7b2c\u4e8c\u6b65\uff09<\/h3>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8460913a08637a6b6122\/44-0.jpg\" alt=\"\" \/><\/div>\n<p>\u5728\u8fd9\u4e00\u6b65\u4e2d\uff0c\u6211\u4eec\u5c06\u521b\u5efaVue\u9879\u76ee\uff0c\u5e76\u5b89\u88c5Amplify Libraries\u548cAmplify UI Components\uff0c\u7136\u540e\u5c06Amplify Libraries\u52a0\u8f7d\u5230Vue\u4e2d\u3002<\/p>\n<p>\u5982\u679c\u5f00\u53d1\u73af\u5883\u4e0e\u4e0a\u6b21\u76f8\u540c\uff0c\u5219\u8df3\u8fc7\u5b89\u88c5\uff0c\u56e0\u4e3a@vue\/cli\u5df2\u7ecf\u5b89\u88c5\u4e86\u3002<\/p>\n<h4>\u521b\u5efa\u4e00\u4e2aVue\u9879\u76ee\uff08\u4f7f\u7528Vuetify\uff09<\/h4>\n<pre class=\"post-pre\"><code>yarn create vuetify\r\n<\/code><\/pre>\n<p>myamplifyproject\u662f\u9879\u76ee\u7684\u540d\u79f0\u3002 (myamplifyproject is the project&#8217;s name.)<\/p>\n<pre class=\"post-pre\"><code>yarn create v1.22.19[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 Installed \"create-vuetify@1.0.4\" with binaries:\r\n      - create-vuetify\r\n[#######################################] 39\/39\r\nVuetify.js - Material Component Framework for Vue\r\n\r\n\u2714 Project name: \u2026 myamplifyproject\r\n\u2714 Use TypeScript? \u2026 No \/ Yes\r\n\u2714 Would you like to install dependencies with yarn, npm, or pnpm? \u203a yarn\r\n<\/code><\/pre>\n<p>\u9009\u62e9\u540e\uff0c\u7a0d\u7b49\u4e00\u4f1a\u513f\u4ee5\u7b49\u5f85\u9879\u76ee\u521b\u5efa\u5b8c\u6210\u3002\u4e00\u65e6\u521b\u5efa\u5b8c\u6210\uff0c\u5c31\u4f1a\u5207\u6362\u5230\u76ee\u5f55\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">cd <\/span>myamplifyproject\r\n<\/code><\/pre>\n<p>\u6211\u4f1a\u68c0\u67e5Vue\u9879\u76ee\u662f\u5426\u6b63\u786e\u521b\u5efa\uff0c\u5e76\u542f\u52a8\u670d\u52a1\u5668\u8fdb\u884c\u786e\u8ba4\u3002<br \/>\n\u7aef\u53e33000\u5df2\u7ecf\u6253\u5f00\uff0cVuetify\u548cVue\u73af\u5883\u4f1a\u4ee5\u60ca\u4eba\u7684\u901f\u5ea6\u542f\u52a8\u3002<\/p>\n<pre class=\"post-pre\"><code>yarn dev\r\n<\/code><\/pre>\n<p>\u4f7f\u7528Ctrl + C\u505c\u6b62\u670d\u52a1\u5668\u3002<\/p>\n<h4>2. \u5f00\u59cb\u4e00\u4e2a\u65b0\u7684\u540e\u7aef<\/h4>\n<p>\u6267\u884c Amplify CLI \u7684\u547d\u4ee4 amplify init\u3002<br \/>\n\u4e4b\u524d\u7684 configure \u66f4\u591a\u662f\u7528\u6765\u521b\u5efa\u8d26\u6237\uff08IAM \u7528\u6237\uff09\u3002<br \/>\n\u800c\u8fd9\u6b21\u7684 init \u662f\u7528\u6765\u8fdb\u884c\u9879\u76ee\u7684\uff08\u521d\u59cb\uff09\u8bbe\u7f6e\u3002<br \/>\n\u8bf7\u786e\u4fdd\u5df2\u7ecf\u5207\u6362\u5230\u9879\u76ee\u6240\u5728\u7684\u76ee\u5f55\uff0c\u7136\u540e\u8f93\u5165\u547d\u4ee4\u3002<br \/>\n\u203b\u4f8b\u5b50\uff1aroot@farwq13fa:\/app\/myamplifyproject# amplify init<\/p>\n<pre class=\"post-pre\"><code>amplify init\r\n<\/code><\/pre>\n<p>\u8bf7\u8bbe\u7f6e\u7528\u4e8e\u521b\u5efa\u540e\u7aef\u7684\u9879\u76ee\u540d\u79f0\u3002\u7531\u4e8e\u5b83\u5c06\u7528\u4f5c\u521b\u5efa\u8d44\u6e90\u65f6\u7684\u524d\u7f00\uff0c\u56e0\u6b64\u6700\u597d\u9009\u62e9\u4e00\u4e2a\u6613\u4e8e\u7406\u89e3\u7684\u540d\u79f0\u3002<\/p>\n<pre class=\"post-pre\"><code>? Enter a name for the project (myamplifyproject) todo\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8460913a08637a6b6122\/61-0.png\" alt=\"\" \/><\/div>\n<p>\u63a5\u4e0b\u6765\u5c06\u8fdb\u884cIAM\u7528\u6237\u7684\u8bbe\u7f6e\uff0c\u7528\u4e8e\u6b64\u9879\u76ee\u3002\u4f1a\u5148\u8be2\u95ee\u662f\u5426\u4f7f\u7528AWS\u914d\u7f6e\u6587\u4ef6\uff08AWS profile\uff09\u3002\u6211\u5c06\u4f7f\u7528\u521a\u624d\u83b7\u53d6\u5230\u7684\u8bbf\u95ee\u5bc6\u94a5\u548c\u79d8\u5bc6\u8bbf\u95ee\u5bc6\u94a5\u3002<\/p>\n<pre class=\"post-pre\"><code>? Do you want to use an AWS profile? (Y\/n)\r\n<\/code><\/pre>\n<p>\u8f93\u5165 n\u3002<\/p>\n<pre class=\"post-pre\"><code>? accessKeyId:  (&lt;YOUR_ACCESS_KEY_ID&gt;) #\u3055\u304d\u307b\u3069\u4fdd\u5b58\u3057\u305fAccess key\r\n? secretAccessKey:  (&lt;YOUR_SECRET_ACCESS_KEY&gt;) #\u3055\u304d\u307b\u3069\u4fdd\u5b58\u3057\u305f Secret Access key\r\n<\/code><\/pre>\n<p>\u63a5\u4e0b\u6765\u9009\u62e9\u5730\u533a\u3002<\/p>\n<pre class=\"post-pre\"><code>? region:  (Use arrow keys)\r\n\u276f us-east-1 \r\n  us-east-2 \r\n  us-west-2 \r\n  eu-west-1 \r\n  eu-west-2 \r\n  eu-central-1 \r\n  ap-northeast-1 \r\n(Move up and down to reveal more choices)\r\n<\/code><\/pre>\n<p>\u8bf7\u4eceStep1\u4e2d\u9009\u62e9\u60a8\u60f3\u8981\u7684\u5730\u533a\u3002\u5982\u679c\u9009\u62e9\u4e1c\u4eac\uff0c\u8bf7\u9009\u62e9ap-northeast-1\u3002<br \/>\n\u5c06\u5bf9\u9879\u76ee\u8fdb\u884c\u521d\u59cb\u5316\u3002\u8bf7\u7a0d\u7b49\u7247\u523b\uff0c\u76f4\u81f3\u521d\u59cb\u5316\u5b8c\u6210\u3002<br \/>\n\u5b8c\u6210\u540e\uff0c\u4ee5\u4e0b\u5904\u7406\u5c06\u5df2\u5b8c\u6210\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">amplify\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306e\u5b9a\u7fa9\u304c\u5165\u3063\u3066\u3044\u307e\u3059\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">src\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306baws-exports.js\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u5171\u6709\u3057\u306a\u3044\u307b\u3046\u304c\u826f\u3044\u30d5\u30a1\u30a4\u30eb\u306b\u3064\u3044\u3066.gitignore\u306b\u8ffd\u8a18\u3055\u308c\u307e\u3059\u3002<\/ul>\n<h4>3. \u5b89\u88c5 Amplify \u5e93<\/h4>\n<p>\u5b89\u88c5Amplify Libraries\u548cAmplify UI Components\uff08Vue3\u7248\uff09\u3002\u8bf7\u6ce8\u610f\uff0cUI Components\u5728Vue2\u7248\u672c\u4e2d\u6709\u6240\u4e0d\u540c\u3002<\/p>\n<pre class=\"post-pre\"><code>yarn add aws-amplify@^5.0.4 @aws-amplify\/ui-vue@3.0.2\r\n<\/code><\/pre>\n<h4>4. \u642d\u5efa\u524d\u7aef<\/h4>\n<p>\u5c06\u5b89\u88c5\u7684Amplify\u5e93\u96c6\u6210\u5230Vue\u4e2d\u3002<br \/>\n\u6253\u5f00src\/main.ts\u6587\u4ef6\u5e76\u6dfb\u52a0\u4ee5\u4e0b\u6e90\u4ee3\u7801\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ Components<\/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><span class=\"p\">;<\/span>\r\n\r\n<span class=\"c1\">\/\/ Composables<\/span>\r\n<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><span class=\"p\">;<\/span>\r\n\r\n<span class=\"c1\">\/\/ Plugins<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">registerPlugins<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@\/plugins<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/\u8ffd\u52a0\u3053\u3053\u304b\u3089<\/span>\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>\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>\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>\r\n<span class=\"c1\">\/\/\u8ffd\u52a0\u3053\u3053\u307e\u3067<\/span>\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">app<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">createApp<\/span><span class=\"p\">(<\/span><span class=\"nx\">App<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"nf\">registerPlugins<\/span><span class=\"p\">(<\/span><span class=\"nx\">app<\/span><span class=\"p\">);<\/span>\r\n\r\n<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<h5>Vue Vite \u914d\u7f6e<\/h5>\n<p>\u5f53\u4f7f\u7528Vite\u6765\u4f7f\u7528Amplify\u65f6\uff0c\u9700\u8981\u8fdb\u884c\u4ee5\u4e0b\u914d\u7f6e\u3002<br \/>\n\u8fd9\u4e9b\u662f\u521d\u5b66\u8005\u5bb9\u6613\u9047\u5230\u56f0\u96be\u7684\u5730\u65b9\u3002<\/p>\n<h6>4.2.1 \u6dfb\u52a0 `<script>` \u6807\u7b7e\u5230 index.html\u3002<\/h6>\n<pre class=\"post-pre\"><code>...\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=\"nt\">&lt;\/body&gt;<\/span>\r\n<\/code><\/pre>\n<p>Vite\u7684index.html\u4e0d\u5728public\/\u76ee\u5f55\u4e0b\uff0c\u800c\u662f\u76f4\u63a5\u5728\u6839\u76ee\u5f55\u4e2d\u3002<\/p>\n<h6>\u5728 vite.config.ts \u6587\u4ef6\u7684 defineConfig({}) \u4e2d\u6dfb\u52a0\u89e3\u6790\u5bf9\u8c61\u3002<\/h6>\n<pre class=\"post-pre\"><code><span class=\"p\">...<\/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=\"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=\"dl\">'<\/span><span class=\"s1\">@<\/span><span class=\"dl\">'<\/span><span class=\"p\">:<\/span> <span class=\"nf\">fileURLToPath<\/span><span class=\"p\">(<\/span><span class=\"k\">new<\/span> <span class=\"nc\">URL<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">.\/src<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"k\">import<\/span><span class=\"p\">.<\/span><span class=\"nx\">meta<\/span><span class=\"p\">.<\/span><span class=\"nx\">url<\/span><span class=\"p\">)),<\/span>\r\n      <span class=\"c1\">\/\/\u8ffd\u52a0<\/span>\r\n      <span class=\"dl\">'<\/span><span class=\"s1\">.\/runtimeConfig<\/span><span class=\"dl\">'<\/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=\"c1\">\/\/\u8ffd\u52a0\u3053\u3053\u307e\u3067    },<\/span>\r\n<span class=\"p\">...<\/span>\r\n<\/code><\/pre>\n<h6>\u5982\u679c\u60a8\u4f7f\u7528TypeScript\uff0c\u90a3\u4e48\u53ef\u4ee5\u5728tsconfig.json\u7684compilerOptions\u4e2d\u6dfb\u52a0skipLibCheck: true\u3002<\/h6>\n<pre class=\"post-pre\"><code><span class=\"p\">{<\/span><span class=\"w\">\r\n  <\/span><span class=\"nl\">\"compilerOptions\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\r\n    <\/span><span class=\"nl\">\"baseUrl\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\".\/\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"nl\">\"target\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"esnext\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"nl\">\"useDefineForClassFields\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"kc\">true<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"nl\">\"allowSyntheticDefaultImports\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"kc\">true<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"nl\">\"composite\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"kc\">true<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"nl\">\"module\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"esnext\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"nl\">\"moduleResolution\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"node\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"nl\">\"strict\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"kc\">true<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"nl\">\"jsx\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"preserve\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"nl\">\"sourceMap\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"kc\">false<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"nl\">\"noImplicitThis\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"kc\">true<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"nl\">\"skipLibCheck\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"kc\">true<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"nl\">\"resolveJsonModule\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"kc\">true<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"nl\">\"esModuleInterop\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"kc\">true<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"nl\">\"lib\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"s2\">\"esnext\"<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"dom\"<\/span><span class=\"p\">],<\/span><span class=\"w\">\r\n    <\/span><span class=\"nl\">\"types\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"s2\">\"vuetify\"<\/span><span class=\"p\">],<\/span><span class=\"w\">\r\n    <\/span><span class=\"nl\">\"paths\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\r\n      <\/span><span class=\"nl\">\"@\/*\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"s2\">\".\/src\/*\"<\/span><span class=\"p\">]<\/span><span class=\"w\">\r\n    <\/span><span class=\"p\">}<\/span><span class=\"w\">\r\n  <\/span><span class=\"p\">},<\/span><span class=\"w\">\r\n  <\/span><span class=\"nl\">\"include\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"w\">\r\n    <\/span><span class=\"s2\">\"env.d.ts\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"s2\">\"src\/**\/*\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"s2\">\"src\/**\/*.ts\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"s2\">\"src\/**\/*.d.ts\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"s2\">\"src\/**\/*.tsx\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"s2\">\"src\/**\/*.vue\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\r\n    <\/span><span class=\"s2\">\"vite.config.ts\"<\/span><span class=\"w\">\r\n  <\/span><span class=\"p\">]<\/span><span class=\"w\">\r\n<\/span><span class=\"p\">}<\/span><span class=\"w\">\r\n<\/span><\/code><\/pre>\n<h6>4.2.4 \u6dfb\u52a0\u5176\u4ed6\u6587\u4ef6<\/h6>\n<p>\u8bf7\u5c06 src\/aws-exports.d.ts \u548c src\/shims-vue.d.ts \u6587\u4ef6\u6dfb\u52a0\u8fdb\u53bb\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kr\">declare<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">awsmobile<\/span><span class=\"p\">:<\/span> <span class=\"nb\">Record<\/span><span class=\"o\">&lt;<\/span><span class=\"kr\">string<\/span><span class=\"p\">,<\/span> <span class=\"kr\">any<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">awsmobile<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"kr\">declare<\/span> <span class=\"kr\">module<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">*.vue<\/span><span class=\"dl\">'<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"k\">import<\/span> <span class=\"kd\">type<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">DefineComponent<\/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=\"kd\">const<\/span> <span class=\"nx\">component<\/span><span class=\"p\">:<\/span> <span class=\"nx\">DefineComponent<\/span><span class=\"o\">&lt;<\/span><span class=\"nb\">Record<\/span><span class=\"o\">&lt;<\/span><span class=\"kr\">string<\/span><span class=\"p\">,<\/span><span class=\"nx\">unknown<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span> <span class=\"nb\">Record<\/span><span class=\"o\">&lt;<\/span><span class=\"kr\">string<\/span><span class=\"p\">,<\/span><span class=\"nx\">unknown<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">unknown<\/span><span class=\"o\">&gt;<\/span>\r\n  <span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">component<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h5>\u53ef\u4ee5\u5c06\u6587\u4ef6\u6dfb\u52a0\u5230Git\u7b49\u7248\u672c\u63a7\u5236\u5417\uff1f<\/h5>\n<p>\u6211\u4eec\u6765\u67e5\u770b\u201c\u6587\u4ef6\u548c\u6587\u4ef6\u5939\u201d\u3002<br \/>\n\u57fa\u672c\u4e0a\u4e0d\u5e94\u8be5\u5171\u4eab\u7684\u6587\u4ef6\u4f1a\u81ea\u52a8\u653e\u5728.gitignore\u4e2d\u3002<br \/>\n\u6211\u4eec\u4e0d\u8981\u516c\u5f00\u5b58\u653e\u5728\u516c\u5171\u4ed3\u5e93\u4e2d\u7684team-provider-info.json\u6587\u4ef6\u3002<\/p>\n<p>\u4e3a\u4e86\u786e\u8ba4\u5230\u76ee\u524d\u4e3a\u6b62\u7684\u8fdb\u7a0b\u662f\u5426\u987a\u5229\uff0c\u8ba9\u6211\u4eec\u542f\u52a8\u670d\u52a1\u5668\u5427\u3002<\/p>\n<pre class=\"post-pre\"><code>yarn dev\r\n<\/code><\/pre>\n<p>\u5982\u679c\u4e4b\u524d\u663e\u793a\u7684\u7ed3\u679c\u6ca1\u6709\u6539\u53d8\uff0c\u90a3\u5c31\u6ca1\u95ee\u9898\u4e86\u3002<br \/>\n\u63a5\u4e0b\u6765\u6211\u4eec\u5c06\u4f7f\u7528GraphQL\u8fde\u63a5\u6570\u636e\u5e93\u3002<\/p>\n<h3>\u5c06API\u548c\u6570\u636e\u5e93\u4e0e\u5e94\u7528\u7a0b\u5e8f\u8fde\u63a5\u8d77\u6765\uff08\u7b2c\u4e09\u6b65\uff09<\/h3>\n<div>\n                            <img decoding=\"async\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8460913a08637a6b6122\/95-0.jpg\" class='post-images' alt=\"\" title=\"\">\n                        <\/div>\n<h4>\u521b\u5efaGraphQL API\u548c\u6570\u636e\u5e93<\/h4>\n<p>\u4f7f\u7528Amplify CLI\u547d\u4ee4\u53d1\u8d77amplify add api\u3002<\/p>\n<pre class=\"post-pre\"><code>amplify add api\r\n<\/code><\/pre>\n<p>\u9009\u62e9GraphQL\u3002<br \/>\n\u5bf9\u8bdd\u5f0f\u9ed8\u8ba4\u5e94\u4fdd\u6301\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<pre class=\"post-pre\"><code>? Select from one of the below mentioned services: GraphQL\r\n? Here is the GraphQL API that we will create. Select a setting to edit or continue Continue\r\n? Choose a schema template: Single object with fields (e.g., \u201cTodo\u201d with ID, name, description)\r\n<\/code><\/pre>\n<p>\u7531\u4e8e\u9009\u62e9\u4e86\"Yes\"\u9009\u9879\u6765\u7f16\u8f91schemer\uff0c\u56e0\u6b64\u4ee3\u7801\u7f16\u8f91\u5668\u4f1a\u6253\u5f00graphql\u7684schemer\u3002<br \/>\n\u6ca1\u6709\u7279\u522b\u9700\u8981\u7f16\u8f91\u7684\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">type<\/span><span class=\"w\"> <\/span><span class=\"n\">Todo<\/span><span class=\"w\"> <\/span><span class=\"err\">@<\/span><span class=\"n\">model<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\r\n  <\/span><span class=\"n\">id<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"nb\">ID<\/span><span class=\"p\">!<\/span><span class=\"w\">\r\n  <\/span><span class=\"n\">name<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"nb\">String<\/span><span class=\"p\">!<\/span><span class=\"w\">\r\n  <\/span><span class=\"n\">description<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"nb\">String<\/span><span class=\"w\">\r\n<\/span><span class=\"p\">}<\/span><span class=\"w\">\r\n<\/span><\/code><\/pre>\n<p>\u901a\u8fc7\u4f7f\u7528@model\uff0c\u5c06\u521b\u5efa\u8868\u5728DynamoDB\u4e0a\uff0c\u5e76\u901a\u8fc7GraphQL\uff08AppSync\uff09\u8fdb\u884c\u64cd\u4f5c\u3002<\/p>\n<h4>\u90e8\u7f72\u4f60\u7684GraphQL API<\/h4>\n<p>\u901a\u8fc7\u8fd0\u884cAmplify CLI\u547d\u4ee4amplify push\uff0c\u5728AWS\u4e0a\u6784\u5efa\u3002<br \/>\n\u7b49\u5f85\u7247\u523b\u540e\uff0c\u5c06\u8fdb\u5165\u7b2c3\u6b65\uff0c\u751f\u6210GraphQL API\u7684\u524d\u7aef\u4ee3\u7801\u3002<\/p>\n<pre class=\"post-pre\"><code>amplify push\r\n<\/code><\/pre>\n<h4>3. \u4e3aGraphQL API\u751f\u6210\u524d\u7aef\u4ee3\u7801<\/h4>\n<p>\u7531\u4e8e\u4e00\u4e9b\u95ee\u9898\u662f\u4ee5\u5bf9\u8bdd\u5f62\u5f0f\u63d0\u51fa\u7684\uff0c\u56e0\u6b64\u8bf7\u4ee5\u76f8\u540c\u7684\u65b9\u5f0f\u8f93\u5165\u3002<\/p>\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 typescript\r\n? Enter the file name pattern of graphql queries, mutations and subscriptions src\/graphql\/**\/*.ts\r\n? Do you want to generate\/update all possible GraphQL operations - queries, mutations and subscriptions Yes\r\n? Enter maximum statement depth [increase from default if your schema is deeply nested] 2\r\n? Enter the file name for the generated code src\/API.ts\r\n<\/code><\/pre>\n<p>\u7b49\u5f85\u4e00\u6bb5\u65f6\u95f4\uff0c\u76f4\u5230\u5904\u7406\u5b8c\u6210\u3002<br \/>\n\u5728\u5904\u7406\u5b8c\u6210\u4e4b\u540e\uff0c\u4f7f\u7528Amplify CLI\u7684amplify status\u547d\u4ee4\u6765\u786e\u8ba4\u662f\u5426\u6b63\u5e38\u6267\u884c\u3002<\/p>\n<pre class=\"post-pre\"><code>amplify status\r\n<\/code><\/pre>\n<p>\u5982\u679c\u4e0e\u4ee5\u4e0b\u5185\u5bb9\u76f8\u540c\u5219\u53ef\u4ee5\u3002<\/p>\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<\/code><\/pre>\n<h4>\u5c06\u524d\u7aef\u4e0eAPI\u8fde\u63a5\u8d77\u6765<\/h4>\n<p>\u6211\u4eec\u5c06\u4f7f\u7528GraphQL\u7f16\u5199\u4ee3\u7801\u6765\u5bf9DynamoDB\u8fdb\u884c\u8bfb\u5199\u64cd\u4f5c\u3002<br \/>\n\u8ba9\u6211\u4eec\u7f16\u8f91Vue\uff08src\/App.vue\uff09\u6587\u4ef6\u3002<\/p>\n<p>\u6700\u521d\uff0c\u6211\u4eec\u5c06\u4f7f\u7528createTodo\u51fd\u6570\u6765\u521b\u5efa\u53ef\u4ee5\u8f93\u5165todo\u7684\u529f\u80fd\u3002<br \/>\n\u5728\u8fd9\u4e00\u9636\u6bb5\uff0c\u4ec5\u5305\u542b\u8f93\u5165\u529f\u80fd\u3002<\/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&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=\"na\">lang=<\/span><span class=\"s\">\"ts\"<\/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\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=\"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=\"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\">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=\"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<p>\u642d\u5efa\u670d\u52a1\u5668\u5e76\u8fdb\u884c\u64cd\u4f5c\u786e\u8ba4\u3002<\/p>\n<pre class=\"post-pre\"><code>yarn dev \r\n<\/code><\/pre>\n<p>\u786e\u8ba4\u80fd\u591f\u8f93\u5165\u540e\uff0c\u4f7f\u7528Ctrl + c\u505c\u6b62\u670d\u52a1\u5668\u3002<\/p>\n<p>\u867d\u7136\u4e0eAmplify\u6ca1\u6709\u5173\u7cfb\uff0c\u4f46\u65e2\u7136\u6709\u673a\u4f1a\uff0c\u6211\u4f1a\u5c1d\u8bd5\u4f7f\u7528Vuetify\u7684\u7ec4\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>  <span class=\"nt\">&lt;v-app<\/span> <span class=\"na\">id=<\/span><span class=\"s\">\"app\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;v-main&gt;<\/span>\r\n      <span class=\"nt\">&lt;v-container&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;v-text-field<\/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\">label=<\/span><span class=\"s\">\"Todo name\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n        <span class=\"nt\">&lt;v-text-field<\/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\">label=<\/span><span class=\"s\">\"Todo description\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n        <span class=\"nt\">&lt;v-btn<\/span> <span class=\"na\">color=<\/span><span class=\"s\">\"primary\"<\/span> <span class=\"err\">@<\/span><span class=\"na\">click=<\/span><span class=\"s\">\"handleClickCreateTodo\"<\/span><span class=\"nt\">&gt;<\/span>Create Todo<span class=\"nt\">&lt;\/v-btn&gt;<\/span>\r\n      <span class=\"nt\">&lt;\/v-container&gt;<\/span>\r\n    <span class=\"nt\">&lt;\/v-main&gt;<\/span>\r\n  <span class=\"nt\">&lt;\/v-app&gt;<\/span>\r\n<span class=\"nt\">&lt;\/template&gt;<\/span>\r\n...\r\n<\/code><\/pre>\n<p>\u63a5\u4e0b\u6765\u5c06\u811a\u672c(script)\u66f4\u6539\u4e3a\u8bbe\u7f6e(setup)\u3002<br \/>\n\u6211\u8ba4\u4e3a\u5728\u5f00\u53d1\u8fc7\u7a0b\u4e2d\uff0c\u4f7f\u7528\u8bbe\u7f6e(setup)\u4f1a\u66f4\u5bb9\u6613\u63d0\u9ad8\u4ee3\u7801\u7684\u53ef\u8bfb\u6027\u3002\n<\/p>\n<pre class=\"post-pre\"><code>...\r\n<span class=\"nt\">&lt;<\/span><span class=\"k\">script<\/span> <span class=\"na\">setup<\/span> <span class=\"na\">lang=<\/span><span class=\"s\">\"ts\"<\/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\">ref<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">vue<\/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\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">name<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">ref<\/span><span class=\"p\">(<\/span><span class=\"dl\">''<\/span><span class=\"p\">);<\/span>\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">description<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">ref<\/span><span class=\"p\">(<\/span><span class=\"dl\">''<\/span><span class=\"p\">);<\/span>\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">handleClickCreateTodo<\/span> <span class=\"o\">=<\/span> <span class=\"k\">async <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/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=\"p\">.<\/span><span class=\"nx\">value<\/span> <span class=\"o\">||<\/span> <span class=\"o\">!<\/span><span class=\"nx\">description<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/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=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"nx\">name<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span><span class=\"p\">,<\/span> <span class=\"na\">description<\/span><span class=\"p\">:<\/span> <span class=\"nx\">description<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/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=\"nx\">name<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">''<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"nx\">description<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">''<\/span><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<h4>5. \u901a\u8fc7GraphQL\u67e5\u8be2\u8bfb\u53d6\u6570\u636e<\/h4>\n<p>\u7136\u540e\u4f7f\u7528listTodos\u6765\u663e\u793a\u8f93\u5165\u7684\u5185\u5bb9\u3002<\/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;v-app<\/span> <span class=\"na\">id=<\/span><span class=\"s\">\"app\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;v-main&gt;<\/span>\r\n      <span class=\"nt\">&lt;v-container&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;v-text-field<\/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\">label=<\/span><span class=\"s\">\"Todo name\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n        <span class=\"nt\">&lt;v-text-field<\/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\">label=<\/span><span class=\"s\">\"Todo description\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n        <span class=\"nt\">&lt;v-btn<\/span> <span class=\"na\">color=<\/span><span class=\"s\">\"primary\"<\/span> <span class=\"err\">@<\/span><span class=\"na\">click=<\/span><span class=\"s\">\"handleClickCreateTodo\"<\/span><span class=\"nt\">&gt;<\/span>Create Todo<span class=\"nt\">&lt;\/v-btn&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;\/v-container&gt;<\/span>\r\n    <span class=\"nt\">&lt;\/v-main&gt;<\/span>\r\n  <span class=\"nt\">&lt;\/v-app&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=\"na\">setup<\/span> <span class=\"na\">lang=<\/span><span class=\"s\">\"ts\"<\/span><span class=\"nt\">&gt;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">GraphQLResult<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@aws-amplify\/api<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/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\">ref<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">vue<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">ListTodosQuery<\/span><span class=\"p\">,<\/span> <span class=\"nx\">Todo<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/API<\/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\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">name<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">ref<\/span><span class=\"p\">(<\/span><span class=\"dl\">''<\/span><span class=\"p\">);<\/span>\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">description<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">ref<\/span><span class=\"p\">(<\/span><span class=\"dl\">''<\/span><span class=\"p\">);<\/span>\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">todos<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">ref<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">Todo<\/span><span class=\"p\">[]<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">([]);<\/span>\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">handleClickCreateTodo<\/span> <span class=\"o\">=<\/span> <span class=\"k\">async <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/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=\"p\">.<\/span><span class=\"nx\">value<\/span> <span class=\"o\">||<\/span> <span class=\"o\">!<\/span><span class=\"nx\">description<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/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=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"nx\">name<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span><span class=\"p\">,<\/span> <span class=\"na\">description<\/span><span class=\"p\">:<\/span> <span class=\"nx\">description<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/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=\"nx\">name<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">''<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"nx\">description<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">''<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"nf\">getTodos<\/span><span class=\"p\">();<\/span>\r\n<span class=\"p\">};<\/span>\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">getTodos<\/span> <span class=\"o\">=<\/span> <span class=\"k\">async <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">result<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/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><span class=\"p\">,<\/span>\r\n  <span class=\"p\">}))<\/span> <span class=\"k\">as<\/span> <span class=\"nx\">GraphQLResult<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">ListTodosQuery<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/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=\"p\">{<\/span>\r\n    <span class=\"nx\">todos<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">result<\/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=\"k\">as<\/span> <span class=\"nx\">Todo<\/span><span class=\"p\">[];<\/span>\r\n  <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">todos<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[];<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">};<\/span>\r\n<span class=\"nf\">getTodos<\/span><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<p>\u8ba9\u6211\u4eec\u786e\u8ba4\u8fd9\u4e2a\u4e5f\u8ddf\u4e4b\u524d\u4e00\u6837\u987a\u5229\u5730\u8fd0\u884c\u7740\u3002<br \/>\n\u8f93\u5165\u7684\u5185\u5bb9\u5c06\u4f1a\u663e\u793a\u5728\u7b2c4\u4e2a\u4f4d\u7f6e\u4e0a\u3002<\/p>\n<pre class=\"post-pre\"><code>yarn dev\r\n<\/code><\/pre>\n<h4>6. \u4f7f\u7528GraphQL\u8ba2\u9605\u7684\u5b9e\u65f6\u6570\u636e<\/h4>\n<p>\u6700\u540e\uff0c\u5c06\u63d0\u4f9b\u4e00\u4e2a\u8ba2\u9605\u793a\u4f8b\u3002\u7528TypeScript\u7f16\u5199\u6709\u70b9\u590d\u6742\u3002<\/p>\n<pre class=\"post-pre\"><code>...\r\n<span class=\"nt\">&lt;<\/span><span class=\"k\">script<\/span> <span class=\"na\">setup<\/span> <span class=\"na\">lang=<\/span><span class=\"s\">\"ts\"<\/span><span class=\"nt\">&gt;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">graphqlOperation<\/span><span class=\"p\">,<\/span> <span class=\"nx\">GraphQLResult<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@aws-amplify\/api<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/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\">ref<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">vue<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">ListTodosQuery<\/span><span class=\"p\">,<\/span> <span class=\"nx\">OnCreateTodoSubscription<\/span><span class=\"p\">,<\/span> <span class=\"nx\">Todo<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/API<\/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=\"nx\">type<\/span> <span class=\"nx\">OnCreateTodoSubscriptionEvent<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"na\">value<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span> <span class=\"na\">data<\/span><span class=\"p\">:<\/span> <span class=\"nx\">OnCreateTodoSubscription<\/span> <span class=\"p\">};<\/span>\r\n<span class=\"p\">};<\/span>\r\n<span class=\"p\">...<\/span>\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">handleClickCreateTodo<\/span> <span class=\"o\">=<\/span> <span class=\"k\">async <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/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=\"p\">.<\/span><span class=\"nx\">value<\/span> <span class=\"o\">||<\/span> <span class=\"o\">!<\/span><span class=\"nx\">description<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/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=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"nx\">name<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span><span class=\"p\">,<\/span> <span class=\"na\">description<\/span><span class=\"p\">:<\/span> <span class=\"nx\">description<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/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=\"nx\">name<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">''<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"nx\">description<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">''<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"c1\">\/\/subscribe\u3067\u3068\u308b\u306e\u3067\u4e0d\u8981<\/span>\r\n  <span class=\"c1\">\/\/getTodos();<\/span>\r\n<span class=\"p\">};<\/span>\r\n<span class=\"p\">...<\/span>\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">subscribe<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">observe<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">API<\/span><span class=\"p\">.<\/span><span class=\"nf\">graphql<\/span><span class=\"p\">(<\/span><span class=\"nf\">graphqlOperation<\/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=\"dl\">'<\/span><span class=\"s1\">subscribe<\/span><span class=\"dl\">'<\/span> <span class=\"k\">in<\/span> <span class=\"nx\">observe<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">observe<\/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=\"na\">eventData<\/span><span class=\"p\">:<\/span> <span class=\"nx\">OnCreateTodoSubscriptionEvent<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"kd\">const<\/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=\"nx\">todo<\/span><span class=\"p\">?.<\/span><span class=\"nx\">name<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">todos<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/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=\"nx\">todos<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span><span class=\"p\">.<\/span><span class=\"nf\">push<\/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=\"nf\">getTodos<\/span><span class=\"p\">();<\/span>\r\n<span class=\"nf\">subscribe<\/span><span class=\"p\">();<\/span>\r\n<span class=\"nt\">&lt;\/<\/span><span class=\"k\">script<\/span><span class=\"nt\">&gt;<\/span>\r\n\r\n<\/code><\/pre>\n<h3>\u6dfb\u52a0\u8eab\u4efd\u9a8c\u8bc1\uff08\u7b2c4\u6b65\uff09<\/h3>\n<div>\n                            <img decoding=\"async\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8460913a08637a6b6122\/134-0.jpg\" class='post-images' alt=\"\" title=\"\">\n                        <\/div>\n<p>\u6b64\u6b65\u9aa4\u5c06\u5efa\u7acb\u8eab\u4efd\u9a8c\u8bc1\u3002\u5728Amplify CLI\u521b\u5efa\u8eab\u4efd\u9a8c\u8bc1\u540e\uff0c\u4f7f\u7528Amplify UI\u7ec4\u4ef6\u5feb\u901f\u521b\u5efa\u8eab\u4efd\u9a8c\u8bc1\u7ec4\u4ef6\u3002<\/p>\n<h4>1. \u521b\u5efa\u8eab\u4efd\u9a8c\u8bc1\u670d\u52a1    <\/h4>\n<p>\u4f7f\u7528 Amplify CLI \u547d\u4ee4\u6765\u6267\u884c amplify add auth\u3002<\/p>\n<pre class=\"post-pre\"><code>amplify add auth\r\n<\/code><\/pre>\n<p>\u8bf7\u6309\u4ee5\u4e0b\u5bf9\u8bdd\u5f62\u5f0f\u8fdb\u884c\u9009\u62e9\u3002\u901a\u8fc7\u8fd9\u6837\u505a\uff0c\u60a8\u53ef\u4ee5\u5c06AWS Cognito\u4f5c\u4e3a\u8ba4\u8bc1\u63d0\u4f9b\u8005\u4f7f\u7528\u3002Cognito\u63d0\u4f9b\u5f3a\u5927\u7684\u7528\u6237\u7ba1\u7406\u670d\u52a1\uff0c\u4f8b\u5982\u7528\u6237\u6ce8\u518c\u3001\u8ba4\u8bc1\u548c\u8bbe\u7f6e\u5bc6\u7801\u7b49\u3002<\/p>\n<pre class=\"post-pre\"><code>? Do you want to use the default authentication and security configuration? Default configuration\r\n? How do you want users to be able to sign in? Username\r\n? Do you want to configure advanced settings?  No, I am done.\r\n<\/code><\/pre>\n<p>\u4e0e API \u65f6\u4e00\u6837\uff0c\u901a\u8fc7\u4f7f\u7528 Amplify CLI \u547d\u4ee4 amplify push\uff0c\u6211\u4eec\u5728 AWS \u4e0a\u8fdb\u884c\u6784\u5efa\u3002<\/p>\n<pre class=\"post-pre\"><code>amplify push\r\n<\/code><\/pre>\n<p>\u8bf7\u95ee\u60a8\u662f\u5426\u5e0c\u671b\u7ee7\u7eed\u4ee5\u5bf9\u8bdd\u5f62\u5f0f\u8fdb\u884c\u5904\u7406\uff1f\u8bf7\u9009\u62e9\"\u662f\"\u3002<\/p>\n<pre class=\"post-pre\"><code>? Are you sure you want to continue? Y\r\n<\/code><\/pre>\n<h4>2. \u8bbe\u8ba1\u767b\u5f55\u754c\u9762<\/h4>\n<p>\u5728\u8fd9\u91cc\u4f7f\u7528\u5728Step2\u4e2d\u5b89\u88c5\u7684Amplify UI\u3002<br \/>\n\u5bf9\u4e8ets\u4ee3\u7801\u6765\u8bf4\uff0c\u53ea\u9700\u8981\u8fdb\u884cimport\u64cd\u4f5c\uff0c\u5bf9\u4e8ehtml\u4ee3\u7801\u6765\u8bf4\uff0c\u53ea\u9700\u8981\u5c06\u5b83\u653e\u5728<authenticator>\u6807\u7b7e\u4e2d\u3002<br \/>\n\u4ee5\u4e0b\u662f\u6e90\u4ee3\u7801\u793a\u4f8b\u3002<\/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;v-app<\/span> <span class=\"na\">id=<\/span><span class=\"s\">\"app\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;v-main&gt;<\/span>\r\n      <span class=\"nt\">&lt;v-container&gt;<\/span>\r\n        <span class=\"nt\">&lt;authenticator&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;v-text-field<\/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\">label=<\/span><span class=\"s\">\"Todo name\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n          <span class=\"nt\">&lt;v-text-field<\/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\">label=<\/span><span class=\"s\">\"Todo description\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n          <span class=\"nt\">&lt;v-btn<\/span> <span class=\"na\">color=<\/span><span class=\"s\">\"primary\"<\/span> <span class=\"err\">@<\/span><span class=\"na\">click=<\/span><span class=\"s\">\"handleClickCreateTodo\"<\/span><span class=\"nt\">&gt;<\/span>Create Todo<span class=\"nt\">&lt;\/v-btn&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;\/authenticator&gt;<\/span>\r\n      <span class=\"nt\">&lt;\/v-container&gt;<\/span>\r\n    <span class=\"nt\">&lt;\/v-main&gt;<\/span>\r\n  <span class=\"nt\">&lt;\/v-app&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=\"na\">setup<\/span> <span class=\"na\">lang=<\/span><span class=\"s\">\"ts\"<\/span><span class=\"nt\">&gt;<\/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>\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>\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<p>\u6211\u4eec\u5c06\u4f7f\u7528Amplify UI Components\u7684Authenticator\u3002<br \/>\n\u901a\u8fc7\u5305\u88f9authenticator\u6807\u7b7e\uff0c\u5c06\u5b9e\u73b0\u8ba4\u8bc1\u529f\u80fd\u3002<br \/>\n\u8ba4\u8bc1\u540e\u5c06\u663e\u793a\u5148\u524d\u7684\u754c\u9762\u3002<br \/>\n\u8ba9\u6211\u4eec\u542f\u52a8\u670d\u52a1\u5668\u5e76\u8fdb\u884c\u64cd\u4f5c\u786e\u8ba4\u3002<\/p>\n<pre class=\"post-pre\"><code>yarn dev\r\n<\/code><\/pre>\n<div>\n                            <img decoding=\"async\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8460913a08637a6b6122\/150-1.png\" class='post-images' alt=\"\" title=\"\">\n                        <\/div>\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;v-btn<\/span> <span class=\"na\">color=<\/span><span class=\"s\">\"info\"<\/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;\/v-btn&gt;<\/span>\r\n        ...\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<\/code><\/pre>\n<p>\u8ba9\u6211\u4eec\u786e\u8ba4\u4e00\u4e0b\u52a8\u4f5c\u3002\u6211\u89c9\u5f97signOut\u7684\u5b9e\u73b0\u65f6\u95f4\u5f88\u5feb\u3002<\/p>\n<pre class=\"post-pre\"><code>yarn dev\r\n<\/code><\/pre>\n<h3>\u90e8\u7f72\u548c\u6258\u7ba1\u5e94\u7528\uff08\u6b65\u9aa4 5\uff09<\/h3>\n<div>\n                            <img decoding=\"async\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8460913a08637a6b6122\/155-0.jpg\" class='post-images' alt=\"\" title=\"\">\n                        <\/div>\n<p>\u6700\u540e\uff0c\u4f7f\u7528Amplify Hosting\u5c06Web\u670d\u52a1\u53d1\u5e03\u5230\u4e92\u8054\u7f51\u4e0a\u3002\uff08\u90e8\u7f72\u5230\u4e3b\u673a\u4e0a\u3002\uff09<\/p>\n<h4>1. \u5c06\u6258\u7ba1\u670d\u52a1\u6dfb\u52a0\u5230\u60a8\u7684\u5e94\u7528\u7a0b\u5e8f\u4e2d<\/h4>\n<p>\u4f7f\u7528Amplify CLI\u547d\u4ee4\u884c\u5de5\u5177\uff0c\u8fd0\u884camplify add hosting\u6307\u4ee4\u3002<\/p>\n<pre class=\"post-pre\"><code>amplify add hosting\r\n<\/code><\/pre>\n<p>\u8bf7\u4ee5\u5bf9\u8bdd\u7684\u5f62\u5f0f\u8fdb\u884c\u4ee5\u4e0b\u9009\u62e9\u3002<\/p>\n<pre class=\"post-pre\"><code>? Select the plugin module to execute: # Hosting with Amplify Console (Managed hosting with custom domains, Continuous deployment)\r\n? Choose a type: # Manual Deployment\r\n<\/code><\/pre>\n<h4>2. \u53d1\u5e03\u4f60\u7684\u5e94\u7528\u7a0b\u5e8f  n\u01d0 de  <\/h4>\n<p>\u4f7f\u7528Amplify CLI\u547d\u4ee4\u901a\u8fc7amplify publish\u5c06\u7f51\u7ad9\u53d1\u5e03\u51fa\u53bb\u3002<\/p>\n<p>\u4e0d\u662f\u4f7f\u7528\"push\"\uff0c\u6240\u4ee5\u8bf7\u6ce8\u610f\u3002<\/p>\n<pre class=\"post-pre\"><code>amplify publish\r\n<\/code><\/pre>\n<p>\u7a0d\u7b49\u7247\u523b\u3002<br \/>\n\u60a8\u7684\u7f51\u7ad9\u5c06\u5728(\u4efb\u610f\u7684\u5b57\u7b26).amplifyapp.com\u4e0a\u53d1\u5e03\u3002<br \/>\n\u8bf7\u5728\u6d4f\u89c8\u5668\u4e2d\u6253\u5f00\u4ee5\u786e\u8ba4\u529f\u80fd\u3002<\/p>\n<p>\u8bf7\u4f7f\u7528\u5728Step4\u521b\u5efa\u7684\u7528\u6237\u8fdb\u884c\u767b\u5f55\u3002<br \/>\n\u4e4b\u524d\u521b\u5efa\u7684Todo\u5217\u8868\u5e94\u8be5\u4f1a\u663e\u793a\u51fa\u6765\u3002<br \/>\n\u56e0\u4e3a\u6211\u4eec\u4f7f\u7528\u4e86AWS\u8d44\u6e90\uff08Cognito\u3001DynamoDB\uff09\uff0c\u6240\u4ee5\u5185\u5bb9\u662f\u76f8\u540c\u7684\u3002<br \/>\n\u9664\u4e86\u521b\u5efaIAM\u7528\u6237\u65f6\u9700\u8981\u8fdb\u5165AWS\u63a7\u5236\u53f0\u5916\uff0c\u6211\u4eec\u786e\u8ba4\u53ef\u4ee5\u521b\u5efa\u5177\u6709\u8ba4\u8bc1\u529f\u80fd\u7684WEB\u670d\u52a1\u800c\u4e0d\u5fc5\u8fdb\u5165AWS\u63a7\u5236\u53f0\u8bbf\u95ee\u6570\u636e\u5e93\u3002<br \/>\n\u606d\u559c\uff01<\/p>\n<p>\u5728\u786e\u8ba4\u5e76\u6ee1\u610f\u4e00\u5b9a\u7a0b\u5ea6\u540e\uff0c\u867d\u7136\u6709\u4e9b\u5bc2\u5bde\uff0c\u4f46\u53ef\u4ee5\u4f7f\u7528 Amplify CLI \u547d\u4ee4\u7684 amplify delete \u6765\u5220\u9664 AWS \u8d44\u6e90\u3002<\/p>\n<pre class=\"post-pre\"><code>amplify delete\r\n<\/code><\/pre>\n<p>\u4f60\u786e\u5b9a\u8981\u5220\u9664\u5417\uff1f\u4ee5\u5bf9\u8bdd\u5f62\u5f0f\u88ab\u95ee\u5230\uff0c\u9009\u62e9\u201c\u662f\u201d\u3002<br \/>\n\u6240\u6709\u5728\u5e94\u7528\u7a0b\u5e8f\u4e2d\u4f7f\u7528\u7684\u8d44\u6e90\u90fd\u5c06\u88ab\u5220\u9664\u3002<br \/>\n\u975e\u5e38\u65b9\u4fbf\u3002<br \/>\n\u203b\u5982\u679c\u4e0d\u9700\u8981IAM\u7528\u6237\uff0c\u8bf7\u5220\u9664\u5b83\u4eec\u3002<\/p>\n<h2>\u5728 Amplify \u4e0a\u5361\u4f4f\u4e86\u7684\u5730\u65b9<\/h2>\n<ul class=\"post-ul\">\nAmplify\u3042\u308b\u3044\u306fAWS Amplify\u304b\u3089\u59cb\u307e\u308b\u8a00\u8449\u591a\u3059\u304e\u3002\u3042\u3068\u610f\u5473\u5909\u308f\u308a\u3059\u304e\u3002<br \/>\n\u7834\u58ca\u7684\u5909\u66f4\u304c\u591a\u304f\u30d3\u30d3\u308b\u3002<br \/>\n\u516c\u5f0f\u306e\u534a\u5e74\u524d\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u304c\u52d5\u304b\u306a\u3044\u3053\u3068\u304c\u3042\u308b\u3002(\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u6307\u5b9a\u304c\u306a\u3044\u30b5\u30f3\u30d7\u30eb\u306f\u52d5\u304b\u306a\u3044\u3068\u8003\u3048\u308b\u3002\u30d0\u30fc\u30b8\u30e7\u30f3\u6307\u5b9a\u304c\u3042\u308b\u5834\u5408\u306f\u5fc5\u305a\u5408\u308f\u305b\u308b)\n<\/ul>\n<h3>\u5173\u4e8e\u4ece\u8bb8\u591aAmplify\u5f00\u59cb\u7684\u8bcd\u8bed<\/h3>\n<h4>\u589e\u5f3a\u6846\u67b6<\/h4>\n<ul class=\"post-ul\">\nAmplify\u306e\u4ed5\u7d44\u307f\u5168\u4f53\u3092\u793a\u3057\u307e\u3059\u3002<br \/>\n\u5f53\u521d\u306f\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u3053\u3068\u3092\u610f\u5473\u3057\u3066\u3044\u307e\u3057\u305f\u3002<br \/>\n\u305d\u306e\u305f\u3081Librries\u3068UI\u306e\u3053\u3068\u3092\u610f\u5473\u3057\u3066\u3044\u308b\u3053\u3068\u3082\u3042\u308a\u307e\u3059\u2190\u7f60\u3067\u3059\u3002\n<\/ul>\n<h4>\u589e\u5f3aCLI<\/h4>\n<ul class=\"post-ul\">\n\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u69cb\u7bc9\u3092CLI\u3067\u884c\u3046(amplify add *** \u7b49\uff09<br \/>\n\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u898b\u3084\u3059\u3044\u3002\u3046\u307e\u304f\u3044\u304b\u306a\u3044\u3068\u304d\u306fgithub\u306eissue\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3088\u3046<br \/>\nAmplify CLI\u306eAPI(GraphQL)\u2252AppSync\u306eAmplify CLI\u7248\n<\/ul>\n<h4>\u653e\u5927\u63a7\u5236\u53f0<\/h4>\n<ul class=\"post-ul\">\nWeb\u306eConsole\u753b\u9762\u306e\u3053\u3068<br \/>\nHosting\u3053\u3068\u3092\u610f\u5473\u3057\u3066\u3044\u308b\u5834\u5408\u3082\u3042\u308b\n<\/ul>\n<h4>\u653e\u5927\u56fe\u4e66\u9986<\/h4>\n<ul class=\"post-ul\">\njavascript\/iOS\/Android\/Flutter\u5225\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u901a\u3057\u3066AWS\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u4f7f\u3046\u4ed5\u7d44\u307f<br \/>\n\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u5074\u304b\u3089Amplify CLI\u3092\u4f7f\u3063\u3066\u3044\u306a\u3044\u65e2\u5b58\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u30ea\u30bd\u30fc\u30b9\u3092\u4f7f\u3046\u3053\u3068\u304c\u3067\u304d\u308b\n<\/ul>\n<h4>\u589e\u5f3a\u7528\u6237\u754c\u9762\u7ec4\u4ef6<\/h4>\n<ul class=\"post-ul\">\nhttps:\/\/ui.docs.amplify.aws\/<br \/>\nFramework\u5225(\u958b\u767a\u306b\u304a\u3051\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u67a0\u7d44\u307f)\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<br \/>\n\u4e3b\u306bReact\u306e\u3082\u306e\u304c\u591a\u3044\n<\/ul>\n<h4>\u653e\u5927\u6258\u7ba1<\/h4>\n<ul class=\"post-ul\">\n\u5358\u7d14\u306a\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u3042\u308b\u3044\u306f\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u63a5\u7d9a\u3057\u3066CI\/CD\u3092\u884c\u3046\u4ed5\u7d44\u307f<br \/>\n\u305f\u307e\u306b\u5358\u7d14\u306a\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u306e\u3053\u3068\u3092Amplify\u3068\u7565\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u3042\u308b\n<\/ul>\n<h4>Amplify Studio\uff08\u539f\u540d\u4e3aAdmin UI\uff09<\/h4>\n<ul class=\"post-ul\">\n\u30ce\u30f3\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3068\u304b\u30ed\u30fc\u30b3\u30fc\u30c9\u3068\u304b\u30ce\u30fc\u30b3\u30fc\u30c9\u3068\u304b\u3044\u308d\u3044\u308d\u8a00\u308f\u308c\u3066\u3044\u307e\u3059\u304c\u305d\u308c\u3060\u3051\u3067\u306f\u306a\u3044<br \/>\nFigma\u304b\u3089React\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u4f5c\u308c\u307e\u3059<br \/>\nAWS\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6301\u3063\u3066\u3044\u306a\u304f\u3066\u3082Amplify\u3067\u4f5c\u3063\u305f\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306e\u8a2d\u5b9a\u3092GUI\u3067\u3067\u304d\u307e\u3059\u2190\u3068\u3066\u3082\u4fbf\u5229\n<\/ul>\n<h4>\u5938\u5927\u5632\u7b11<\/h4>\n<ul class=\"post-ul\">\n\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u3067\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u74b0\u5883\u3092\u8a66\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059<br \/>\n\u7206\u901f\u3067\u958b\u767a\u3067\u304d\u308b\u3068\u3044\u3046\u58f2\u308a\u3067\u3059\u304c\u69cb\u7bc9\u306b4~5\u5206\u304b\u304b\u308b\u3053\u3068\u304c\u3057\u3070\u3057\u3070\u3042\u308b\u305f\u3081\u3001\u30c8\u30e9\u30a4\u30a2\u30f3\u30c9\u30a8\u30e9\u30fc\u3067\u8a66\u3059\u306e\u306fMock\u3092\u4f7f\u3046\u306e\u304c\u826f\u3044\u3068\u601d\u3044\u307e\u3059<br \/>\nJava\u306e\u74b0\u5883\u304c\u5fc5\u8981\u3067\u3059\n<\/ul>\n<h2>\u7ed3\u675f<\/h2>\n<p>\u4f7f\u7528Amplify\uff0c\u91cd\u5efa\u73af\u5883\u53d8\u5f97\u66f4\u52a0\u8f7b\u677e\u3002<br \/>\n\u540c\u65f6\uff0c\u80fd\u591f\u6574\u5408\u540e\u7aef\u548c\u7ba1\u7406\u4e5f\u662f\u5176\u4e2d\u7684\u4e00\u4e2a\u9b45\u529b\u6240\u5728\u3002<br \/>\n\u795d\u5927\u5bb6\u4eab\u53d7Amplify\u751f\u6d3b\uff01<\/p>\n<p><\/script><\/h6>\n","protected":false},"excerpt":{"rendered":"<p>\u7b80\u5316\u3002 \u9996\u5148 \u203b\u6211\u5c062022\u5e743\u6708\u7684\u6587\u7ae0\u66f4\u65b0\u81f32022\u5e7411\u6708\u3002\uff08\u671f\u95f4\u6709\u76f8\u5f53\u6fc0\u70c8\u7684\u66f4\u65b0\u3002\uff09 \u6211\u5728JAWS-UG [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-48325","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>\u4f7f\u7528 Vue.js \u548c TypeScript \u6765\u642d\u5efa Amplify \u7684\u8fdc\u7a0b\u5f00\u53d1\u73af\u5883 - 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\/\u4f7f\u7528-vue-js-\u548c-typescript-\u6765\u642d\u5efa-amplify-\u7684\u8fdc\u7a0b\u5f00\u53d1\u73af\u5883\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528 Vue.js \u548c TypeScript \u6765\u642d\u5efa Amplify \u7684\u8fdc\u7a0b\u5f00\u53d1\u73af\u5883\" \/>\n<meta property=\"og:description\" content=\"\u7b80\u5316\u3002 \u9996\u5148 \u203b\u6211\u5c062022\u5e743\u6708\u7684\u6587\u7ae0\u66f4\u65b0\u81f32022\u5e7411\u6708\u3002\uff08\u671f\u95f4\u6709\u76f8\u5f53\u6fc0\u70c8\u7684\u66f4\u65b0\u3002\uff09 \u6211\u5728JAWS-UG [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528-vue-js-\u548c-typescript-\u6765\u642d\u5efa-amplify-\u7684\u8fdc\u7a0b\u5f00\u53d1\u73af\u5883\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-10T23:16:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-04T09:44:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8460913a08637a6b6122\/1-0.jpg\" \/>\n<meta name=\"author\" content=\"\u97f5, \u79d1\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u97f5, \u79d1\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 \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\/%e4%bd%bf%e7%94%a8-vue-js-%e5%92%8c-typescript-%e6%9d%a5%e6%90%ad%e5%bb%ba-amplify-%e7%9a%84%e8%bf%9c%e7%a8%8b%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-vue-js-%e5%92%8c-typescript-%e6%9d%a5%e6%90%ad%e5%bb%ba-amplify-%e7%9a%84%e8%bf%9c%e7%a8%8b%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/\",\"name\":\"\u4f7f\u7528 Vue.js \u548c TypeScript \u6765\u642d\u5efa Amplify \u7684\u8fdc\u7a0b\u5f00\u53d1\u73af\u5883 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-06-10T23:16:57+00:00\",\"dateModified\":\"2024-05-04T09:44:39+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-vue-js-%e5%92%8c-typescript-%e6%9d%a5%e6%90%ad%e5%bb%ba-amplify-%e7%9a%84%e8%bf%9c%e7%a8%8b%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-vue-js-%e5%92%8c-typescript-%e6%9d%a5%e6%90%ad%e5%bb%ba-amplify-%e7%9a%84%e8%bf%9c%e7%a8%8b%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-vue-js-%e5%92%8c-typescript-%e6%9d%a5%e6%90%ad%e5%bb%ba-amplify-%e7%9a%84%e8%bf%9c%e7%a8%8b%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528 Vue.js \u548c TypeScript \u6765\u642d\u5efa Amplify \u7684\u8fdc\u7a0b\u5f00\u53d1\u73af\u5883\"}]},{\"@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\/6530331a63adef3b3443a1fab53a0e6e\",\"name\":\"\u97f5, \u79d1\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g\",\"caption\":\"\u97f5, \u79d1\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunke\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-vue-js-%e5%92%8c-typescript-%e6%9d%a5%e6%90%ad%e5%bb%ba-amplify-%e7%9a%84%e8%bf%9c%e7%a8%8b%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528 Vue.js \u548c TypeScript \u6765\u642d\u5efa Amplify \u7684\u8fdc\u7a0b\u5f00\u53d1\u73af\u5883 - 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\/\u4f7f\u7528-vue-js-\u548c-typescript-\u6765\u642d\u5efa-amplify-\u7684\u8fdc\u7a0b\u5f00\u53d1\u73af\u5883\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528 Vue.js \u548c TypeScript \u6765\u642d\u5efa Amplify \u7684\u8fdc\u7a0b\u5f00\u53d1\u73af\u5883","og_description":"\u7b80\u5316\u3002 \u9996\u5148 \u203b\u6211\u5c062022\u5e743\u6708\u7684\u6587\u7ae0\u66f4\u65b0\u81f32022\u5e7411\u6708\u3002\uff08\u671f\u95f4\u6709\u76f8\u5f53\u6fc0\u70c8\u7684\u66f4\u65b0\u3002\uff09 \u6211\u5728JAWS-UG [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528-vue-js-\u548c-typescript-\u6765\u642d\u5efa-amplify-\u7684\u8fdc\u7a0b\u5f00\u53d1\u73af\u5883\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-06-10T23:16:57+00:00","article_modified_time":"2024-05-04T09:44:39+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8460913a08637a6b6122\/1-0.jpg"}],"author":"\u97f5, \u79d1","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u97f5, \u79d1","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"3 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-vue-js-%e5%92%8c-typescript-%e6%9d%a5%e6%90%ad%e5%bb%ba-amplify-%e7%9a%84%e8%bf%9c%e7%a8%8b%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-vue-js-%e5%92%8c-typescript-%e6%9d%a5%e6%90%ad%e5%bb%ba-amplify-%e7%9a%84%e8%bf%9c%e7%a8%8b%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/","name":"\u4f7f\u7528 Vue.js \u548c TypeScript \u6765\u642d\u5efa Amplify \u7684\u8fdc\u7a0b\u5f00\u53d1\u73af\u5883 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-06-10T23:16:57+00:00","dateModified":"2024-05-04T09:44:39+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-vue-js-%e5%92%8c-typescript-%e6%9d%a5%e6%90%ad%e5%bb%ba-amplify-%e7%9a%84%e8%bf%9c%e7%a8%8b%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-vue-js-%e5%92%8c-typescript-%e6%9d%a5%e6%90%ad%e5%bb%ba-amplify-%e7%9a%84%e8%bf%9c%e7%a8%8b%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-vue-js-%e5%92%8c-typescript-%e6%9d%a5%e6%90%ad%e5%bb%ba-amplify-%e7%9a%84%e8%bf%9c%e7%a8%8b%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528 Vue.js \u548c TypeScript \u6765\u642d\u5efa Amplify \u7684\u8fdc\u7a0b\u5f00\u53d1\u73af\u5883"}]},{"@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\/6530331a63adef3b3443a1fab53a0e6e","name":"\u97f5, \u79d1","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g","caption":"\u97f5, \u79d1"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunke\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-vue-js-%e5%92%8c-typescript-%e6%9d%a5%e6%90%ad%e5%bb%ba-amplify-%e7%9a%84%e8%bf%9c%e7%a8%8b%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%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\/48325","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\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=48325"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48325\/revisions"}],"predecessor-version":[{"id":99763,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48325\/revisions\/99763"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=48325"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=48325"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=48325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}