2016-09-20 40 views
5

當我運行的package.json bincommand,給我syntax error near unexpected token(''。節點,當我運行的package.json``bin` command`,給我附近意外的標記'語法錯誤'( '`

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');' 

如何解決呢?謝謝!

回答

9

的文檔指出:

On install, npm will symlink that file into prefix/bin for global installs, or ./node_modules/.bin/ for local installs.

這意味着,NPM不沒什麼特別到您的文件,並希望它是在UNIX上的可執行文件。您的bin文件可以是perl腳本,編譯的C程序,shell腳本,Ruby腳本或者甚至是node.js javascript應用程序。

因此,導致您的應用運行的原因不是npm。這是你的操作系統。所以你的腳本必須是可執行的(正如我所說,它甚至可以是一個編譯的二進制文件)。

在unix上,要使用正確的解釋器自動執行腳本,您需要將sh-bang作爲文件的第一行。對於node.js中我一般用這條線:

#! /usr/bin/env node 

通常你可以只使用:

#! /whatever/path/to/node 

但根據OS甚至發行的node.js上可以在不同的位置進行安裝。因此,/usr/bin/env是一個加載默認環境變量的程序,其中包括$PATH,這將允許shell自動查找node.js的安裝位置。

+0

我不知道這將如何在Windows上工作。它應該在Windows上的bash shell上工作。 – slebetman

相關問題