Установите CWD для сценария NPM, который запускает двоичный файл - PullRequest
1 голос
/ 13 апреля 2019

У меня есть супер-проект, который содержит подпроекты и содержит общие зависимости:

super
  node_modules
    .bin
      foo-binary
      foo-binary.exe
    foo
  sub
    node_modules
    package.json
  package.json

Мне нужно иметь возможность вызвать foo либо как super Сценарий NPM:

super / package.json

"scripts": {
  "foo": "foo-binary" <-- should run with super/sub/ as CWD
}

В этом случае foo-binary работает с super/ в качестве CWD, в то время как он должен работать с super/sub/.Использование cd приводит к кроссплатформенным проблемам;cd sub && ..\\node_modules\\.bin\\foo-binary с обратной косой чертой работает в Windows, но не * nix ОС, в то время как cd sub && ../node_modules/.bin/foo-binary с прямой косой чертой не работает в Windows (протестировано в Windows 7):

".." не распознается как внутреннееили внешняя команда, работающая программа или пакетный файл

Или мне нужно иметь возможность вызывать foo либо как super сценарий NPM:

super / sub /package.json

"scripts": {
  "foo": "../node_modules/.bin/foo-binary"
}

В этом случае пути к платформе также не работают в Windows.

Существует несколько причин, по которым sub не может иметь foo в качестве своего собственногозависимость, одна из них заключается в том, что все подпроекты должны последовательно использовать одну и ту же версию foo и не занимать пространство с несколькими foo копиями.

Как в этом случае можно установить текущий рабочий каталог, перекрестноплатформу и желательно без добавления пользовательских скриптов в проект?

1 Ответ

1 голос
/ 14 апреля 2019

Вложите путь, который определен в вашем npm-скрипте, с двойными кавычками в JSON, т.е. \"...\".

Например:

"scripts": {
  "foo": "cd sub && \"../node_modules/.bin/foo-binary\""
}

Теперь он будет успешно работать кроссплатформенно - через windows cmd.exe и * nix sh.

...