Leitfaden-Entwicklungsleitfaden

Natives Modul hinzufügen

Wenn Sie einige Funktionen benötigen, die nicht vom nativen fibjs-Modul bereitgestellt werden, oder wenn Sie Code zu fibjs beitragen möchten, kann dieser Artikel für Sie hilfreich sein.

Idl-Datei schreiben

idl ist eine beschreibende Sprache, die verwendet wird, um native Module und Objektmethoden in fibjs zu definieren.

Bevor Sie mit dem Schreiben Ihres eigenen fibjs-Moduls beginnen, müssen Sie die Beschreibungssprache IDL schreiben. Nehmen wir den benutzerdefinierten Modulnamen als Beispiel. Ich muss eine beschreibende Sprache name.idl schreiben und diese Datei im Verzeichnis ${{fibjs_project_dir}}/idl/zh-cn/ ablegen, wobei ${{fibjs_project_dir}} das Verzeichnis darstellt, in dem sich das fibjs-Projekt befindet.

Unser Namensmodul ist sehr einfach, es gibt nur eine Testmethode, der Parameter ist ein String, dieser String ist der Text, die Testmethode beurteilt, ob der Text korrekt ist, und der Rückgabewert ist ein boolescher Typ. name.idl wird wie folgt geschrieben

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

Header-Datei generieren

Der im Tools-Verzeichnis ausgeführte fibjs idlc.jsBefehl, der alle Dateien im IDL-Verzeichnis liest und parsen, generiert die entsprechenden Header-Dateien und Dokumentation, die generierten Header-Dateien werden im Verzeichnis "fibjs/include/ifs/" gespeichert. name.idl generiert beispielsweise automatisch die Header-Datei ${{fibjs_project_dir}}/fibjs/include/ifs/name.h, die die name_base-Klasse definiert.

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

Quellcode schreiben

Die Methode s_test ist ein v8-Accessor, der die Methode test umschließt. Hier müssen wir nur die Testmethode implementieren, die Testmethode hat zwei Parameter, v0 ist der Eingabetext und vr ist der Rückgabewert. Wir legen die cpp-Datei in das Verzeichnis ${{fibjs_project_dir}}/fibjs/src/ und die Header-Datei in das Verzeichnis ${{fibjs_project_dir}}/fibjs/include. Für dieses Beispiel sind keine zusätzlichen Header-Dateien erforderlich. Wir erstellen eine neue Datei name.cpp im Verzeichnis fibjs/src/ mit folgendem Inhalt:

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

Beachten Sie, dass DECLARE_MODULE(name);dieser Satz der Satz den "Namen" dieses Moduls deklariert und es beim Javascript-Objekt registriert. Dieser Satz muss beim Schreiben des Quellcodes hinzugefügt werden. In v0.25.0zukünftigen Versionen werden wir auch fibjs-Module gestrippt, um sie besser wiederverwenden zu können, also müssen Sie noch fibjs/program/src/fibjs.cppfile importModule, fügen Sie die folgende Satzfunktion hinzu: IMPORT_MODULE(name);um ein benutzerdefiniertes Modul zu installieren.

Kompilieren und testen

Vor dem Kompilieren unter Windows müssen Sie es erneut ausführen fibjs tools/vsmake.jsund dann erstellen. Die Compile- und Run-Ergebnisse sind wie folgt: Name

Zusammenfassen

Erfahren Sie, wie Sie native Module und Objekte von fibjs hinzufügen und ändern. Wir können alle Arten von komplexen Modulen schreiben, und wir können auch Bibliotheken von Drittanbietern in fibjs übertragen, um unsere Module zu schreiben. Du kannst gerne mehr zu fibjs beitragen.