Node、package.json `bin` `command` を実行すると、予期しないトークン `(' ` の近くに構文エラーが発生します。質問する

Node、package.json `bin` `command` を実行すると、予期しないトークン `(' ` の近くに構文エラーが発生します。質問する

package.json を実行するとbin commandsyntax error near unexpected token(' ` が表示されます。

package.json:

 "bin": {
    "grabfilenames": "./index.js"
 }

npm link:

/usr/local/bin/grabfilenames -> /usr/local/lib/node_modules/grabfilename/index.js                                                                                                                                                                               
/usr/local/lib/node_modules/grabfilename -> /Users/dulin/workspace/grabfilename  

を実行するとcli:

grabfilenames -p /Users/dulin/workspace/learn-jquery

エラーが発生します:

/usr/local/bin/grabfilenames: line 1: syntax error near unexpected token `('
/usr/local/bin/grabfilenames: line 1: `const fs = require('fs');'

どうすれば解決できますか? ありがとうございます!

ベストアンサー1

ドキュメントには次のように記載されています:

インストール時に、npm はそのファイルをグローバル インストールの場合は prefix/bin に、ローカル インストールの場合は ./node_modules/.bin/ にシンボリック リンクを作成します。

つまり、npmは特にないファイルにこれを追加すると、Unix 上で実行可能になります。binファイルは、Perl スクリプト、コンパイルされた C プログラム、シェル スクリプト、Ruby スクリプト、または node.js javascript アプリにすることができます。

したがって、アプリを実行するのはnpmではなくOSです。つまり、スクリプトしなければならない実行可能であること(前述したように、コンパイルされたバイナリであっても構いません)。

Unixでは、正しいインタープリタでスクリプトを自動的に実行するには、バンファイルの最初の行として。node.js の場合、通常は次の行を使用します。

#! /usr/bin/env node

一般的には、次のものを使用できます。

#! /whatever/path/to/node

ただし、OS やディストリビューションによっては、node.js が異なる場所にインストールされる場合があります。そのため、/usr/bin/envデフォルトの環境変数をロードするプログラムがあり、$PATHこれにより、シェルは node.js がインストールされている場所を自動的に検出できるようになります。

おすすめ記事