2012-05-01 36 views
29

Cucumber.js jest dostarczanie wiersza polecenia „binarny”, który jest prosty .js plik zawierający shebang instrukcji:NPM pakiet „bin” skrypt dla Windows

#!/usr/bin/env node 
var Cucumber = require('../lib/cucumber'); 
// ... 

binarny jest określona w package.json z klucz konfiguracji:

{ "name" : "cucumber" 
, "description" : "The official JavaScript implementation of Cucumber." 
// ... 
, "bin": { "cucumber.js": "./bin/cucumber.js" } 
// ... 

Wszystko to działa dobrze w systemach POSIX. Ktoś zgłosił an issue podczas uruchamiania Cucumber.js w systemie Windows.

Zasadniczo plik .js wydaje się być wykonywany przez interpreter JScript w systemie Windows (nie Node.js) i generuje błąd składni z powodu instrukcji shebang.

Moje pytanie brzmi: jaki jest zalecany sposób skonfigurowania skryptu "binarnego", który działa zarówno w systemach UNIX, jak i Windows?

Dzięki.

Odpowiedz

44

System Windows ignoruje linię obrysu #!/usr/bin/env node i wykona ją zgodnie ze skojarzeniem plików .js. Wyjaśnij, aby wywoływać skrypt za pomocą węzła:

node hello.js 

ps. Pedantry: shebangs nie są w standardzie POSIX, ale są obsługiwane przez większość systemów * nix.


Jeśli projektujesz pakiet dla Npm, użyj pola "bin" w polu package.json. Następnie na Windows, NPM zainstaluje .cmd owijkę wzdłuż boku skrypt, dzięki czemu użytkownicy mogą wykonać go z linii poleceń

hello 

Dla KMP aby stworzyć odpowiednią podkładkę, the script must have the shebang line#!/usr/bin/env node

+4

Problemem była nazwa skryptu binarnego zakończona przyrostkiem ".js". NPM tworzy przyjazne dla systemu UNIX pliki binarne "cucumber.js" i "cucumber.js.cmd" na podstawie instrukcji konfiguracyjnej "bin". Z powodu sposobu, w jaki system Windows obsługuje rozszerzenia plików, po wpisaniu 'node_modules \ .bin \ cucumber.js' uruchomił plik' .js' za pośrednictwem JScript zamiast pliku '.cmd'. Dzięki za pedantyczny postscript;) – jbpros

+0

Wpadłem na dokładnie ten sam problem. Próbuję znaleźć rozwiązanie, które nie wymagałoby od użytkowników systemu Windows wpisywania innego polecenia. Pliki JavaScript przed pobraniem pliku .cmd generowane są w Hosta skryptów systemu Windows; Mam nadzieję, że istnieje sposób na wykorzystanie tego do proxy do interfejsu CLI z interfejsem Node: http: // stackoverflow.com/questions/24113091/equivalent-of-unix-exec-in-jscript-windows-script-host – ELLIOTTCABLE

+0

jak mogę go wykonać przez nodejs zamiast microsoft jscript? nawet zmiana go na 'node./index.js' nie sprawia, że ​​działa. korekta: ponowne wykonanie '' Npm link' wydaje się działać –

5

swój „bin” powinno być "ogórkiem" npm utworzy plik "ogórek" lub "ogórek.cmd" wskazujący na "węzeł% SCRIPTNAME%". pierwsza z nich przeznaczona jest dla środowisk POSIX, druga dla systemu windows używa ... Jeśli chcesz, aby "js" było częścią nazwy pliku wykonywalnego ... powinieneś zamiast tego używać hiphonu ... "cucumber-js" ... Posiadanie pliku .js pojawi się przed .js.cmd w twoim przypadku powodując, że interpreter WScript będzie go uruchamiał jako plik JScript, a nie skrypt węzła.

Proponuję, patrząc na dobry przykład, na coffee-script's package.json.

{ 
    "name":   "coffee-script", 
    "description": "Unfancy JavaScript", 
    "keywords":  ["javascript", "language", "coffeescript", "compiler"], 
    "author":  "Jeremy Ashkenas", 
    "version":  "1.4.0", 
    "licenses":  [{ 
    "type":  "MIT", 
    "url":  "https://raw.github.com/jashkenas/coffee-script/master/LICENSE" 
    }], 
    "engines":  { 
    "node":  ">=0.4.0" 
    }, 
    "directories" : { 
    "lib" : "./lib/coffee-script" 
    }, 
    "main" : "./lib/coffee-script/coffee-script", 
    "bin":   { 
    "coffee":  "./bin/coffee", 
    "cake":  "./bin/cake" 
    }, 
    "scripts": { 
    "test": "node ./bin/cake test" 
    }, 
    "homepage":  "http://coffeescript.org", 
    "bugs":   "https://github.com/jashkenas/coffee-script/issues", 
    "repository": { 
    "type": "git", 
    "url": "git://github.com/jashkenas/coffee-script.git" 
    }, 
    "devDependencies": { 
    "uglify-js": ">=1.0.0", 
    "jison":  ">=0.2.0" 
    } 
}
Powiązane problemy