Guia Guia de desenvolupament

Afegeix un mòdul natiu

Si necessiteu algunes funcions diferents de les que proporciona el mòdul natiu de fibjs o voleu aportar codi a fibjs, aquest article us pot ser útil.

Escriviu un fitxer idl

idl és un llenguatge descriptiu utilitzat per definir mòduls natius i mètodes d'objecte en fibjs.

Abans de començar a escriure el vostre propi mòdul fibjs, heu d’escriure un llenguatge descriptiu idl. Prenem com a exemple el nom del mòdul personalitzat. Necessito escriure un idioma descriptiu name.idl i posar aquest fitxer al directori $ {{fibjs_project_dir}} / idl / zh-cn /, on $ {{fibjs_project_dir}} representa el directori on es troba el projecte fibjs.

El nostre mòdul de noms és molt senzill, només hi ha un mètode de prova, el paràmetre és una cadena, aquesta cadena és la lletra, el mètode de prova jutja si les lletres són correctes i el valor de retorn és de tipus booleà. name.idl s’escriu de la següent manera

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 un fitxer de capçalera

Executat a l' fibjs idlc.jsordre del directori d'eines , que llegeix tots els fitxers del directori idl idl i analitza, es generen els fitxers i la documentació de capçalera corresponents, els fitxers de capçalera generats s'emmagatzemen al directori "fibjs / include / ifs /". Per exemple, name.idl generarà automàticament el fitxer de capçalera $ {{fibjs_project_dir}} / fibjs / include / ifs / name.h, que defineix 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

Escriu el codi font

El mètode s_test és un accessor v8, que completa la prova del mètode. Aquí només necessitem implementar el mètode de prova, el mètode de prova té dos paràmetres, v0 és la lletra d’entrada i vr és el valor de retorn. Posem el fitxer cpp al directori $ {{fibjs_project_dir}} / fibjs / src / i el fitxer de capçalera al directori $ {{fibjs_project_dir}} / fibjs / include. No calen fitxers de capçalera addicionals per a aquest exemple. Creem un nou fitxer name.cpp al directori fibjs / src / amb el contingut següent:

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

Tingueu en compte que DECLARE_MODULE(name);aquesta frase, la frase, declara el "nom" d'aquest mòdul i registreu-lo a l'objecte javascript. Aquesta frase s’ha d’afegir quan s’escriu el codi font. En v0.25.0versions futures i es retiraran els mòduls fibjs per tal de reutilitzar-los millor, de manera que encara heu de fibjs/program/src/fibjs.cpppresentar un fitxer importModule, afegiu la següent funció de frase: IMPORT_MODULE(name);per instal·lar un mòdul personalitzat.

Compila i prova

Abans de compilar a Windows, heu de tornar-lo a executar fibjs tools/vsmake.jsi després construir. Els resultats de compilació i execució són els següents: nom

Resumeix

Es va aprendre a afegir i modificar mòduls i objectes natius de fibjs. Podem escriure tot tipus de mòduls complexos i també podem trasplantar biblioteques de tercers a fibjs com a suport per escriure els nostres mòduls. Podeu contribuir més a fibjs.