繁体   English   中英

全局安装的npm-package未运行

[英]Globally installed npm-package not running

我刚刚在npm中发布了一个新程序包,它没有按预期运行。

全局运行“ poker-odds-calc”将产生以下错误:

/ c / Users /用户名/ AppData / Roaming / npm / poker-odds-calc:第1行:/node_modules/poker-odds-calc/dist/lib/bin/poker-odds-calc.js:无此类文件或目录

AppData \\ Roaming \\ npm \\ poker-odds-calc“ $ basedir / node_modules / poker-odds-calc / dist / lib / bin / poker-odds-calc.js”“ $ @”退出$?

上面的内容是该模块不能作为全局模块运行的原因,但是我不知道如何强制npm向该文件添加正确的内容。

#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")

case `uname` in
    *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac

if [ -x "$basedir/node" ]; then
  "$basedir/node"  "$basedir/node_modules/poker-odds-calculator/dist/bin/poker-odds-calculator.js" "$@"
  ret=$?
else 
  node  "$basedir/node_modules/poker-odds-calculator/dist/bin/poker-odds-calculator.js" "$@"
  ret=$?
fi
exit $ret

您在命令行脚本中缺少shebang字符序列。 因此,NPM无法正确安装二进制文件。

您需要在打字稿命令行源(/src/lib/bin/poker-odds-calc.ts)的顶部添加一个shebang字符序列。 换句话说,文件的顶部应如下所示:

#!/usr/bin/env node
import * as argv from "argv";
import Table from "../Table";
import {CardsFromString, Log} from "../Utils";

安装软件包后,NPM将在package.json的“ bin”配置中定义的每个文件中查找第一行,并在您的操作系统中采取相应措施。 在Windows中,NPM会根据您在顶部定义的内容创建不同类型的二进制文件。 如果存在节点shebang,则NPM会创建一个二进制文件,尝试使用该节点执行命令行脚本(类似于上面希望的内容)。 如果省略shebang,则NPM会创建一个代理二进制文件,将责任外包给Windows(如您所见,可能会失败)。

参考

https://medium.com/netscape/a-guide-to-create-a-nodejs-command-line-package-c2166ad0452e

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM