Guía de desarrollo de la guía

Agregar módulo nativo

Si necesita algo más allá de lo que proporciona el módulo nativo de fibjs, o si desea contribuir con código para fibjs, este artículo puede ayudarlo.

Escribir archivos 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. Tomemos un nombre de 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.

Nuestro módulo de nombre es muy simple. Solo hay un método de prueba. Su parámetro es una cadena. Esta cadena es letra. El método de prueba determina si la letra es correcta. 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á 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 /". Abajo 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 accesorio v8 y 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. Colocamos los archivos cpp en el directorio $ {{fibjs_project_dir}} / fibjs / src /, y los archivos 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 esto es DECLARE_MODULE(name); esta oración, esta oración declara el "nombre" del módulo y lo registra con el objeto javascript. Debe agregar esta oración al escribir el código fuente. En v0.25.0 y más tarde, vamos a módulos fibjs despojado a cabo con el fin de una mejor reutilización, por lo que aún necesita fibjs/program/src/fibjs.cpp archivo importModule función, añadir la siguiente frase: IMPORT_MODULE(name); para instalar módulos personalizados.

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

Resumen

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