package.json用于最小命令行实用程序

时间:2017-04-07 20:20:42

标签: node.js npm

我正在尝试创建一个命令行实用程序。但是,npm install(no -g)不链接可执行文件。

我的期望是npm install会在本地安装我的可执行文件。

我的package.json看起来像:

{
  "name": "test-bin",
  "version": "0.1.0",
  "description": "Test bin",
  "bin": "./bin/test-bin.js",
  "main": "./index.js",
  "author": "",
  "license": "ISC",
  "repository": {
    "type": "git",
    "url": "file:///tmp/test-bin.git"
  }
}

index.js是:

module.exports = function() {
  console.log('invoked')
}

bin / test-bin.js是:

require('../')()

如果我运行npm install,则会创建node_modules,但不会创建.bin

但是,如果在其他地方创建另一个使用第一个作为依赖项的项目:

{
  "name": "test-test-bin",
  "version": "0.1.0",
  "description": "Test test bin",
  "author": "",
  "license": "ISC",
  "repository": {
    "type": "git",
    "url": "file:///tmp/test-test-bin.git"
  },
  "dependencies": {
    "test-bin": "file:///Users/you/somewhere/test-bin"
  }
}

然后npm install链接该项目中的可执行文件:

node_modules/.bin/test-bin

npm文档说,关于“bin”:

  

要使用此功能,请在package.json中提供bin字段,该字段是地图   命令名称为本地文件名。在安装时,npm将符号链接   文件到全局安装的前缀/ bin,或./node_modules/.bin/ for   本地安装。

它是按照设计,还是我遗漏了什么?

1 个答案:

答案 0 :(得分:1)

在包文件夹中运行npm install将安装其依赖项,但它不会安装程序包本身声明的任何二进制文件(您可以论证这是什么意思)。

仅当软件包作为软件包安装时才会发生(使用npm install package-name或作为其他软件包的依赖项)。