У меня есть
пакет "node-images" и мне нужно добавить в него функцию, рисующую пиксель чёрного цвета по заданным координатам. Я вручную скачал этот пакет с GitHub и изменил следующие файлы:
index.js - добавил строки
71. drawDot: function(x, y) {
72. this._handle.dot(x, y);
72. },
src/Image.h - Добавил строки
207.
208. static void DrawDot(const v8::FunctionCallbackInfo<v8::Value> &args);
src/Image.cc - Добавил строки
106. NODE_SET_PROTOTYPE_METHOD(tpl, "dot", DrawDot);
...
422.
423. void Image::DrawDot(const FunctionCallbackInfo<Value> &args) { // {{{
424.
425. Image *dst;
426. uint32_t x, y;
427. Pixel *cp;
428.
429. dst = node::ObjectWrap::Unwrap<Image>(args.This());
430.
431. x = args[0]->Uint32Value();
432. y = args[1]->Uint32Value();
433.
434. cp = &color;
435. cp->R = 0;
436. cp->G = 0;
437. cp->B = 0;
438. cp->A = 0xFF;
439.
440. dst->pixels->data[x][y] = cp;
441.
442. args.GetReturnValue().Set(v8::Undefined(args.GetIsolate()));
443. } // }}}
После этого ввёл npm i находясь в директории с пакетом и попытался выполнить следующий код
const images = require("images");
images(300, 300).drawDot(10,10);
Но получил ошибку:
"TypeError: this._handle.dot is not a function"
Вопрос: Что я сделал не так и как мне добавить эту функцию?
Может быть полезно:
1. После установки пакета появляется файл /vendor/.../binding.node. Если открыть его как бинарный файл, то по адресу 0006d390 можно найти перечисление имён функций, но функции dot среди них нет.
2. Если вписать имя функции вручную, пакет будет крашиться при запуске, не выдавая ошибки.
3. Если изменить имя какой-либо функции в аргументах NODE_SET_PROTOTYPE_METHOD (src/Image.cc), то при попытке вызова этой функции будет возникать ошибка, т.е. редактирование src/Image.cc влияет на пакет.