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 обладает лучшими характеристиками пряжи в наши дни (возможно).