fun*_*err 14 windows command-line-interface bin node.js npm
我试图通过package.json bin
属性启动我的cli工具.
我有以下内容:
...
"name": "mycli",
"bin": "./bin/mycli",
...
Run Code Online (Sandbox Code Playgroud)
当我打开包路径中的cmd并输入:"mycli"时,它表示该命令无法识别.
我应该运行npm命令吗?或使用脚本属性?我是否尝试错误地访问bin属性?
Rod*_*ros 20
尝试cli
在bin
属性中指定工具的名称,例如:
"bin": {
"mycli": "./bin/mycli" // or "/bin/mycli.js" if it's a .js file
}
Run Code Online (Sandbox Code Playgroud)
然后,npm link
从项目文件夹中运行,以创建指向当前文件夹的全局符号链接.
不要忘记在文件中的"preferGlobal": "true"
属性之前添加属性,以警告用户全局安装模块.bin
package.json
zer*_*298 16
每当我试图让我的应用程序链接时,我一直在Windows上遇到问题,在路径上执行的生成的脚本将尝试*.js
使用默认的Windows可执行文件运行该文件(我不知道那将是什么).我不知道为什么.我想这可能是因为它是一个JavaScript文件.但是,我将生成的脚本与我安装的其他模块进行了比较,并想出如果我bin
将package.json
act 引用的文件视为在*nix
机器上执行,npm
则会自动尝试将调用添加到节点.
例如:
如果我package.json
看起来像这样:
"name": "myapp",
"bin": {
"myapp": "./bin/myapp"
}
Run Code Online (Sandbox Code Playgroud)
我引用的bin文件如下所示:
#!/usr/bin/env node
require("../server.js");
Run Code Online (Sandbox Code Playgroud)
%APPDATA%\npm
通过npm link
在myapp
目录中运行命令(将package.json
在根目录中),显示的2个生成的可执行文件显示如下:
#!/bin/sh
basedir=`dirname "$0"`
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/myapp/bin/myapp" "$@"
ret=$?
else
node "$basedir/node_modules/myapp/bin/myapp" "$@"
ret=$?
fi
exit $ret
Run Code Online (Sandbox Code Playgroud)
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\myapp\bin\myapp" %*
) ELSE (
node "%~dp0\node_modules\myapp\bin\myapp" %*
)
Run Code Online (Sandbox Code Playgroud)
请记住,我不需要明确地制作上面的2个文件,我只需要将文件作为bin
文件执行package.json
.npm
做了文件创建.
另外需要注意的是,在使用此方法时遇到了这种情况,请确保您的行结尾是正确的.我注意到我的bin错误地说:":没有这样的文件或目录"每当我安装在*nix机器上时,因为行结尾不正确.感谢查看文本文件中的行结尾,例如如何打印可见的行结尾.
例如,如果你运行cat -e PATH_TO_BIN
并得到这样的东西:
#!/usr/bin/env node^M$
^M$
require("../index.js");^M$
Run Code Online (Sandbox Code Playgroud)
你使用错误的行结尾.如果你得到这样的东西:
#!/usr/bin/env node$
$
require("../index.js");$
Run Code Online (Sandbox Code Playgroud)
那些应该是正确的结局.