У меня есть CLI на основе JS / Node, который был изначально разработан для работы в macOS и Linux.Теперь я хочу, чтобы он работал на Windows, но по сложным и фиксированным причинам я должен достичь этого без изменения исходного кода приложения .
Первым шагом было ложьпрограмме о ее process.platform
, которая прекрасно работает , связавшись с ее Module
(предложенной @estus) и обернув исходный CLI в другой CLI, который затем фактически используется в Windows.
Теперь я наткнулся на некоторый код, который запускает shelljs.which('ruby')
и сравнивает результат с определенной строкой (/usr/bin/ruby
) и выводит сообщение об ошибке или даже не выполняет программу, если она не совпадает.Я пока не знаю, как это преодолеть.
Как я могу манипулировать тем, что shell.which()
возвращает?
Один подход, который я мог бы предпринять, был быманипулировать require('shelljs')
, чтобы загрузить свой собственный форк shelljs
, который возвращает все, что я хочу (используя override-require
, который я уже использовал для замены child_process
на cross-spawn
, который работает намного лучше наWindows).Но я, конечно же, хочу не поддерживать свой собственный форк shelljs
- было бы гораздо практичнее, если бы я мог как-то просто манипулировать shelljs.which
.
Я создал супер маленький демонстрационный проект, которыйпохож на CLI, который я использую, и его можно использовать для экспериментов с возможными решениями: https://github.com/janpio/nodejs-cli-wrongruby - fake.js
- это то место, где я бы хотел каким-то образом манипулировать shelljs.which
.