Afegeix un mòdul natiu
Si necessiteu alguna funcionalitat més enllà del que ofereix el mòdul natiu fibjs, o si voleu aportar codi a fibjs, aquest article us pot ser útil.
Escriu el fitxer idl
IDL és un llenguatge descriptiu utilitzat en fibjs per definir mòduls natius i mètodes d'objectes.
Abans de començar a escriure el vostre propi mòdul fibjs, heu d'escriure el llenguatge descriptiu idl. Prenem com a exemple el nom del mòdul personalitzat. Necessito escriure un llenguatge 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 nom és molt senzill. Només hi ha un mètode de prova el paràmetre del qual és una cadena. Aquesta cadena és la lletra. El mètode de prova determina si la lletra és correcta o no 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
Executeu l'ordre al directori d'eines fibjs idlc.js
. Això llegirà i analitzarà tots els fitxers idl del directori idl i generarà els fitxers de capçalera i els documents corresponents. Els fitxers de capçalera generats s'emmagatzemaran 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/***************************************************************************
* *
* 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 l'accessor de v8, que embolcalla la prova del mètode. Aquí només hem d'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. Col·loquem 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;
}
}
El que cal tenir en compte és DECLARE_MODULE(name);
aquesta frase, que declara el mòdul "nom" i el registra amb l'objecte javascript. Heu d'afegir aquesta frase quan escriviu el codi font. A v0.25.0
les versions i posteriors, separarem el mòdul fibjs per a una millor reutilització, de manera que encara haureu d' afegir la següent frase a la funció fibjs/program/src/fibjs.cpp
del fitxer : instal·lar el mòdul personalitzat.importModule
IMPORT_MODULE(name);
Compilar i provar
Abans de compilar a Windows, primer heu d'executar-lo fibjs tools/vsmake.js
i després crear-lo. Els resultats de la compilació i l'execució són els següents:
Resumir
Va aprendre a afegir i modificar mòduls i objectes nadius de fibjs. Podem escriure una varietat de mòduls complexos, i també podem portar biblioteques de tercers a fibjs com a suport per escriure els nostres mòduls. Us convidem a contribuir més a fibjs.