Leitfaden Entwicklungshandbuch

Natives Modul hinzufügen

Wenn Sie etwas benötigen, das über das native Modul von fibjs hinausgeht, oder wenn Sie Code zu fibjs beitragen möchten, kann Ihnen dieser Artikel helfen.

IDL-Dateien 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. Nehmen wir als Beispiel einen benutzerdefinierten Modulnamen. 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 eine Zeichenfolge. Diese Zeichenfolge ist Lyrics. Die Testmethode bestimmt, ob die Lyrics korrekt sind. 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 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. Runter. Beispielsweise generiert name.idl automatisch die Headerdatei $ {{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 und umschließt den Methodentest. 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-Dateien im Verzeichnis $ {{fibjs_project_dir}} / fibjs / src / und die Header-Dateien 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 dies DECLARE_MODULE(name); Dieser Satz deklariert das Modul "Name" und registriert es beim Javascript-Objekt. Sie müssen diesen Satz hinzufügen, wenn Sie den Quellcode schreiben. In v0.25.0 und höher 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 benutzerdefinierte Module 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

Zusammenfassung

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.