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, mit der native Module und Objektmethoden in fibjs definiert werden.

Bevor Sie mit dem Schreiben Ihres eigenen Fibjs-Moduls beginnen, müssen Sie eine beschreibende Sprache für idl schreiben. Nehmen wir als Beispiel den benutzerdefinierten Modulnamen. Ich muss die 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 eine Zeichenfolge. Diese Zeichenfolge ist der Text. Die Testmethode bestimmt, ob die Texte korrekt sind, 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

fibjs idlc.js Befehl fibjs idlc.js im Tools-Verzeichnis aus. Dadurch werden alle IDL-Dateien im IDL-Verzeichnis gelesen und analysiert, um entsprechende Header-Dateien und -Dokumente zu generieren. 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 v8-Accessor, der den Methodentest 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 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 / 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; } }

Es ist zu beachten, dass DECLARE_MODULE(name); dieser Satz, dieser Satz deklariert das Modul "Name" und registriert es auf dem Javascript-Objekt. 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 importModule Funktion 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 Kompilierungs- und Laufergebnisse 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 als Unterstützung für das Schreiben unserer Module auf Fibjs portieren. Sie können gerne mehr zu Fibjs beitragen.