Руководство по разработке руководства

Добавить родной модуль

Если вам нужны какие-то функциональные возможности помимо тех, которые предоставляет собственный модуль fibjs, или если вы хотите добавить код в fibjs, эта статья может быть вам полезна.

Записать idl-файл

IDL — это описательный язык, используемый в fibjs для определения собственных модулей и методов объекта.

Прежде чем приступить к написанию собственного модуля fibjs, вам необходимо написать описательный язык idl. В качестве примера возьмем имя пользовательского модуля. Мне нужно написать описательное имя языка name.idl и поместить этот файл в каталог ${{fibjs_project_dir}}/idl/zh-cn/, где ${{fibjs_project_dir}} представляет каталог, в котором находится проект fibjs.

Наш модуль имени очень прост.Есть только один метод тестирования, параметром которого является строка.Эта строка является текстом песни.Метод тестирования определяет, правильный ли текст песни или нет, а возвращаемое значение имеет логический тип. name.idl записывается следующим образом

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

Создать заголовочный файл

Выполните команду в каталоге инструментов fibjs idlc.js. Это прочитает и проанализирует все файлы idl в каталоге idl и создаст соответствующие файлы заголовков и документы. Сгенерированные файлы заголовков будут храниться в каталоге «fibjs/include/ifs/». Например, name.idl автоматически создаст заголовочный файл ${{fibjs_project_dir}}/fibjs/include/ifs/name.h, который определяет класс 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

Написать исходный код

Метод s_test — это метод доступа v8, который оборачивает тест метода. Здесь нам нужно реализовать только метод тестирования.Метод тестирования имеет два параметра: v0 — входной текст песни и vr — возвращаемое значение. Мы помещаем файл cpp в каталог ${{fibjs_project_dir}}/fibjs/src/, а файл заголовка — в каталог ${{fibjs_project_dir}}/fibjs/include. Для этого примера не требуются дополнительные файлы заголовков. Мы создаем новый файл с именем.cpp в каталоге fibjs/src/ со следующим содержимым:

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

Что необходимо отметить, так это DECLARE_MODULE(name);это предложение, которое объявляет модуль «name» и регистрирует его с помощью объекта javascript. Вам необходимо добавить это предложение при написании исходного кода. В v0.25.0и более поздних версиях мы отделим модуль fibjs для более удобного повторного использования, поэтому вам все равно нужно добавить к функции fibjs/program/src/fibjs.cppв файле importModuleследующее предложение : IMPORT_MODULE(name);to install the custom Module.

Скомпилируйте и протестируйте

Прежде чем компилировать в Windows, вам необходимо сначала выполнить его fibjs tools/vsmake.js, а затем собрать. Результаты компиляции и запуска следующие: имя

Подведем итог

Научились добавлять и изменять собственные модули и объекты fibjs. Мы можем писать различные сложные модули, а также портировать сторонние библиотеки на fibjs в качестве поддержки для написания наших модулей. Вы можете внести свой вклад в fibjs.