【问题标题】:How to make bin script available for npm package installed locally如何使 bin 脚本可用于本地安装的 npm 包
【发布时间】:2016-08-26 09:07:06
【问题描述】:

我在 npm 文档中看到您不能使用本地安装包的 bin 脚本。

那么,gulp 在本地安装时如何作为 bin 命令启动? 是什么使它在本地安装时可用,我查看了 gulp package.json 和 bin 脚本,但没有找到任何答案。

【问题讨论】:

  • 如果您的问题得到解决,请将问题标记为已回答。否则,让我们知道什么还没有工作。

标签: node.js npm bin


【解决方案1】:

From NPMJS documentation:

要使用它,请在 package.json 中提供一个 bin 字段,它是命令名称到本地文件名的映射。安装时,npm 会将该文件符号链接到 prefix/bin 用于全局安装,或 ./node_modules/.bin/ 用于本地安装。

因此,您本地安装的软件包二进制文件将像这样执行

./bin/node_modules/.bin/the_binary

这是如果您想直接启动二进制文件。或者,在the scripts part of the documentation:中指定

除了 shell 预先存在的 PATH 之外,npm run 还将 node_modules/.bin 添加到提供给脚本的 PATH 中。

因此,您可以简单地编写一个包装脚本,如

scripts: {
  "build": "the_binary"
}

然后像这样调用你的脚本

npm run build

奖金

从 npm@2.0.0 开始,您可以在执行脚本时使用自定义参数。 getopt 使用特殊选项 -- 来分隔选项的结尾。 npm 会将 -- 之后的所有参数直接传递给您的脚本:

npm run test -- --grep="pattern"

【讨论】:

  • 那么,我无法在本地安装包(例如 gulp)并在不进行全局安装的情况下运行 bin 命令?因为我已经在本地安装了 Gulp,我可以运行 gulp default bin 命令,而无需全局安装 Gulp。问题可能出在我的 bash_profile 中......我不知道为什么我可以运行 Gulp 而不是没有全局安装的自定义 bin 命令,并且您链接的文档似乎说这是完全正常的。
  • 不,你不应该这样做。您可以运行npm list -g 来查看全局安装了哪些软件包,运行which gulp 来查看二进制文件的位置。
  • 我确认,问题出在我的 bash_profile... 非常感谢您抽出宝贵时间!
【解决方案2】:

您可以使用 lpx https://www.npmjs.com/package/lpx

  • 运行在本地 node_modules/.bin 文件夹中找到的二进制文件
  • 从工作区的任何位置运行在工作区根目录的 node_modules/.bin 中找到的二进制文件

如果本地找不到二进制文件,lpx不会下载任何包(即不像npx)

示例:lpx tsc -b -w 将使用本地 typescript 包运行 tsc -b -w

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 2013-01-18
    • 2013-01-10
    • 2017-09-20
    相关资源
    最近更新 更多