Guía de desarrollo de la guía

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 para fibjs, este artículo puede serle útil.

Escribir archivo idl

idl es un lenguaje descriptivo utilizado en fibjs para definir módulos nativos y métodos de objeto.

Antes de comenzar a escribir su propio módulo fibjs, debe escribir un lenguaje descriptivo idl. Tomamos el nombre del módulo personalizado como ejemplo. Necesito escribir un nombre de lenguaje descriptivo.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 de 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 archivos de encabezado

Ejecute el comando fibjs idlc.js en el directorio de herramientas. Esto leerá y analizará todos los archivos idl en el directorio idl y 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

Escribir código fuente

El método s_test es un descriptor de acceso para v8, que envuelve la prueba del método. Aquí solo necesitamos implementar el método de prueba, que 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. Este ejemplo no requiere archivos de encabezado adicionales. Creamos un nuevo nombre de archivo.cpp en el directorio fibjs / src / de la siguiente manera:

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

Tenga en cuenta 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 posterior, eliminamos el módulo fibjs para una mejor reutilización, por lo que aún debe 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 compilación y ejecución son los siguientes: nombre

para resumir

Aprendí a agregar y modificar módulos y objetos nativos 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 con más poder a fibjs.