#javascript #yarnpkg
#javascript #yarnpkg
Вопрос:
У меня возникли проблемы с использованием run
команды yarn
, предоставленной менеджером пакетов Facebook для JavaScript.
В настоящее время в моем package.json
файле у меня есть следующее для моего scripts
объекта.
"scripts": {
"lint": "./node_modules/.bin/eslint --ignore-pattern dist ."
}
Когда я запускаю следующую команду, она работает, как и ожидалось, npm run lint
. Однако, когда я запускаю скрипт из yarn
with yarn run lint
, я получаю следующую ошибку.
Petesta :: λ -> ~/Git/yarn yarn run lint
yarn run v0.15.1
$ "./node_modules/.bin/eslint --ignore-pattern dist ."
sh: ./node_modules/.bin/eslint --ignore-pattern dist .: No such file or directory
error Command failed with exit code 127.
info Visit http://yarnpkg.com/en/docs/cli/run for documentation about this command.
./node_modules/.bin
Каталог находится в моем $PATH
, и я заметил, что если у вас есть исполняемый файл, подобный date
или pwd
, то yarn run some_script_on_date
он будет работать, как ожидалось.
Один из способов заставить это работать — создать отдельный файл оболочки, содержащий команду, которую вы пытаетесь выполнить. Давайте назовем это ./scripts/lint.sh
.
#!/bin/bash
./node_modules/.bin/eslint --ignore-pattern dist .
А затем запустите эту команду для файла chmod x ./scripts/lint.sh
Теперь в вашем scripts
объекте добавьте следующую строку.
"new_lint": "./scripts/lint.sh"
И теперь yarn run new_lint
будет работать, как ожидалось.
Я что-то упускаю или это то, как yarn
нужно вызывать скрипты? Я хотел бы запустить команду, подобную with npm
.
Ответ №1:
Я нашел проблему, которая, как мне кажется, связана с этим: https://github.com/yarnpkg/yarn/pull/809 .
yarn не понимал пробелов в сценариях npm. Я предполагаю, что это будет исправлено в следующем выпуске. Я могу воспроизвести проблему на своем компьютере (используя последнюю версию yarn: 0.15.1).
Кстати, вам не обязательно включать ./node_modules/.bin
это в свои сценарии npm. И npm, и yarn будут заглядывать в эту папку по умолчанию, как описано здесь: https://docs.npmjs.com/cli/run-script
Таким образом, ваш скрипт может быть только: "lint": "eslint --ignore-pattern dist ."
Комментарии:
1. Я попробовал это
eslint
сделать, но это так не сработало. Команда не найдена. Это сработает сnpm run
вами , но не сyarn run
вами .2. Буквально на днях, лол, пакет был вызван
yarnpkg
и совсем недавно устарелyarn
. Раньше это устареваниеyarnpkg run command
работало так, как ожидалось. Теперь, с новым пакетом, это не работает.3. Ах, я неправильно понял. Просто нужно дождаться релиза.