web-dev-qa-db-ja.com

WindowsのNPMパッケージ「bin」スクリプト

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の両方のシステムで機能する「バイナリ」スクリプトを設定するための推奨される方法は何ですか?

ありがとう。

37
jbpros

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

56
Colonel Panic

「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"
  }
}
6
Tracker1