как yarn рекомендует использовать npx (теперь это основная часть npm - https://github.com/npm/npm/pull/17685).
По сути, он действует как «bundle exec» ruby, за исключением того, что запускает диспетчер пакетов, если зависимости отсутствуют. Это отодвинет пряжу в сторону и снова переключится на npm.
Есть ли план создать эквивалент «ypx», который использует для этого пряжу?
Как бы то ни было, я думаю, что npx был вдохновлен «yarn create», который похож, но работает только для пакетов с префиксом «create-». Не уверен, какие здесь планы.
Ага, в настоящее время у нас есть yarn create
(например, попробуйте использовать yarn create react-app
). Возможно, в будущем мы откроем его для других глаголов, но этого пока нет в планах.
Я работаю над библиотекой npx. Нетрудно получить существующий код npx и просто заменить связанные с npm кишки командами, эквивалентными пряжи.
Я не буду добавлять это непосредственно к самому npx, поскольку это _значительно_ быть агностиком: npx не выполняет операций, которые конфликтуют с людьми, использующими другие менеджеры пакетов. Для этого даже не требуется, чтобы npm был в системе, поэтому вы можете npm rm -g npm
и npx будет работать нормально. Таким образом, вы могли бы сказать npx _is_ ypx
, если только вы не очень серьезно относитесь к совместному использованию кеша, что является прекрасной вещью.
(Вдохновляю: npx в первую очередь вдохновлен этим давним запросом на функцию: https://github.com/npm/npm/issues/6053. Большая часть его функциональности сосредоточена на удовлетворении _этой_ потребности. Добавлена функция автоматической установки. post-yarn-create, и определенно призван стать фактическим обобщенным решением для этой конкретной вещи - но он делает _ намного больше_, чем это)
@sandys - проблема, на которую ссылается yarn
так как вы можете просто сделать yarn x
(или yarn run x
если хотите явное), если x
находится в вашем каталоге ./node_modules/.bin
. Так что я не думаю, что есть острая необходимость в эквиваленте npx
.
Если вы считаете, что в этом есть острая необходимость, можете ли вы объяснить, зачем вам это нужно? Например. какую проблему это решит для вас?
Кто-нибудь знает, похож ли yarn exec
на bundle exec
? Я вижу это в интерфейсе командной строки, но не в документации на веб-сайте. Быстрая игра с yarn exec
в командной строке кажется, что она запускает установленные двоичные файлы, поэтому это может решить вашу проблему @sandys.
FWIW, npm-run - это более старая утилита, которая позволяет запускать локальные node_modules
двоичные файлы, и она не зависит от npm
. Однако у него нет никаких опций, тогда как npx
полон ручек.
@BYK Пример использования выполняется, например, ypx greenkeeper-lockfile@1
или ypx danger@2
на CI без добавления их в качестве зависимостей в сам проект
@SimenB CI обычно не
@MarkBennett Поскольку yarn exec
не запускает скрипты из package.json
я не думаю, что это подходящее место для добавления этой функции.
@BYK Я не ОП, но я пришел к этому запросу функции, потому что у меня был пакет на моем локальном компьютере, но не в моем package.json. Поэтому мое приложение будет работать для меня, но не для всех, кто установил мое приложение чисто. Это особенность bundle exec
сборщика ruby, которая мне нравится - она не будет работать, если все зависимости не указаны в манифесте.
Моя основная жалоба на yarn x
заключается в том, что он пытается разрешить цель из 3 (трех) разных мест: внутренние команды пряжи, сценарии npm и корзины.
Допустим, у меня есть инструмент с двоичным кодом с именем check
: 1) yarn check
вместо этого запустит собственную внутреннюю команду check
2) yarn run check
запустит npm потребителя. скрипт с таким именем или, может быть, мой инструмент.
npx
дает четкое разделение понятий: yarn x
всегда является внутренней командой, yarn run x
всегда является сценарием, а npx x
всегда является двоичным, в этом нет необходимости угадывать и надеяться.
что-то вроде сути
#!/usr/bin/env bash
package_name=$1
temp_dir="/tmp/ypx/$package_name/$(date +%s%N)"
mkdir -p $temp_dir
(cd $temp_dir; yarn add $package_name) && (PATH="$temp_dir/node_modules/.bin":$PATH; "$@")
rm -rf $temp_dir
@BYK другой npx
функция является расширением поведения yarn x
потому что вы можете:
./node_modules/.bin/
в текущем каталоге./node_modules/
не существует, загрузите пакет во временный каталог с его зависимостями и вызовите командуэто делается прозрачно для пользователя.
гипотетический ypx
может также предложить третий пункт, а именно:
@BYK Не работает.
Установите babel-cli
например: yarn add babel-cli
Затем запустите yarn babel-node --presets es2015 ./server.js
который server.js
- это файл в текущем каталоге и простой сервер express
api.
Просто не работает и говорит, что файла не существует. ( Error: Cannot find module
)
Но использование его с npx
работает npx babel-node --presets es2015 ./server.js
@BYK, насколько я знаю, npx будет искать вашу команду на node_module/.bin/
на локальном компьютере, и если он не нашел подходящей команды, он получит пакет из Интернета, если он есть, и вы всегда можете быть в курсе .
yarn не получает пакет из Интернета, пока он не установлен на локальном компьютере.
Можем ли мы получить yarnx
?
@ light24bulbs, почему именно?
Честно говоря, я думаю, что npx
- хороший инструмент, даже если он слишком ориентирован на "npm inc." (Как и многие другие инструменты npm, если честно). yarnx
не решит эту проблему (он обязательно будет ориентирован на пряжу), поэтому я не слишком уверен, что это будет хорошая идея.
В идеале я бы предпочел, чтобы npx
автоматически определял используемый диспетчер пакетов или, по крайней мере, позволял настраивать его внутри файла rc. Я предлагаю передать им этот вопрос и посмотреть, что они скажут. В зависимости от их ответа мы сможем провести информированное обсуждение 🙂
Сам @arcanis npx комбинируется с npm, потому что он связан с npm - libnpx
нет, и фактически это то, что pnpx
из pnpm использует под капотом. Я добавил пару патчей, чтобы сделать это возможным для Золтана. Я не буду добавлять поддержку автоопределения, потому что это убирает часть интеграции и делает вещи более сложными и трудными для поддержки :)
Просто погуглил эту проблему, и я думаю, что это подходящее место, чтобы спрашивать о любых обновлениях. Есть ли какой-либо существующий инструмент / решение или планируете добавить некоторые функции в пряжу?
Например, мои текущие проблемы с npx:
npx gatsby new blog https://github.com/gatsbyjs/gatsby-starter-blog
)Обе эти проблемы выглядят идеально подходящими для решения такой пряжи, как @phra, уже упомянутой в качестве его третьего пункта.
UPD: Итак, основная причина ypx
я упоминаю, - это не двоичное выполнение (что совершенно нормально для yarn), а возможность автоматической загрузки пакетов, которые я собираюсь выполнить.
Я согласен. Я также думаю, что есть возможность улучшить странный API NPM
немного. Я думаю, что вызов yarn exec COMMAND
будет иметь больше смысла, чем
yarnx
. У сборщика Ruby была очень похожая команда
https://bundler.io/man/bundle-exec.1.html
В пн, 17 декабря 2018 г., в 14:29 Павел Прокудин [email protected]
написал:
Просто погуглил эту проблему, и я думаю, что это подходящее место, чтобы спросить о
любые обновления. Есть ли какой-либо существующий инструмент / решение или планируете добавить некоторые
функциональность пряжи?
Например, мои текущие проблемы с npx:
- он каждый раз загружает отсутствующий пакет с зависимостями,
- он создает package-lock.json в проектах, ориентированных на пряжу, что вызывает
предупреждения и необходимо удалить его руками.
(в частности, я просто выполняю новый блог npx gatsby
https://github.com/gatsbyjs/gatsby-starter-blog)Обе эти проблемы выглядят идеально подходящими для решения пряжи типа @phra.
https://github.com/phra уже упоминается как его третий пункт.-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/yarnpkg/yarn/issues/3937#issuecomment-447968558 или отключить звук
нить
https://github.com/notifications/unsubscribe-auth/AAjhEng6juvpaK4xLx1KrVHccJAytnAfks5u5_CcgaJpZM4OY9aL
.
-
-Форрест
yarn exec
уже существует (значение отличается от того, что вы предлагаете) 🙂
Ага! На данный момент закрывая эту проблему, я еще не понял, хотим ли мы перенести эту функцию в версию 1 (возможно, нет?).
Не уверен, что это достойная замена. yarn dlx eslint --help
на моей машине занимает 2,7 секунды, а npx eslint --help
завершается за 0,2 секунды. Если вызвать много сценариев bin, это быстро приведет к недопустимым значениям.
Кроме того, я думаю, что stdout / stderr не следует записывать с помощью yarn, если нет ошибки, чтобы разрешить синтаксический анализ вывода сценария.
@silverwind разница во времени кажется довольно большой. Воспроизводится ли это последовательно в нескольких прогонах? Если да, я бы отправил новую проблему для расследования, поскольку мы, конечно же, не хотим, чтобы она была медленной.
Что касается stdout / stderr из Yarn, я _ думаю_, что вы можете использовать yarn --silend dlx eslint
для подавления всего некритического вывода Yarn. @arcanis, можешь подтвердить последнее?
@ light24bulbs, почему именно?
Для всех, кто нашел какой-либо пакет в Интернете, обратите внимание на то, что инструкции по установке включают npx something something
, но хотят остаться в мире пряжи.
Решает ли новый
yarn dlx
эту проблему?
yarn dlx
- точная замена s/npx/yarn dlx/
на npx
? Если нет, то это не решает проблему.
попробуй это
https://www.npmjs.com/package/ynpx
демонстрация
https://www.npmjs.com/package/create-react-app
$ yarn create react-app
$ npx create-react-app
$ npm init react-app
@ light24bulbs - чтобы повторить @rulatir , я попал сюда, потому что в руководстве Storybook сказано использовать npx
для его установки , и у меня не было простого рецепта, как произносить эквивалентное заклинание с помощью yarn
. Если существует эквивалентный набор команд для пряжи, мы должны разместить их на веб-сайте пряжи, чтобы эта страница (вместо этой ветки) находилась в верхней части результатов поиска Google по запросу «пряжа версия npx».
Я тоже на одной лодке с @codekiln. Всякий раз, когда я выполняю какие-то инструкции, в которых говорится «запустить npx ...
, я понятия не имею, что эквивалентно yarn
. Примером является npx tslint-to-eslint-config .
@ light24bulbs - чтобы повторить @rulatir , я попал сюда, потому что в руководстве Storybook сказано использовать
npx
для его установки , и у меня не было простого рецепта, как произносить эквивалентное заклинание с помощьюyarn
. Если существует эквивалентный набор команд для пряжи, мы должны разместить их на веб-сайте пряжи, чтобы эта страница (вместо этой ветки) находилась в верхней части результатов поиска Google по запросу «пряжа версия npx».
То же самое и здесь, с руководством по установке конденсатора js https://capacitorjs.com/docs/getting-started , ощущение такое, что это убеждает пользователя отказаться от пряжи и вернуться к npm
404 Страница не найдена
Я предполагаю, что @delanym имел в виду эту страницу (но я не думаю, что это копирует npx
): https://yarnpkg.com/cli/exec
Самый полезный комментарий
@sandys - проблема, на которую ссылается
yarn
так как вы можете просто сделатьyarn x
(илиyarn run x
если хотите явное), еслиx
находится в вашем каталоге./node_modules/.bin
. Так что я не думаю, что есть острая необходимость в эквивалентеnpx
.Если вы считаете, что в этом есть острая необходимость, можете ли вы объяснить, зачем вам это нужно? Например. какую проблему это решит для вас?