@Dmitry221060

Как модифицировать пакет?

У меня есть пакет "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 влияет на пакет.
  • Вопрос задан
  • 133 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Cindx Москва
от 130 000 до 180 000 руб.
Reelmotion Games Санкт-Петербург
от 45 000 до 75 000 руб.
Acme Crypto Corp Нижний Новгород
от 80 000 до 140 000 руб.