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?
Спасибо.
Ответы
Ответ 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"
}
}