Я использую node-gyp в Linux, и мне нужно использовать действия для определения пользовательских шагов сборки (обратите внимание, является ли это проблемой node-gyp или общей проблемой gyp).
В документации предлагается указать команду для шагов сборки как массив строк, которые в какой-то момент должны быть объединены вместе, чтобы сформировать команду:
'action': ['python', 'tools/js2c.py', '<@(_outputs)', 'CORE', '<@(core_library_files)'],
Поскольку это Linux, node-gyp будет генерировать make-файл для каждой цели в файле binding.gyp, и для действий в этом make-файле будет отображаться пользовательская команда.
Проблема, с которой я столкнулся, заключается в том, что команда должна содержать знак =, чтобы установить переменную среды как часть команды, и мне нужно связать команды с &&, например:
export FOO=BAR && do-something-else --option
Если я попытаюсь указать это как шаг действий gyp, я столкнусь с различными проблемами. Я попытался добавить каждое «слово» в команду как отдельный элемент массива.
'action': ['export', 'FOO=BAR', '&&', 'do-something-else', '--option'],
Это не работает, gyp (точнее, оболочка, в которую передается команда) жалуется, что «&&» не является допустимым идентификатором.
Заглянув в сгенерированный make-файл, команда была расширена до этого, что объясняет ошибку оболочки:
export "FOO=BAR" "&&" do-something-else --option
Кавычки были оставлены вокруг присвоения переменной и &&. Непонятно почему. Я пробовал много вариантов, чтобы предотвратить это, но безрезультатно. Все, что содержит = или &, заканчивается кавычками, что в большинстве случаев делает синтаксис команды недействительным.
Предложения приветствуются.