Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Raggruppamento TypeScript e mappe di origine per il runtime APPSYNC_JS
TypeScript migliora AWS AppSync lo sviluppo garantendo la sicurezza dei tipi e il rilevamento precoce degli errori. È possibile scrivere TypeScript codice localmente e traspilarlo JavaScript prima di utilizzarlo con il runtime. APPSYNC_JS
Il processo inizia con l'installazione TypeScript e la configurazione di tsconfig.json per l'ambiente. APPSYNC_JS
È quindi possibile utilizzare strumenti di raggruppamento come esbuild per compilare e raggruppare il codice. Amplify genererà CLI tipi dallo schema GraphQL, consentendoti di utilizzare questi tipi nel codice resolver.
È possibile utilizzare librerie personalizzate ed esterne nel codice del resolver e della funzione, purché soddisfino i requisiti. APPSYNC_JS
Gli strumenti di raggruppamento combinano il codice in un unico file da utilizzare. AWS AppSyncÈ possibile includere mappe di origine per facilitare il debug.
Sfruttare le librerie e raggruppare il codice
Nel codice del resolver e della funzione, puoi sfruttare sia le librerie personalizzate che quelle esterne purché soddisfino i requisiti. APPSYNC_JS
In questo modo è possibile riutilizzare il codice esistente nell'applicazione. Per utilizzare librerie definite da più file, è necessario utilizzare uno strumento di raggruppamento, come esbuild
Quando raggruppate il codice, tenete presente quanto segue:
-
APPSYNC_JS
supporta solo ECMAScript moduli (ESM). -
@aws-appsync/*
i moduli sono integratiAPPSYNC_JS
e non devono essere inclusi nel codice. -
L'ambiente
APPSYNC_JS
di runtime è simile a NodeJS in quanto il codice non viene eseguito in un ambiente browser. -
Puoi includere una mappa di origine opzionale. Tuttavia, non includere il contenuto di origine.
Per ulteriori informazioni sulle mappe di origine, consulta Utilizzo delle mappe di origine.
Ad esempio, per raggruppare il codice del resolver che si trova insrc/appsync/getPost.resolver.js
, puoi usare il seguente comando esbuild: CLI
$ esbuild --bundle \ --sourcemap=inline \ --sources-content=false \ --target=esnext \ --platform=node \ --format=esm \ --external:@aws-appsync/utils \ --outdir=out/appsync \ src/appsync/getPost.resolver.js
Creazione del codice e utilizzo di TypeScript
TypeScript@aws-appsync/utils
pacchetto è completamente digitato.
Il APPSYNC_JS
runtime non supporta TypeScript direttamente. È necessario prima trascrivere il TypeScript codice in JavaScript codice supportato dal APPSYNC_JS
runtime prima di salvarlo in. AWS AppSync Puoi usarlo TypeScript per scrivere il codice nell'ambiente di sviluppo integrato locale (IDE), ma tieni presente che non puoi creare TypeScript codice nella AWS AppSync console.
Per iniziare, assicurati di averlo TypeScriptAPPSYNC_JS
runtime utilizzando. TSConfigtsconfig.json
file di base che puoi usare:
// tsconfig.json { "compilerOptions": { "target": "esnext", "module": "esnext", "noEmit": true, "moduleResolution": "node", } }
È quindi possibile utilizzare uno strumento di raggruppamento come esbuild per compilare e raggruppare il codice. Ad esempio, dato un progetto il cui AWS AppSync codice si trova insrc/appsync
, è possibile utilizzare il seguente comando per compilare e raggruppare il codice:
$ esbuild --bundle \ --sourcemap=inline \ --sources-content=false \ --target=esnext \ --platform=node \ --format=esm \ --external:@aws-appsync/utils \ --outdir=out/appsync \ src/appsync/**/*.ts
Usare il codegen Amplify
Puoi usare CLIAmplifyschema.graphql
file, esegui il comando seguente e consulta le istruzioni per configurare il codegen:
$ npx @aws-amplify/cli codegen add
Per rigenerare il codegen in determinate circostanze (ad esempio, quando lo schema viene aggiornato), esegui il comando seguente:
$ npx @aws-amplify/cli codegen
È quindi possibile utilizzare i tipi generati nel codice del resolver. Ad esempio, dato lo schema seguente:
type Todo { id: ID! title: String! description: String } type Mutation { createTodo(title: String!, description: String): Todo } type Query { listTodos: Todo }
È possibile utilizzare i tipi generati nella seguente AWS AppSync funzione di esempio:
import { Context, util } from '@aws-appsync/utils' import * as ddb from '@aws-appsync/utils/dynamodb' import { CreateTodoMutationVariables, Todo } from './API' // codegen export function request(ctx: Context<CreateTodoMutationVariables>) { ctx.args.description = ctx.args.description ?? 'created on ' + util.time.nowISO8601() return ddb.put<Todo>({ key: { id: util.autoId() }, item: ctx.args }) } export function response(ctx) { return ctx.result as Todo }
Utilizzo di farmaci generici in TypeScript
È possibile utilizzare i farmaci generici con diversi dei tipi forniti. Ad esempio, lo snippet seguente è di un tipo: Todo
export type Todo = { __typename: "Todo", id: string, title: string, description?: string | null, };
È possibile scrivere un resolver per un abbonamento che utilizza. Todo
Nel tuoIDE, le definizioni dei tipi e i suggerimenti di completamento automatico ti guideranno nell'utilizzo corretto dell'utilità di toSubscriptionFilter
trasformazione:
import { util, Context, extensions } from '@aws-appsync/utils' import { Todo } from './API' export function request(ctx: Context) { return {} } export function response(ctx: Context) { const filter = util.transform.toSubscriptionFilter<Todo>({ title: { beginsWith: 'hello' }, description: { contains: 'created' }, }) extensions.setSubscriptionFilter(filter) return null }
Elencare i pacchetti
Puoi aggiungere automaticamente il linking ai tuoi pacchetti importando il plugin. esbuild-plugin-eslint
È quindi possibile abilitarlo fornendo un plugins
valore che abiliti le funzionalità di eslint. Di seguito è riportato un frammento che utilizza l'esbuild JavaScript API in un file chiamato: build.mjs
/* eslint-disable */ import { build } from 'esbuild' import eslint from 'esbuild-plugin-eslint' import glob from 'glob' const files = await glob('src/**/*.ts') await build({ format: 'esm', target: 'esnext', platform: 'node', external: ['@aws-appsync/utils'], outdir: 'dist/', entryPoints: files, bundle: true, plugins: [eslint({ useEslintrc: true })], })
Utilizzo delle mappe di origine
Puoi fornire una mappa sorgente in linea (sourcemap
) con il tuo JavaScript codice. Le mappe di origine sono utili quando si crea un pacchetto JavaScript o si TypeScript codifica e si desidera visualizzare i riferimenti ai file sorgente di input nei log e nei messaggi di errore di runtime JavaScript .
Il tuo sourcemap
deve apparire alla fine del codice. È definito da una singola riga di commento che segue il seguente formato:
//# sourceMappingURL=data:application/json;base64,<base64 encoded string>
Ecco un esempio:
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibGliLmpzIiwgImNvZGUuanMiXSwKICAibWFwcGluZ3MiOiAiO0FBQU8sU0FBUyxRQUFRO0FBQ3RCLFNBQU87QUFDVDs7O0FDRE8sU0FBUyxRQUFRLEtBQUs7QUFDM0IsU0FBTyxNQUFNO0FBQ2Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
Le mappe di origine possono essere create con esbuild. L'esempio seguente mostra come utilizzare esbuild JavaScript API per includere una mappa sorgente in linea quando il codice viene creato e raggruppato:
/* eslint-disable */ import { build } from 'esbuild' import eslint from 'esbuild-plugin-eslint' import glob from 'glob' const files = await glob('src/**/*.ts') await build({ sourcemap: 'inline', sourcesContent: false, format: 'esm', target: 'esnext', platform: 'node', external: ['@aws-appsync/utils'], outdir: 'dist/', entryPoints: files, bundle: true, plugins: [eslint({ useEslintrc: true })], })
In particolare, le sourcesContent
opzioni sourcemap
and specificano che una mappa di origine deve essere aggiunta in linea alla fine di ogni build ma non deve includere il contenuto sorgente. Per convenzione, consigliamo di non includere il contenuto sorgente nel tuosourcemap
. Puoi disabilitarlo in esbuild impostando sources-content
sufalse
.
Per illustrare come funzionano le mappe di origine, guarda il seguente esempio in cui un codice resolver fa riferimento alle funzioni di supporto di una libreria di supporto. Il codice contiene istruzioni di registro nel codice del resolver e nella libreria helper:
. /src/default.resolver.ts (il tuo resolver)
import { Context } from '@aws-appsync/utils' import { hello, logit } from './helper' export function request(ctx: Context) { console.log('start >') logit('hello world', 42, true) console.log('< end') return 'test' } export function response(ctx: Context): boolean { hello() return ctx.prev.result }
.src/helper.ts (un file di supporto)
export const logit = (...rest: any[]) => { // a special logger console.log('[logger]', ...rest.map((r) => `<${r}>`)) } export const hello = () => { // This just returns a simple sentence, but it could do more. console.log('i just say hello..') }
Quando create e raggruppate il file resolver, il codice del resolver includerà una mappa sorgente in linea. Quando il resolver è in esecuzione, nei log vengono visualizzate le seguenti voci: CloudWatch

Esaminando le voci del CloudWatch registro, noterai che le funzionalità dei due file sono state raggruppate e vengono eseguite contemporaneamente. Il nome originale di ogni file si riflette chiaramente anche nei log.