В этой статье рассказывается, как я создал и опубликовал свой модуль Node-RED «node-red-contrib-flatter» в NPM. Используя плоский пакет NPM, он состоит из двух узлов для выравнивания и развертывания объектов JavaScript.





Запуск узла

Следуя документации Node RED по созданию узла, преобразующего msg.payload в нижний регистр, я смог создать основу своего пакета.



Основные отличия от начального узла:

В документации Node-RED вы создаете файл строчных букв.js. Для своего пакета я создал файлы flatter.js и unflatter.js, по одному для каждого узла.
Мне нужно было потребовать «плоский» пакет NPM, поэтому я сохранил его как зависимость:
npm i --save flat

Теперь я могу потребовать это в своих файлах flatter.js и unflatter.js:
var flatten = require('flat');
var unflatten = require('flat');

И вместо этой строки в примере файла lower-case.js:
msg.payload = msg.payload.toLowerCase();
Я заменил ее на:
msg.payload = flatten(msg.payload); в flatter.js и
msg.payload = unflatten(msg.payload); в unflatter.js

Модульные тесты

Следуя документации Node-RED, я создал папку под названием «test» с файлом flatter_spec.js. Я только добавил простой тест для выравнивания и распаковки полезной нагрузки, а затем проверки соответствия вывода ожидаемому результату.

Ниже приведены зависимости, которые я сохранил в своем пакете для разработки, mocha и node-red-node-test-helper. Зависимости, сохраненные в «devDependencies» с помощью
--save-dev, не устанавливаются, когда кто-то устанавливает ваш пакет из NPM.
npm i --save-dev mocha node-red node-red-node-test-helper

Пакет.json

Добавьте node-red в качестве ключевого слова в package.json, когда будете готовы, и он должен появиться в библиотеке Node-RED flows.nodered.org в течение нескольких часов. Затем его можно найти в менеджере палитр Node-RED. Делайте это только тогда, когда ваш пакет готов!
Также добавьте другие ключевые слова, относящиеся к вашему пакету, чтобы его можно было найти в NPM.

"keywords": [
  "node-red"
],

Добавьте свои узлы:

"node-red": {    
  "nodes": {      
    "flat": "flatter.js",
    "unflat": "unflatter.js"
  }
},

Добавьте тестовую команду в скрипты:

"scripts": {
  "test": "mocha \"test/**/*_spec.js\""
},

Чтобы запустить модульные тесты, попробуйте npm test в консоли.

Действия на GitHub

Уже есть много шаблонов на выбор. Я добавил тест node.js (который запускается при каждом нажатии) и действия пакета node.js (который запускается при каждом созданном выпуске). Лично я удалил ту часть, которая публикуется в GitHub Packages.

Создайте учетную запись в NPM на https://www.npmjs.com/.
Создайте токен в разделе Токены аутентификации с типом Опубликовать, добавьте его в качестве секрета в свой репозиторий с именем npm_token, вставьте его в действие GitHub в качестве переменной среды NODE_AUTH_TOKEN:${{secrets.npm_token}}Это уже должно быть в узле шаблон пакета .js. Создайте выпуск в GitHub (нажмите Выпуски на верхней панели, а затем Черновик нового выпуска), вуаля, действие GitHub проверит, проходит ли он тесты uni, а затем опубликует пакет в NPM.

Если это помогло вам, пожалуйста, нажмите на кнопку хлопка. Чур