2016-09-20 9 views
5

kiedy biegnę package.json bincommand, daj mi syntax error near unexpected token ('`.Node, gdy biegnę package.json `` command` bin`, daj mi błąd składni `pobliżu Nieoczekiwany 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 

gdy uruchomię mój cli:

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

dać mi błąd:

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

jak go rozwiązać? Dzięki!

Odpowiedz

9

Dokumentacja stwierdza:

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

Oznacza to, że npm robi nic specjalnego do pliku i spodziewać się, że jest to plik wykonywalny na UNIX. Twój plik bin może być skryptem perl, skompilowanym programem C, skryptem powłoki, skryptem Ruby lub nawet aplikacją javascript.

Dlatego przyczyną uruchomienia aplikacji nie jest npm. To twój system operacyjny. Tak więc twój skrypt musi być wykonywany (tak jak powiedziałem, może być nawet skompilowanym plikiem binarnym).

Na unixie, aby automatycznie uruchomić skrypt z poprawnym tłumaczem, musisz mieć sh-bang jako pierwszy wiersz w pliku. Dla node.js ja generalnie korzystać z tej linii:

#! /usr/bin/env node 

Można zazwyczaj wystarczy użyć:

#! /whatever/path/to/node 

ale w zależności od systemu operacyjnego, a nawet dystrybucji node.js mogą być instalowane w różnych miejscach. Tak więc /usr/bin/env to program, który ładuje domyślne zmienne środowiskowe, które obejmują $PATH, co pozwoli powłoce automatycznie znaleźć miejsce instalacji pliku node.js.

+0

Nie wiem, jak to działałoby w systemie Windows. Powinien działać na powłoce bash w systemie Windows. – slebetman

Powiązane problemy