Guida allo sviluppo della guida

Aggiungi modulo nativo

Se hai bisogno di alcune funzionalità diverse da quelle fornite dal modulo nativo fibjs, o vuoi contribuire con il codice a fibjs, allora questo articolo potrebbe esserti utile.

Scrivi il file idl

idl è un linguaggio descrittivo utilizzato per definire moduli nativi e metodi oggetto in fibjs.

Prima di iniziare a scrivere il proprio modulo fibjs, è necessario scrivere un linguaggio descrittivo idl. Prendiamo come esempio il nome del modulo personalizzato. Devo scrivere un linguaggio descrittivo name.idl e inserire questo file nella directory $ {{fibjs_project_dir}} / idl / zh-cn /, dove $ {{fibjs_project_dir}} rappresenta la directory in cui si trova il progetto fibjs.

Il nostro modulo dei nomi è molto semplice. C'è un solo metodo di test. Il suo parametro è una stringa. Questa stringa è il testo. Il metodo di test giudica se il testo è corretto e il valore restituito è di tipo booleano. name.idl è scritto come segue

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); };

Genera file di intestazione

Esegui il comando fibjs idlc.js nella directory tools. Questo leggerà tutti i file idl nella directory idl e li analizzerà per generare i file di intestazione e i documenti corrispondenti. I file di intestazione generati verranno memorizzati nella directory "fibjs / include / ifs /" sotto. Ad esempio, name.idl genererà automaticamente il file di intestazione $ {{fibjs_project_dir}} / fibjs / include / ifs / name.h, che definisce 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

Scrivi il codice sorgente

Il metodo s_test è un accessorio v8, che racchiude il test del metodo. Qui abbiamo solo bisogno di implementare il metodo di test, il metodo di test ha due parametri, v0 è il testo di input e vr è il valore di ritorno. Mettiamo il file cpp nella directory $ {{fibjs_project_dir}} / fibjs / src / e il file di intestazione nella directory $ {{fibjs_project_dir}} / fibjs / include. Non sono necessari file di intestazione aggiuntivi per questo esempio. Creiamo un nuovo file name.cpp nella directory fibjs / src / con il seguente contenuto:

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; } }

Si noti che DECLARE_MODULE(name); questa frase, questa frase dichiara il modulo "nome" e lo registra nell'oggetto javascript. Questa frase deve essere aggiunta durante la scrittura del codice sorgente. Nella v0.25.0 e versioni successive, abbiamo rimosso il modulo fibjs per un migliore riutilizzo, quindi è ancora necessario aggiungere la seguente frase alla funzione importModule nel file fibjs/program/src/fibjs.cpp : IMPORT_MODULE(name); per installare un modulo personalizzato.

Compila e prova

Prima di compilare su Windows, è necessario eseguire fibjs tools/vsmake.js e quindi fibjs tools/vsmake.js . I risultati della compilazione e dell'esecuzione sono i seguenti:nome

per riassumere

Ho imparato come aggiungere e modificare moduli e oggetti nativi di fibjs. Possiamo scrivere una varietà di moduli complessi e possiamo anche portare librerie di terze parti su fibjs come supporto per scrivere i nostri moduli. Sei il benvenuto a contribuire di più a fibjs.