Leitfaden Entwicklungshandbuch

Natives Modul hinzufügen

Wenn Sie andere Funktionen als die vom nativen Modul von fibjs bereitgestellten benötigen oder Code zu fibjs beitragen möchten, kann dieser Artikel hilfreich sein.

IDL-Datei schreiben

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

Bevor Sie mit dem Schreiben Ihres eigenen Fibjs-Moduls beginnen, müssen Sie eine beschreibende IDL-Sprache schreiben. Wir nehmen 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, sein Parameter ist eine Zeichenfolge, diese Zeichenfolge ist der Text, die Testmethode bestimmt, ob die Texte korrekt sind, und der Rückgabewert ist vom Typ Boolean. 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); };

Generieren Sie Header-Dateien

fibjs idlc.js Befehl fibjs idlc.js im Verzeichnis tools aus, der alle IDL-Dateien im IDL-Verzeichnis liest und analysiert und entsprechende Header-Dateien und -Dokumente generiert. Die generierten Header-Dateien werden im Verzeichnis "fibjs / include / ifs /" gespeichert unter. Beispielsweise generiert name.idl automatisch die Header-Datei $ {{fibjs_project_dir}} / fibjs / include / ifs / name.h, die die Klasse name_base 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 Accessor für v8, der den Methodentest umschließt. Hier müssen wir nur die Testmethode implementieren, die zwei Parameter hat, v0 ist der Eingabetext und vr ist der Rückgabewert. Wir legen die cpp-Datei im Verzeichnis $ {{fibjs_project_dir}} / fibjs / src / und die Header-Datei im Verzeichnis $ {{fibjs_project_dir}} / fibjs / include ab. Für dieses Beispiel sind keine zusätzlichen Header-Dateien erforderlich. Wir erstellen eine neue Datei name.cpp im Verzeichnis fibjs / src / wie folgt:

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, dieser Satz das Modul "Name" deklariert und es im Javascript-Objekt registriert. Dieser Satz muss beim Schreiben des Quellcodes hinzugefügt werden. In v0.25.0 und späteren Versionen haben wir das Fibjs-Modul zur besseren Wiederverwendung entfernt, sodass Sie der Funktion importModule in der fibjs/program/src/fibjs.cpp noch den folgenden Satz hinzufügen fibjs/program/src/fibjs.cpp : IMPORT_MODULE(name); , um ein benutzerdefiniertes Modul zu installieren.

Kompilieren und testen

Vor dem Kompilieren unter Windows müssen Sie fibjs tools/vsmake.js ausführen und dann erstellen. Die Ergebnisse zum Kompilieren und Ausführen lauten wie folgt: Name

um zusammenzufassen

Erfahren Sie, wie Sie native Module und Objekte von fibjs hinzufügen und ändern. Wir können eine Vielzahl komplexer Module schreiben und Bibliotheken von Drittanbietern auf Fibjs portieren, um das Schreiben unserer Module zu unterstützen. Sie können gerne mehr Power zu Fibjs beitragen.