首页 > 解决方案 > 使用 brew 全局安装 npm 包

问题描述

我想发布一个使用 NodeJs 开发的 CLI 工具,我正在尝试使用 yum 而不是使用 npm 全局安装它,因为我不希望用户要求安装 Nodejs 和 npm。不知道该怎么做?

代替

npm install -g my-cli-tool

brew install my-cli-tool

所以用户不必安装 NodeJs 和 Npm。需要将整个 Nodejs 运行时环境 + 我的包打包为 Brew 包。

标签: node.jsnpmhomebrewpackage-managersnpm-scripts

解决方案


您需要自己编写自制公式。我会根据您的需要提供一些有用的资源。

  1. 阅读公式作者文档的节点,尤其是最后的公式示例。

  2. 列出node用作依赖项的类似公式。使用这些现有公式作为参考。

    brew uses node
    
    # check one of them, like this "cash-cli"
    brew edit cash-cli
    

这是一个例子

require "language/node"

class CashCli < Formula
  desc "Convert currency rates directly from your terminal"
  homepage "https://github.com/xxczaki/cash-cli"
  url "https://registry.npmjs.org/cash-cli/-/cash-cli-4.0.0.tgz"
  sha256 "c8b1d437305bc4c492cb9b85bb1b91edb5cc74fa91bd007616746c6258dae6c5"

  bottle do
    cellar :any_skip_relocation
    sha256 "c78661062dbc6e913d0f69f45af80af1f9967e50fe1eca86a95337ab16fac7ea" => :mojave
    sha256 "6b8215de6daf01c61e48bd46465be7ad9b400d4ec5ab514f5167bee787d6fa48" => :high_sierra
    sha256 "5941317cef9b92097c4b45df1e94b7b8d08e708d9813508ab3f42f55068541d3" => :sierra
  end

  depends_on "node"

  def install
    system "npm", "install", *Language::Node.std_npm_install_args(libexec)
    bin.install_symlink Dir["#{libexec}/bin/*"]
  end

  test do
    assert_match "Conversion of USD 100", shell_output("#{bin}/cash 100 USD PLN CHF")
  end
end

bottle部分应在自定义公式中删除。

最后,维护一个水龙头并从该水龙头安装您的公式。


推荐阅读