В чем причина работы nodemon в cmd, а не в командном файле? - PullRequest
0 голосов
/ 27 августа 2018

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

'узел' не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл.

Это весь код этого командного файла:

@echo off
node bot.js
pause

Команда узла была в моем пути, поэтому я не уверен, почему она не работала, но в другом посте кто-то рекомендовал вместо того, чтобы просто набирать node, чтобы ввести полный путь к файлу , так что я попробовал это, и это сработало.

Вот новый рабочий код:

@echo off
"C:\Program Files\nodejs\node.exe" bot.js
pause

Затем я установил nodemon . Опять же, это работает в cmd, когда я перешел к папке и набрал ее вручную, но когда я пытаюсь сделать это в командном файле, он не работает. Вместо того, чтобы дать мне ошибку, это было до того, как окно мгновенно закрылось. Вот этот код:

@echo off
nodemon bot.js
pause

Так как у меня есть команда pause в конце кода, она должна остановиться там, если я получу ошибку, но она закрывается до того, как по какой-то причине туда попадет. Команда nodemon находится в моем пути, и я также попытался заменить nodemon на путь к файлу, C:\Users\tdkni\AppData\Roaming\npm\nodemon.cmd, как я рекомендовал в предыдущем посте. Ни одно из этих решений не сработало, и я думаю, что это связано с тем, что есть и другая проблема, кроме того, что команда nodemon не обнаружена. Я не вижу сообщения об ошибке, поскольку оно мгновенно закрывается, поэтому я не знаю точно, что не так.

Регистрация расширений файлов .bat и .cmd осуществляется в соответствии с рекомендацией в комментарии, удаленном за это время.

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

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

0 голосов
/ 01 сентября 2018

Ну, вполне понятно, почему node.exe не был найден cmd.exe в каталоге C:\Program Files\nodejs.

Локальный Path, являющийся системой и пользователь Path объединенный содержит "C:\Program Files\nodejs;" вместо просто C:\Program Files\nodejs.

Пути к папкам в Path никогда не должны заключаться в двойные кавычки с одним исключением: сам путь к папке содержит один или несколько ;. В этом случае путь к папке с ; должен быть заключен в двойные кавычки, чтобы получить точку с запятой в пути к папке, не интерпретируемую как разделитель между путями к папке. Это общий синтаксис CSV, описанный в статье Википедии значения, разделенные запятыми , который используется Windows для путей к папкам в Path с использованием точки с запятой в качестве разделителя.

По этой причине cmd.exe ищет в папке с именем C:\Program Files\nodejs; для node.* с расширением файла в списке точка с запятой, разделенная в переменной окружения PATHEXT. Но нет папки C:\Program Files\nodejs;, потому что папка C:\Program Files\nodejs без точки с запятой в конце.

А также PATHEXT определен неправильно, поскольку в конце он содержит путь к папке C:\Program Files\nodejs, хотя он должен содержать только расширения файлов, разделенные точкой с запятой.

Другие мелкие ошибки:

  1. Первые 4 пути к папкам в system PATH должны быть всегда:

    %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0
    

    Некоторые установщики добавляют пути к папкам в начале списка путей к папкам вместо добавления их в конце, как это можно увидеть здесь. Компилятор Intel64 и пути к папкам Oracle Java следует перемещать в system PATH после пути к папке PowerShell.

  2. Пути к папкам могут, но не должны заканчиваться обратной косой чертой. Все обратные косые черты в конце пути к папке должны быть удалены из system и user PATH. Microsoft добавила после Windows Vista путь PowerShell с обратной косой чертой по неизвестной причине. Но это безопасно и рекомендуется, тем не менее, удалить обратную косую черту после WindowsPowerShell\v1.0.

  3. Система и пользователь Path (если последний вообще существует), а также PATHEXT не должны заканчиваться точкой с запятой. Не должно быть ; после последнего пути к папке или последнего расширения файла, поскольку в соответствии со спецификацией CSV это означает, что есть еще одно значение (путь к папке, расширение файла), которое является пустым значением.

Я рекомендую определить system Path со следующими значениями соответственно путями к папкам:

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0;%SystemRoot%\System32\OpenSSH;%ProgramFiles(x86)%\Common Files\Intel\Shared Libraries\redist\intel64\compiler;%ProgramFiles(x86)%\Common Files\Oracle\Java\javapath;%ProgramFiles%\nodejs;%ProgramFiles(x86)%\Windows Kits\8.1\Windows Performance Toolkit

Я рекомендую определить user Path со следующими значениями соответственно путями к папкам:

%LocalAppData%\Microsoft\WindowsApps;%AppData%\npm

Эти два пути к папкам связаны с учетной записью пользователя, и по этой причине их следует добавить к user , а не system Path.

Рекомендую исправить system Переменная среды PATHEXT в:

.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

Подробнее об использовании Path и PATHEXT см. Ответ на Почему «...» не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл? Пожалуйста, посмотрите также статью в Википедии о Переменные среды Windows .

0 голосов
/ 27 августа 2018

Дайте нам попробовать, пожалуйста, если это сработает, я объясню:

@echo off
cd /d "C:\Users\tdkni\AppData\Roaming\npm"
echo Testing Script > OUTPUT.log
nodemon.cmd bot.js >> OUTPUT.log
pause
...