web-dev-qa-db-ja.com

Node Macで動作しないスクリプト実行可能ファイル:環境:​​ノード\ r:そのようなファイルまたはディレクトリはありません

いくつかのタスクを実行するために実行可能なノードスクリプトを作成しました。 Windowsでは、ノードスクリプトは正常に機能します。しかし、Mac OS X(Yosemite)では機能しません。

ノードスクリプトがWindowsで公開されました。

私のノードスクリプトはnpmコマンドでインストールされます:

npm install -g task-app

私のノードスクリプトには次の最初の行があります。

#! /usr/bin/env node

私は自分の問題を解決するためにいくつかの解決策を試しましたが、まだ行き詰まっています。

これが私が使用したこれらのソリューションです:

  1. node.jsをアンインストールして再インストールする
  2. 次のコマンドを実行して、ノードのリンクを作成します。Sudo ln -s/usr/bin/nodejs/usr/local/bin/node
  3. 次のコマンドでパスを設定します。export PATH = $ PATH:/ usr/local/bin/node

提案する他のソリューションはありますか?

編集:

私のスクリプトの始まり:

#! /usr/bin/env node

var grunt = require('grunt');

//Get parameters from command line
var args = process.argv.splice(2);

[...]
17
PauloDev

結局、私は自分の問題の解決策を見つけました。

私のノードスクリプトファイルはWindowsで作成されているため、ファイルはDOS形式です(行末はDOS形式であると思います)。そこで、ファイルをUNIX形式に変換できるモジュールを使用しました。

brew install dos2unix
Sudo dos2unix /usr/local/lib/node_modules/task-app/src/task-app.js
32
PauloDev

Vimを使用することもできます。

vim script

:se ff=unix
:wq

これにより、DOSスタイルの改行がUnixスタイルの改行に変換されます。

14
JohnQ

スクリプトの改行に問題があります。 #!/usr/bin/env node(windows/dosスタイル)ではなく、\nの後に\r\n(UNIXスタイル)が続くようにしてください。これを修正するには、trコマンドを使用してファイルから\rを削除します。

cat your_script.js | tr -d '\r' > fixed_script.js
7
david_p

PauloDevが上で述べたように、これはMac/Windowsの行末の問題です。詳しく説明すると、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
1
ow3n

MS-DOSによって挿入されたキャリッジリターンは、スクリプトインタープリター名の一部として解釈されます。これは、ちなみにUn * xシステムの正しい動作です。したがって、システムはファイルを検索します/usr/bin/node\r の代わりに /usr/bin/node。他の人が指摘したように、npmは、少し怪しい動作である改行文字を削除することで問題を「修正」しました。

DOS行で終わるShebang行の実行可能ファイルは破損しており、ユーザー、npm、またはyarnではなく作成者が修正する必要があります。この記事の執筆時点では、たとえWindowsシステムで開発している場合でも、DOSの行末を使用する理由はほとんどありません。ただし、一般に配布する前に、少なくとも作成したファイルを修正する必要があります。行末を正しく処理するようにgitを構成する方法については、 https://help.github.com/en/github/using-git/configuring-git-to-handle-line-endings を参照してください。

0
Guido Flohr

Npm@^5.4.0以降、これは問題にはなりません。 npmが正しい行末に自動変換されるようになりました。 https://github.com/npm/npm/issues/12371 を参照してください。

ただし、これは依然として糸の問題です https://github.com/yarnpkg/yarn/issues/548

私のようにnpmの代わりにyarnを使用しているときにこのエラーが発生したためにこのページにアクセスした場合は、yarnの代わりにnpmを使用することを検討してください。とにかく、(おそらく)npmは最近、ほとんどの糸の最高の機能を備えています。

0
drkvogel