2012-05-01 52 views
29

Cucumber.js腳本提供命令行「二進制」,它是含有認領指令的簡單.js文件:NPM包「斌」爲Windows

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

二進制在package.json指定與在"bin"配置鍵:

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

這一切運作良好的POSIX系統。在Windows上運行Cucumber.js時,有人報告an issue

基本上,.js文件似乎是通過Windows的JScript解釋器(而不是Node.js)執行的,並且由於shebang指令而引發語法錯誤。

我的問題是:建立一個適用於UNIX和Windows系統的「二進制」腳本的建議方法是什麼?

謝謝。

回答

44

Windows將忽略shebang行#!/usr/bin/env node,並將根據.js文件關聯執行它。明確說明調用節點的腳本

node hello.js 

ps。 Pedantry:shebangs 不是POSIX標準中的,但它們受大多數* nix系統支持。


如果您將項目打包爲Npm,請使用package.json中的'bin'字段。然後在Windows上,故宮將安裝一個.cmd包裝沿側你的腳本,使用戶可以從命令行

hello 

對於NPM創建墊片正確執行它,the script must have the shebang line#!/usr/bin/env node

+4

問題是以「.js」後綴結尾的二進制腳本名稱。 NPM基於「bin」配置指令創建了一個友好的unicix'cucumber.js'和'cucumber.js.cmd'窗口友好的二進制文件。由於Windows處理文件「擴展名」的方式,當輸入'node_modules \ .bin \ cucumber.js'時,它通過JScript而不是'.cmd'文件運行'.js'文件。感謝迂腐的後記;) – jbpros

+0

我遇到了完全相同的問題。我試圖找到一個解決方案,不需要我告訴Windows用戶鍵入不同的命令。 在Windows Script Host中執行預佔npm生成的.cmd的JavaScript文件;我希望有一種方法可以利用它代理節點驅動的CLI: http:// stackoverflow。com/questions/24113091 /等效於unix-exec-in-jscript-windows-script-host – ELLIOTTCABLE

+0

我如何通過nodejs而不是microsoft jscript來執行它?即使將其更改爲「node./index.js」也不能使其工作。更正:重新執行'npm link'似乎正常工作 –

5

你的「bin」應是「cucumber」npm會創建一個指向「node%SCRIPTNAME%」的「cucumber」或「cucumber.cmd」文件。前者適用於posix環境,後者適用於windows使用...如果您希望「js」成爲可執行文件名稱的一部分...您應該使用hyphon代替...「cucumber-js」...有一個.js文件會出現在您的案例中的.js.cmd之前,導致WScript解釋器將其作爲JScript文件運行,而不是節點腳本。

我建議你看看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" 
    } 
}