From 83f0c5c7d293c551b605fba562fb2ade55556444 Mon Sep 17 00:00:00 2001 From: Case Taintor Date: Thu, 20 Jun 2024 20:11:30 +0200 Subject: [PATCH] Updates the node formula example to properly use the installed node version The existing example uses a symlink which means that whatever `node` is first in the PATH will be used. This can mean that a Homebrew-installed nodejs executable may not work reliably (since it may execute with a different version of node) This PR changes it so that using the Homebrew-installed `node` will be used. It also includes common other options (like shell completion) as well as the old symlink solution. --- docs/Node-for-Formula-Authors.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/Node-for-Formula-Authors.md b/docs/Node-for-Formula-Authors.md index 9a709135d9a75c..e0f70c12c8a99b 100644 --- a/docs/Node-for-Formula-Authors.md +++ b/docs/Node-for-Formula-Authors.md @@ -102,7 +102,17 @@ class Foo < Formula def install system "npm", "install", *Language::Node.std_npm_install_args(libexec) - bin.install_symlink Dir["#{libexec}/bin/*"] + + # "link" the executable `foo`, ensuring that the version of node installed by Homebrew is used + # (the created `foo` will set the ENV before exec'ing your executable) + env = { PATH: "#{HOMEBREW_PREFIX/"bin"}:$PATH" } + (bin/"foo").write_env_script "#{libexec}/bin/foo", env + + # Uncomment if you simply want to symlink the executable – note that this means the first `node` on the PATH will be used + # bin.install_symlink Dir["#{libexec}/bin/*"] + + # Uncomment if you want to write the completion scripts for bash, fish, and zsh (assuming your executable has a command "completion" which returns a completion script) + # generate_completions_from_executable(libexec/"bin/foo", "completion", base_name: 'foo') end test do