Как запустить ESLint из сохраненной переменной Bash? - PullRequest
0 голосов
/ 13 марта 2020

Я настраиваю скрипт инициализации проекта и git ловушку предварительной фиксации для работы над проектом. У нас есть сценарии, которые я хочу запустить для пометки не в каталоге root, а в подкаталоге, и я хотел бы сохранить его таким образом.

То, что я хочу сделать, это установить полный относительный путь к двоичным исполняемым файлам для переменных eslint и phpcs до bash, после чего можно будет их запускать. Я также хочу иметь возможность выполнять двоичный файл composer .phar из переменных bash.

Итак, вот что я сделал.

# Set tool paths
PHPCS_PATH=`./wp-content/themes/our-theme/vendor/bin/phpcs`
PHPCBF_PATH=`./wp-content/themes/our-theme/vendor/bin/phpcbf`
ESLINT_PATH=`./wp-content/themes/our-theme/node_modules/.bin/eslint`
SASSLINT_PATH=`./wp-content/themes/our-theme/node_modules/.bin/sass-lint`
COMPOSER_PATH=`./wp-content/themes/our-theme/composer.phar`

Я пытался проверить их пути локально из каталога проекта root, и я продолжаю получать ошибки.

Я копирую и вставляю одну из этих строк в свой терминал, нажимаю клавишу ввода, затем выполняю одно из следующих действий:

  • ${ESLINT_PATH} и command ${ESLINT_PATH} и "${ESLINT_PATH}" и $ESLINT_PATH все дают мне ...

    zsh: command too long: eslint [options] file.js [file.js] [dir]\n\nBasic configuration...
    
  • eval "${ESLINT_PATH}" и eval $ESLINT_PATH и eval "$ESLINT_PATH" все дают мне ...

    zsh: no matches found: [options]
    zsh: command not found: Basic
    zsh: command not found: --no-eslintrc
    zsh: command not found: -c,
    zsh: no matches found: [String]
    

Я схожу с ума? Как в мире сделать путь исполняемым? Если я беру содержимое пути и запускаю его, он работает просто отлично.

Пример: ./wp-content/themes/swmaster/node_modules/.bin/eslint фактически говорит мне указать путь.

Что я здесь не так делаю?

Ответы [ 2 ]

2 голосов
/ 13 марта 2020

Похоже, ваша проблема в следующих назначениях:

# Set tool paths
PHPCS_PATH=`./wp-content/themes/our-theme/vendor/bin/phpcs`
PHPCBF_PATH=`./wp-content/themes/our-theme/vendor/bin/phpcbf`
ESLINT_PATH=`./wp-content/themes/our-theme/node_modules/.bin/eslint`
SASSLINT_PATH=`./wp-content/themes/our-theme/node_modules/.bin/sass-lint`
COMPOSER_PATH=`./wp-content/themes/our-theme/composer.phar`

Эти обратные пометки являются заменой команд. Более простой способ написания этой статьи:

PHPCS_PATH=$(./wp-content/themes/our-theme/vendor/bin/phpcs)
...

Не думаю, что это то, чего вы действительно хотите. Подстановка команд фактически выполняет то, что находится внутри, и заменяется тем, что идет к stdout. Я думаю, что вы на самом деле пытались выполнять строковые назначения. Это может быть достигнуто путем простого удаления обратных галочек, потому что в путях нет пробелов. Но в любом случае это хорошая привычка - просто вдвойне цитировать их. Попробуйте это:

# Set tool paths
PHPCS_PATH="./wp-content/themes/our-theme/vendor/bin/phpcs"
PHPCBF_PATH="./wp-content/themes/our-theme/vendor/bin/phpcbf"
ESLINT_PATH="./wp-content/themes/our-theme/node_modules/.bin/eslint"
SASSLINT_PATH="./wp-content/themes/our-theme/node_modules/.bin/sass-lint"
COMPOSER_PATH="./wp-content/themes/our-theme/composer.phar"

Еще один метод решения вашей проблемы - добавить эти каталоги в переменную PATH. Например, если вы установите в PATH каталог bin для phpcs и phpcbf, вы сможете запускать эти программы без указания полного (или относительного в этой ситуации) пути:

export PATH=$PATH:./wp-content/themes/our-theme/vendor/bin
# or export PATH=$PATH:/full/path/to/wp-content/themes/our-theme/vendor/bin
# Now you can just run the line below without a path...
phpcs
0 голосов
/ 13 марта 2020

Этим утром я нашел то, что искал в этой сущности: https://gist.github.com/rashtay/328da46a99a9d7c746636df1cf769675#file -pre-commit-eslint

Мое решение теперь:

# Set tool paths
PHPCS="$(git rev-parse --show-toplevel)/wp-content/themes/our-theme/vendor/bin/phpcs"
PHPCBF="$(git rev-parse --show-toplevel)/wp-content/themes/our-theme/vendor/bin/phpcbf"
ESLINT="$(git rev-parse --show-toplevel)/wp-content/themes/our-theme/node_modules/.bin/eslint"
SASSLINT="$(git rev-parse --show-toplevel)/wp-content/themes/our-theme/node_modules/.bin/sass-lint"

Это работает из любого каталога в репо, поскольку он связан с базовым путем репо. Таким образом, это c.

...