Cucumber.jsは、Shebang命令を含む単純な.js
ファイルであるコマンドライン「バイナリ」を提供しています。
#!/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を実行すると、誰かが 問題 を報告しました。
基本的に、.js
ファイルはWindowsのJScriptインタープリター(Node.jsではない)を介して実行されているようで、Shebang命令が原因で構文エラーがスローされます。
私の質問は、UNIXとWindowsの両方のシステムで機能する「バイナリ」スクリプトを設定するための推奨される方法は何ですか?
ありがとう。
Windowsは、Shebang行#!/usr/bin/env node
を無視し、.js
ファイルの関連付けに従って実行します。ノードでスクリプトを呼び出すことについて明確にする
node hello.js
ps。ペダントリー:シェバンはPOSIX標準ではありませんが、ほとんどの* nixシステムでサポートされています。
Npm用にプロジェクトをパッケージ化する場合は、 package.json の「bin」フィールドを使用します。次に、Windowsでは、Npmが.cmd
ラッパーをスクリプトと一緒にインストールして、ユーザーがコマンドラインから実行できるようにします
hello
Npmがシム権を作成するには、 スクリプトにはシバン行が必要です#!/usr/bin/env node
「bin」は「cucumber」である必要があります。npmは、「node%SCRIPTNAME%」を指す「cucumber」または「cucumber.cmd」ファイルを作成します。前者はposix環境用、後者はWindows用です...「js」を実行可能ファイル名の一部にしたい場合は、代わりにハイフォンを使用してください...「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"
}
}