我一直在研究command line program,我在尝试全局安装时遇到了问题。
我在package.json中设置了bin,所以它看起来像
"bin" : { "bsp" : "bsp.js" }
每当它在%appdata%/ npm中生成命令文件时,它会生成如下:
BSP
"$basedir/node_modules/BlueStacksProfiles/bsp.js" "$@"
exit $?
bsp.cmd
"%~dp0\node_modules\BlueStacksProfiles\bsp.js" %*
注意它在两个节点中都缺少node命令,并且在第一个节点中它没有正确设置basedir(这很糟糕,因为如果你试图从git bash运行它,它将假设错误的基础)。
相反,http-server
HTTP服务器
#!/bin/sh
basedir=`dirname "$0"`
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/http-server/bin/http-server" "$@"
ret=$?
else
node "$basedir/node_modules/http-server/bin/http-server" "$@"
ret=$?
fi
exit $ret
HTTP-server.cmd
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\http-server\bin\http-server" %*
) ELSE (
node "%~dp0\node_modules\http-server\bin\http-server" %*
)
这只是通用模板,我安装的所有其他全局安装的npm应用程序看起来都是这样的。我觉得我错过了我的package.json中的一些内容,但是我找不到有关创建全局安装的节点应用程序的更多内容。
那么,我做错了什么?
答案 0 :(得分:3)
所以,对于其他有这个问题的人来说,那是因为我的bin文件没有以
开头#!/usr/bin/env node
添加修复问题。