가이드 개발 가이드

네이티브 모듈 추가

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

헤더 파일 생성

tools 디렉토리에서 fibjs idlc.js 명령을 실행합니다. 그러면 idl 디렉토리의 모든 idl 파일을 읽고 구문 분석하여 해당 헤더 파일과 문서를 생성합니다. 생성 된 헤더 파일은 "fibjs / include / ifs /"디렉토리에 저장됩니다. 아래에. 예를 들어 name.idl은 name_base 클래스를 정의하는 헤더 파일 $ {{fibjs_project_dir}} / fibjs / include / ifs / name.h를 자동으로 생성합니다.

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

소스 코드 작성

s_test 메서드는 메서드 테스트를 래핑하는 v8 접근 자입니다. 여기서는 테스트 메서드 만 구현하면되는데 테스트 메서드에는 두 개의 매개 변수가 있습니다. v0은 입력 가사이고 vr은 반환 값입니다. $ {{fibjs_project_dir}} / fibjs / src / 디렉토리에 cpp 파일을, $ {{fibjs_project_dir}} / fibjs / include 디렉토리에 헤더 파일을 넣습니다. 이 예제에는 추가 헤더 파일이 필요하지 않습니다. fibjs / src / 디렉토리에 다음 내용으로 새 파일 name.cpp를 생성합니다.

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); 사용자 정의 모듈을 설치합니다.

컴파일 및 테스트

Windows에서 컴파일하기 전에 fibjs tools/vsmake.js 를 실행 한 다음 빌드해야합니다. 컴파일 및 실행 결과는 다음과 같습니다. 이름

요약하자면

fibjs의 네이티브 모듈과 객체를 추가하고 수정하는 방법을 배웠습니다. 다양한 복잡한 모듈을 작성할 수 있으며 모듈 작성을 지원하기 위해 타사 라이브러리를 fibjs에 이식 할 수도 있습니다. fibjs에 더 많은 기여를하실 수 있습니다.