Подтвердить что ты не робот

NPM-пакет 'bin' script для Windows

Cucumber.js предоставляет командную строку "двоичный", которая представляет собой простой файл .js, содержащий инструкцию shebang:

#!/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. Кто-то сообщил проблему при запуске Cucumber.js в Windows.

В принципе, файл .js, кажется, выполняется через интерпретатор JScript Windows (не Node.js), и он выдает синтаксическую ошибку из-за инструкции shebang.

Мой вопрос: какой рекомендуемый способ настройки "двоичного" script, который работает как в системах UNIX, так и в Windows?

Спасибо.

4b9b3361

Ответ 1

Windows игнорирует строку shebang #!/usr/bin/env node и выполняет ее в соответствии с ассоциацией файлов .js. Будьте осторожны при вызове script с помощью node

node hello.js

пс. Педантизм: shebangs не входят в стандарт POSIX, но они поддерживаются большинством систем * nix.


Если вы упаковываете свой проект для Npm, используйте поле "bin" в package.json. Затем в Windows Npm установит обертку .cmd рядом с вашим script, чтобы пользователи могли выполнить ее из командной строки

hello

Для создания npm для правильной прокладки script должна иметь строку shebang #!/usr/bin/env node

Ответ 2

ваш "bin" должен быть "огурцом", npm создаст файл "огурец" или "cucumber.cmd", указывающий на "node% SCRIPTNAME%". первый из которых относится к средам posix, последний используется для использования Windows... Если вы хотите, чтобы "js" был частью исполняемого имени... вы должны использовать вместо этого hyphon... "cucumber-js"... Наличие файла .js появится перед .js.cmd в вашем случае, заставляя интерпретатор WScript запускать его как файл JScript, а не node script.

Я хотел бы предложить хороший coffee- script 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"
  }
}