Проблема с запуском «yarn run» для объекта scripts в package.json

#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. Ах, я неправильно понял. Просто нужно дождаться релиза.