Guía de desarrollo de guías

Agregar módulo nativo

Si necesita algunas funciones distintas a las proporcionadas por el módulo nativo de fibjs, o si desea contribuir con código a fibjs, este artículo puede resultarle útil.

Escribir archivo idl

idl es un lenguaje descriptivo que se utiliza para definir módulos nativos y métodos de objetos en fibjs.

Antes de comenzar a escribir su propio módulo fibjs, debe escribir un lenguaje descriptivo idl. Tomemos el nombre del módulo personalizado como ejemplo. Necesito escribir el lenguaje descriptivo name.idl y poner este archivo en el directorio $ {{fibjs_project_dir}} / idl / zh-cn /, donde $ {{fibjs_project_dir}} representa el directorio donde se encuentra el proyecto fibjs.

Nuestro módulo de nombre es muy simple. Solo hay un método de prueba. Su parámetro es una cadena. Esta cadena es la letra. El método de prueba determina si la letra es correcta y el valor de retorno es un tipo booleano. name.idl se escribe de la siguiente 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); };

Generar archivo de encabezado

Ejecute el comando fibjs idlc.js en el directorio de herramientas. Esto leerá todos los archivos idl en el directorio idl y los analizará para generar los archivos y documentos de encabezado correspondientes. Los archivos de encabezado generados se almacenarán en el directorio "fibjs / include / ifs /" debajo. Por ejemplo, name.idl generará automáticamente el archivo de encabezado $ {{fibjs_project_dir}} / fibjs / include / ifs / name.h, que define la clase 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

Escribe el código fuente

El método s_test es un descriptor de acceso v8, que envuelve la prueba del método. Aquí solo necesitamos implementar el método de prueba El método de prueba tiene dos parámetros, v0 es la letra de entrada y vr es el valor de retorno. Ponemos el archivo cpp en el directorio $ {{fibjs_project_dir}} / fibjs / src /, y el archivo de encabezado en el directorio $ {{fibjs_project_dir}} / fibjs / include. No se requieren archivos de encabezado adicionales para este ejemplo. Creamos un nuevo archivo name.cpp en el directorio fibjs / src / con el siguiente contenido:

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

Cabe señalar que DECLARE_MODULE(name); esta oración, esta oración declara el módulo "nombre" y lo registra en el objeto javascript. Esta oración debe agregarse al escribir el código fuente. En v0.25.0 y versiones posteriores, hemos eliminado el módulo fibjs para una mejor reutilización, por lo que aún necesita agregar la siguiente oración a la función importModule en el fibjs/program/src/fibjs.cpp : IMPORT_MODULE(name); para instalar un módulo personalizado.

Compilar y probar

Antes de compilar en Windows, debe ejecutar fibjs tools/vsmake.js y luego compilar. Los resultados de la compilación y ejecución son los siguientes:nombre

para resumir

Aprendí a agregar y modificar módulos nativos y objetos de fibjs. Podemos escribir una variedad de módulos complejos, y también podemos portar bibliotecas de terceros a fibjs como soporte para escribir nuestros módulos. Le invitamos a contribuir más a fibjs.