我正在尝试创建一个简单的节点js插件。这是我到目前为止所做的事情。
的package.json
{
"name": "testcli",
"version": "0.0.1",
"description": "Test CLI Tool",
"main": "index.js",
"author": "BJ",
"license": "ISC",
"bin": {
"testx": "index.js"
}
}
在package.json旁边,我有一个文件index.js
只有一行console.log('Hi!')
现在当我使用npm install -g
(来自同一目录)安装软件包然后运行命令testx
时,它会给我以下错误
.../AppData/Roaming/npm/testx: line 1: /node_modules/testcli/index.js: No such file or directory
我该如何解决这个问题?
答案 0 :(得分:0)
您需要添加一个shebang来告诉shell如何调用此脚本。
尝试在脚本开头添加#! /usr/bin/env node
。
答案 1 :(得分:0)
许多软件包都有一个或多个他们想要安装到PATH中的可执行文件。 npm使这很简单(事实上,它使用此功能来安装“npm”可执行文件。)
要使用此功能,请在package.json中提供bin字段,该字段是命令名称到本地文件名的映射。在安装时,npm会将该文件符号链接到用于全局安装的前缀/ bin,或者用于本地安装的./node_modules/.bin/。
例如,myapp可能有这个:
{ "bin" : { "myapp" : "./cli.js" } }
因此,当你安装myapp时,它会创建一个从cli.js脚本到/ usr / local / bin / myapp的符号链接。
如果您有一个可执行文件,并且其名称应该是软件包的名称,那么您可以将其作为字符串提供。例如:
{ "name": "my-program"
, "version": "1.2.5"
, "bin": "./path/to/program" }
将与此相同:
{ "name": "my-program"
, "version": "1.2.5"
, "bin" : { "my-program" : "./path/to/program" } }
请确保bin中引用的文件以#!/ usr / bin / env node 开头,否则脚本将在没有节点可执行的情况下启动!