В этой статье рассказывается, как я создал и опубликовал свой модуль Node-RED «node-red-contrib-flatter» в NPM. Используя плоский пакет NPM, он состоит из двух узлов для выравнивания и развертывания объектов JavaScript.
node-red-contrib-flatter
Модуль Node-RED для выравнивания сложных объектов JSON и их реконструкции. Этот узел использует пакет NPM «flat для… www.npmjs.com»
Запуск узла
Следуя документации 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.
Если это помогло вам, пожалуйста, нажмите на кнопку хлопка. Чур