Как в Bash, так и в командной строке Windows (например, cmd.exe и PowerShell ) есть оператор канала (|
), поэтому не следует беспокоиться о перекрестном совместимость платформы.
Учитывая ваш пример npm-скрипта, основная несовместимость в отношении кроссплатформенной поддержки - это использование команды Bash cat
. Использование cat
не удастся выполнить через Windows cmd.exe , однако cat
поддерживается через Windows PowerShell .
Чтобы обойти вышеупомянутую кроссплатформенную проблему, касающуюся cat
, рассмотрите возможность использования служебного скрипта nodejs следующим образом. Назовем файл cat.js
:
cat.js
const fs = require('fs');
fs.readFile(process.argv[2], function(err, data) {
process.stdout.write(data);
});
Как видите, он использует встроенные узлы:
fs.readFile
для чтения содержимого файла.
- Путь к файлу для чтения будет предоставлен в качестве аргумента сценария и будет записан с использованием
process.argv
.
- Содержимое файла записывается в
process.stdout
Примечание: Для краткости cat.js
не включает в себя захват / обработку ошибок, поэтому вы можете добавить некоторые из них.
скрипт npm
Затем в вашем scripts
разделе вашего package.json мы вызываем cat.js
и передаем путь к файлу (т. Е. ./coverage/lcov.info
) в качестве аргумента. Например:
"scripts": {
"coveralls": "node cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls"
},
Примечание: Приведенный выше скрипт npm предполагает, что cat.js
находится в том же каталоге и уровне, что и package.json . Если вы решите найти его в другом месте, путь к нему нужно будет переопределить. Например. "node path/to/cat ./coverage/lcov.info | ..."
До тех пор, пока файл nodejs , указанный в правой части канала (|
), использует process.stdin
для чтения из stdin
, то есть дескриптор файла 0
, (как и coveralls.js ) с использованием кроссплатформенности трубы будет в порядке.