如何在安装时让npm包在.bin中安装工作脚本?

时间:2016-08-26 03:58:25

标签: node.js command-line npm

我正在编写nodejs命令行工具。当我通过运行npm install进行测试并尝试在本地运行它时,npm在node_modules / .bin中创建以下文件:

node_modules/.bin/myapp包含:

"$basedir/../myapp/dist/myappcli.js"   "$@"
exit $?

node_modules/.bin/myapp.cmd包含:

"%~dp0\..\myapp\dist\myappcli.js"   %*

它们并不是非常有用。

另一方面,当我安装流行的nodejs cli工具(例如js-yaml或typings)时,我会获得更多有用的文件:

node_modules/.bin/typings包含:

#!/bin/sh
basedir=`dirname "$0"`

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

if [ -x "$basedir/node" ]; then
  "$basedir/node"  "$basedir/../typings/dist/bin.js" "$@"
  ret=$?
else 
  node  "$basedir/../typings/dist/bin.js" "$@"
  ret=$?
fi
exit $re

node_modules/.bin/typings.cmd包含:

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe"  "%~dp0\..\typings\dist\bin.js" %*
) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
  node  "%~dp0\..\typings\dist\bin.js" %*
)

这些实际上成功运行了他们的应用。为什么他们会得到这些花哨的东西?如何让我的应用程序提供此功能?在将文件上传到npm主机之前,是否必须手动将文件添加到tgz中?我希望不是,因为我希望能够直接从github安装我的应用程序,或者至少有npm pack生成最终的,完整的tgz。

由于

1 个答案:

答案 0 :(得分:0)

将以下行添加到javascript文件的最顶部,该文件用作命令行应用程序的入口点:

#!/usr/bin/env node

感谢jmir for this answer