Как заставить npx запускать скрипт js cli в Windows?

Проблема. Мой сценарий построения лесов npx отлично работает в Linux, но не работает в Windows. Однако я вижу множество пакетов, которые отлично работают в Windows, но я не смог понять, что они делают по-другому. Я спросил инструменты искусственного интеллекта (

Что происходит в Linux? - Скрипт нормально выполняется узлом и работает нормально.
Что происходит в Windows? - Он просто открывает новое окно командной строки, ничего не делая.

  • Я создал пакет npm @reuk/start для создания часто используемых шаблонов проектов.
  • Я намеревался использовать его как скрипт npx. похоже на npx create-vite.
  • Для этого я создал скрипт и добавил его в поле bin в своем package.json -> "bin": "./bin/cli.js". и опубликовал пакет.
  • Обычный запуск сценария, например node ./bin/cli.js, работает отлично. единственная проблема в том, что при выполнении npx @reuk/start скрипт не вызывается с использованием узла.
  • У моего cli.js есть shebang #!/usr/bin/env node, чтобы сообщить интерпретатору запустить его с помощью node. Я знаю, что shebang работает только в системах Unix, а Windows его не поддерживает, но как create-vite работает в Windows и почему у меня не работает, несмотря на аналогичный код?

Что я здесь делаю не так? И что еще более важно, как мне обеспечить беспрепятственную кроссплатформенную работу?

Для справки вот код - @reuk/start | создай-пригласи

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
185
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, имя вашего bin скрипта конфликтует с командой запуска cmd.

Исправлением может быть выбор более конкретного имени для команды, под которой вы хотите, чтобы ваш скрипт был доступен. Это имя также должно быть допустимым именем файла, чтобы избежать дальнейших проблем.

В package.json:

"bin": {
  "rvg": "bin/cli.js"
}

Вот упрощенное и технически неточное объяснение того, что происходит, когда вы бежите npx @reuk/start:

  1. npx пытается разрешить пакет, используя обычный механизм разрешения пакета node.js.
  2. если ничего не найдено, пакет устанавливается глобально
  3. npm видит раздел bin в package.json и создает оболочки для конкретной платформы в папке node_modules/.bin. В вашем случае он добавляет файлы с именем start, потому что другая команда — @reuk/start не является допустимым именем файла.
  4. npx пытается запустить start, но разрешает команду cmd, а не ваш скрипт.

Честно говоря, последний пункт кажется ошибкой, и существует довольно много открытых ошибок, связанных с пакетами с ограниченной областью действия в целом, но я не нашел объяснения этому конкретному случаю.

Идеальный! Это сработало. Имя скрипта start было проблемой, которая конфликтовала с командой cmdstart. Изменение его на что-либо другое решило проблему. Хотя я не уверен, почему выполнение "bin": "./bin/cli.js" не сработало, это также потому, что имя пакета с заданной областью также start или потому, что @reuk/start не является допустимым именем файла, и npx не удалось создать какой-либо скрипт в .bin для этого пакета, поэтому создаем именованный сценарий был необходим?

Rohit Kaushal 24.03.2024 16:29

@RohitKaushal да, думаю, да. Кроме того, это может быть какая-то проблема, похожая на эту. В любом случае, даже если вы указали имя, как я предложил, npx должен корректно работать с полным именем пакета npx @reuk/start.

Shlang 24.03.2024 16:47

Другие вопросы по теме