Guide de développement de guides

Ajouter un module natif

Si vous avez besoin de fonctionnalités autres que celles fournies par le module natif de fibjs, ou si vous souhaitez contribuer au code de fibjs, cet article peut vous être utile.

Écrire le fichier idl

idl est un langage descriptif utilisé pour définir des modules natifs et des méthodes objet dans fibjs.

Avant de commencer à écrire votre propre module fibjs, vous devez écrire le langage descriptif idl. Prenons le nom du module personnalisé comme exemple. Je dois écrire un nom de langage descriptif.idl et placer ce fichier dans le répertoire ${{fibjs_project_dir}}/idl/zh-cn/, où ${{fibjs_project_dir}} représente le répertoire où se trouve le projet fibjs.

Notre module de nom est très simple, il n'y a qu'une seule méthode de test, le paramètre est une chaîne, cette chaîne est les paroles, la méthode de test juge si les paroles sont correctes et la valeur de retour est de type booléen. name.idl est écrit comme suit

1 2 3 4 5 6 7 8 9 10 11 12 13 14
/*! @brief name module how to use @code var name = require('name'); @endcode */ module name { /*! @brief 测试输入的字符串是不是正确的歌词 @param lyrics 歌词 */ static Boolean test(String lyrics); };

Générer un fichier d'en-tête

Exécutée dans la fibjs idlc.jscommande du répertoire tools , qui lit tous les fichiers du répertoire idl idl et analyse, génère les fichiers d'en-tête et la documentation correspondants, lesquels fichiers d'en-tête générés sont stockés dans le répertoire "fibjs / include / ifs /". Par exemple, name.idl générera automatiquement le fichier d'en-tête ${{fibjs_project_dir}}/fibjs/include/ifs/name.h, qui définit la classe name_base.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
/*************************************************************************** * * * This file was automatically generated using idlc.js * * PLEASE DO NOT EDIT!!!! * * * ***************************************************************************/ #ifndef _name_base_H_ #define _name_base_H_ /** @author Leo Hoo <lion@9465.net> */ #include "../object.h" namespace fibjs { class name_base : public object_base { DECLARE_CLASS(name_base); public: // name_base static result_t test(exlib::string lyrics, bool& retVal); public: static void s__new(const v8::FunctionCallbackInfo<v8::Value>& args) { CONSTRUCT_INIT(); Isolate* isolate = Isolate::current(); isolate->m_isolate->ThrowException( isolate->NewString("not a constructor")); } public: static void s_test(const v8::FunctionCallbackInfo<v8::Value>& args); }; } namespace fibjs { inline ClassInfo& name_base::class_info() { static ClassData::ClassMethod s_method[] = { { "test", s_test, true } }; static ClassData s_cd = { "name", true, s__new, NULL, ARRAYSIZE(s_method), s_method, 0, NULL, 0, NULL, 0, NULL, NULL, NULL, &object_base::class_info() }; static ClassInfo s_ci(s_cd); return s_ci; } inline void name_base::s_test(const v8::FunctionCallbackInfo<v8::Value>& args) { bool vr; METHOD_NAME("name.test"); METHOD_ENTER(); METHOD_OVER(1, 1); ARG(exlib::string, 0); hr = test(v0, vr); METHOD_RETURN(); } } #endif

Écrire le code source

La méthode s_test est un accesseur v8, qui encapsule la méthode test. Ici, nous avons seulement besoin d'implémenter la méthode de test, la méthode de test a deux paramètres, v0 est les paroles d'entrée et vr est la valeur de retour. Nous mettons le fichier cpp dans le répertoire ${{fibjs_project_dir}}/fibjs/src/ et le fichier d'en-tête dans le répertoire ${{fibjs_project_dir}}/fibjs/include. Aucun fichier d'en-tête supplémentaire n'est requis pour cet exemple. Nous créons un nouveau fichier name.cpp dans le répertoire fibjs/src/ avec le contenu suivant :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#include "object.h" #include "ifs/name.h" namespace fibjs { DECLARE_MODULE(name); result_t name_base::test(exlib::string lyrics, bool& retVal) { if (lyrics == "youmeiyounameyishougehuirangnituranxiangqiwo") retVal = true; else retVal = false; return 0; } }

Notez que DECLARE_MODULE(name);cette phrase, la phrase déclare le "nom" de ce module et l'enregistre dans l'objet javascript. Cette phrase doit être ajoutée lors de l'écriture du code source. Dans v0.25.0les versions futures et nous allons supprimer les modules fibjs afin de mieux les réutiliser, vous devez donc toujours fibjs/program/src/fibjs.cppdéposer importModule, ajoutez la fonction de phrase suivante : IMPORT_MODULE(name);pour installer un module personnalisé.

Compiler et tester

Avant de compiler sur Windows, vous devez l'exécuter à nouveau fibjs tools/vsmake.js, puis compiler. Les résultats de la compilation et de l'exécution sont les suivants : Nom

Résumer

Appris à ajouter et modifier des modules et objets natifs de fibjs. Nous pouvons écrire toutes sortes de modules complexes, et nous pouvons également transplanter des bibliothèques tierces sur fibjs comme support pour écrire nos modules. Vous êtes invités à contribuer davantage à fibjs.