NPM包“本”的Windows脚本(NPM package 'bin' script

2019-06-24 01:55发布

Cucumber.js被供给命令行“二进制”,这是一个简单.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(不Node.js的)的JScript解释执行,它抛出,因为家当指令的语法错误。

我的问题是:什么是建立一个“二进制”的脚本,在UNIX和Windows系统工作的建议呢?

谢谢。

Answer 1:

Windows将忽略shebang行#!/usr/bin/env node ,并根据执行它.js文件关联。 明确显示有节点调用脚本

node hello.js

PS。 迂腐:shebangs 不是 POSIX标准,但它们被大多数* nix系统支持。


如果您打包为NPM项目,使用的“bin”字段的package.json 。 然后在Windows上,故宫将安装一个.cmd包装沿侧你的脚本,使用户可以从命令行执行它

hello

对于NPM创建垫片权, 剧本必须有家当线 #!/usr/bin/env node



Answer 2:

你的“bin”的应该是“黄瓜” NPM将创建一个“黄瓜”或“cucumber.cmd”文件指向“节点%SCRIPTNAME%”。 前者对于POSIX环境,后者是用于Windows使用...如果你想在可执行文件名的“JS”是一部分...你应该使用hyphon,而不是...“黄瓜JS” ...有一个js文件会在你的情况引起的WScript解释器来运行它作为一个JScript文件,而不是一个节点脚本.js.cmd之前。

我建议在看咖啡脚本的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"
  }
}


文章来源: NPM package 'bin' script for Windows