Création d'un projet de SubQuery
Création d'un projet de SubQuery
Dans le guide de démarrage rapide , nous avons rapidement parcouru un exemple pour vous donner un aperçu de ce qu'est SubQuery et de son fonctionnement. Ici, nous allons examiner de plus près le workflow lors de la création de votre projet et les fichiers clés avec lesquels vous travaillez.
Le Workflow de base
Certains des exemples suivants supposent que vous avez initialisé avec succès le paquet de démarrage dans la section Démarrage rapide. À partir de ce paquet, nous allons suivre le processus standard pour personnaliser et implémenter votre projet SubQuery.
- Initialise your project using
subql init PROJECT_NAME
. - Mettre à jour le fichier Manifest (
projet. aml
) pour inclure des informations sur votre blockchain, et les entités que vous allez cartographier - voir Fichier Manifest - Créez des entités GraphQL dans votre schéma (
schéma.graphql
) qui définissent la forme des données que vous allez extraire et persister pour interroger - voir Schéma GraphQL - Ajouter toutes les fonctions de mappage (par exemple
mappingHandlers.ts
) que vous souhaitez appeler pour transformer des chaînes de données en entités GraphQL que vous avez définies - voir Mapping - Générer, construire, et publiez votre code sur les projets SubQuery (ou exécutez dans votre propre nœud local) - voir Exécuter et interroger votre projet de démarrage dans notre guide de démarrage rapide.
Structure du répertoire
Voici un aperçu de la structure de répertoire d'un projet de SubQuery lorsque la commande init
est exécutée.
- project-name
L package.json
L project.yaml
L README.md
L schema.graphql
L tsconfig.json
L docker-compose.yml
L src
L index.ts
L mappings
L mappingHandlers.ts
L .gitignore
Par exemple :
Génération du code
Lorsque vous changez vos entités GraphQL, vous devez régénérer votre répertoire de types avec la commande suivante.
yarn codegen
Cela va créer un nouveau répertoire (ou mettre à jour le existant) src/types
qui contiennent des classes d'entités générées pour chaque type que vous avez défini précédemment dans le schéma schema.graphql
. Ces classes fournissent le chargement d'entités sécurisées par type, lire et écrire l'accès aux champs de l'entité - en savoir plus sur ce processus dans le Schéma GraphQL.
Construction
Afin d'exécuter votre projet SubQuery sur un noeud SubQuery hébergé localement, vous devez d'abord compiler votre travail.
Exécutez la commande build depuis le répertoire racine du projet.
::: code-tabs @tab:active yarn shell yarn build
@tab npm bash npm run-script build
:::
Autres options de compilation
Nous supportons des options de construction supplémentaires pour les projets SubQuery en utilisant subql build
.
Avec cela, vous pouvez définir des points d'entrée supplémentaires pour la construction en utilisant le champ exports dans package.json.
"name": "project-name",
"version": "1.0.0",
...
"exports": {
"entry_one": "./src/entry_one.ts",
"entry_renamed": "./src/entry_two.ts"
},
Ensuite, en exécutant subql build
, il générera un dossier dist avec la structure suivante :
- project-name
L dist
L entry_one.js
L entry_renamed.js
L index.js
Notez que le fichier index.ts
sera construit, qu'il soit spécifié ou non dans le champ exports.
Pour plus d'informations sur l'utilisation de ces drapeaux d'inclusion, voir la référence cli.
Journalisation
La méthode console.log
**n'**est plus prise en charge. À la place, un module logger
a été injecté dans les types, ce qui signifie que nous pouvons prendre en charge un logger qui peut accepter différents niveaux de journalisation.
logger.info("Info level message");
logger.debug("Debugger level message");
logger.warn("Warning level message");
Pour utiliser logger.info
ou logger.warn
, il suffit de placer la ligne dans votre fichier de mappage.
Pour utiliser logger.debug
, un drapeau supplémentaire est nécessaire. Ajoutez --log-level=debug
à votre ligne de commande.
Si vous exécutez un conteneur docker, ajoutez cette ligne à votre fichier docker-compose.yaml
.
Vous devriez maintenant voir la nouvelle journalisation dans l'écran du terminal.