我正在尝试创建一个命令行实用程序。但是,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 本地安装。
它是按照设计,还是我遗漏了什么?
答案 0 :(得分:1)
在包文件夹中运行npm install
将安装其依赖项,但它不会安装程序包本身声明的任何二进制文件(您可以论证这是什么意思)。
仅当软件包作为软件包安装时才会发生(使用npm install package-name
或作为其他软件包的依赖项)。