Node script исполняемый файл не работает на Mac: env: node\r: нет такого файла или каталога
Я создал свой исполняемый файл node script для выполнения некоторых задач grunt. В Windows мой node script работает отлично. Но на Mac OS X (Yosemite) он не работает.
Мой node script опубликован в Windows.
Мой node script устанавливается через команду npm:
npm install -g task-app
Мой node script имеет эту первую строку:
#! /usr/bin/env node
Я попробовал много решений для решения моей проблемы, но я все еще застрял.
Вот эти решения, которые я использовал:
- удалить и переустановить Node.js
- выполнить эту команду для
создайте ссылку для node: sudo ln -s/usr/bin/nodejs
/usr/local/bin/ node
- установите мой путь с помощью этой команды: export PATH = $PATH:/usr/local/bin/node
Есть ли у вас другие решения?
EDIT:
начало моего script:
#! /usr/bin/env node
var grunt = require('grunt');
//Get parameters from command line
var args = process.argv.splice(2);
[...]
Ответы
Ответ 1
В конце концов, я нашел решение своей проблемы.
Так как мой файл node script был создан в Windows, файл является DOS-форматом (окончание строк в формате DOS, я думаю). Итак, я использовал модуль, который позволяет преобразовать файл в unix-формат:
brew install dos2unix
sudo dos2unix /usr/local/lib/node_modules/task-app/src/task-app.js
Ответ 2
Вы также можете использовать vim:
vim script
:se ff=unix
:wq
Это подтвердит новые строки в стиле DOS для строк новой строки в стиле Unix.
Ответ 3
В вашей script проблема с новыми строками. Убедитесь, что за #!/usr/bin/env node
следует \n
(стиль unix) вместо \r\n
(стиль Windows/dos).
Чтобы исправить это, используйте команду tr
, чтобы удалить \r
из вашего файла:
cat your_script.js | tr -d '\r' > fixed_script.js
Ответ 4
Как говорит PauloDev выше, это проблема конца строки в Mac/Windows. Для уточнения, если вы используете nvm
вам nvm
нужно найти свой скрипт (в моем случае я использую express-mvc-generator
):
# install dos2unix
brew install dos2unix
# output the full path of your node version
which node
>> /Users/<username>/.nvm/versions/node/v8.0.0/bin/node
# confirm the file path
cat /Users/<username>/.nvm/versions/node/v8.0.0/lib/node_modules/express-mvc-generator/bin/express
# convert the line endings
sudo dos2unix /Users/<username>/.nvm/versions/node/v8.0.0/lib/node_modules/express-mvc-generator/bin/express
# then run your script
Ответ 5
Это больше не должно быть проблемой, так как [email protected]^5.4.0. Теперь npm автоматически преобразуется в правильные окончания строк. См. Https://github.com/npm/npm/issues/12371.
Это, однако, все еще проблема с пряжей: https://github.com/yarnpkg/yarn/issues/5480.
Если вы пришли на эту страницу, потому что вы столкнулись с этой ошибкой при использовании пряжи вместо npm, как я сделал, вы можете рассмотреть возможность использования npm вместо пряжи. В любом случае, npm обладает лучшими характеристиками пряжи в наши дни (возможно).