From c062429dddebf52f1cf218b190d00a3a34d2f7d1 Mon Sep 17 00:00:00 2001 From: Dustin Rodrigues Date: Wed, 4 Nov 2020 21:33:06 -0500 Subject: [PATCH 1/3] language/node: remove unneeded scripts prior to installation --- Library/Homebrew/language/node.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Library/Homebrew/language/node.rb b/Library/Homebrew/language/node.rb index ee1780fbae..29e2038671 100644 --- a/Library/Homebrew/language/node.rb +++ b/Library/Homebrew/language/node.rb @@ -16,6 +16,17 @@ module Language # fed to `npm install` only symlinks are created linking back to that # directory, consequently breaking that assumption. We require a tarball # because npm install creates a "real" installation when fed a tarball. + if (package = Pathname("package.json")) && package.exist? + begin + pkg_json = JSON.parse(package.read) + rescue JSON::ParserError + $stderr.puts "Could not parse package.json" + raise + end + prepare_removed = pkg_json["scripts"]&.delete("prepare") + prepack_removed = pkg_json["scripts"]&.delete("prepack") + package.atomic_write(JSON.pretty_generate(pkg_json)) if prepare_removed || prepack_removed + end output = Utils.popen_read("npm pack --ignore-scripts") raise "npm failed to pack #{Dir.pwd}" if !$CHILD_STATUS.exitstatus.zero? || output.lines.empty? From 027419effe57b424eb76ca2151e7effa26e33c8c Mon Sep 17 00:00:00 2001 From: Dustin Rodrigues Date: Thu, 5 Nov 2020 21:12:41 -0500 Subject: [PATCH 2/3] test/language/node: add test for prepare/prepack removal --- Library/Homebrew/test/language/node_spec.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Library/Homebrew/test/language/node_spec.rb b/Library/Homebrew/test/language/node_spec.rb index c339a9e84e..0785f105a9 100644 --- a/Library/Homebrew/test/language/node_spec.rb +++ b/Library/Homebrew/test/language/node_spec.rb @@ -24,6 +24,20 @@ describe Language::Node do end end + describe "#std_pack_for_installation" do + npm_pack_cmd = "npm pack --ignore-scripts" + + it "removes prepare and prepack scripts" do + path = Pathname("package.json") + path.atomic_write("{\"scripts\":{\"prepare\": \"ls\", \"prepack\": \"ls\", \"test\": \"ls\"}}") + allow(Utils).to receive(:popen_read).with(npm_pack_cmd).and_return(`echo pack.tgz`) + subject.pack_for_installation + expect(path.read).not_to include("prepare") + expect(path.read).not_to include("prepack") + expect(path.read).to include("test") + end + end + describe "#std_npm_install_args" do npm_install_arg = Pathname("libexec") npm_pack_cmd = "npm pack --ignore-scripts" From f9a15e74438afd4ee6b1d5de4c053edf7b9b2c1e Mon Sep 17 00:00:00 2001 From: Dustin Rodrigues Date: Fri, 6 Nov 2020 06:40:50 -0500 Subject: [PATCH 3/3] Update Library/Homebrew/language/node.rb Co-authored-by: Mike McQuaid --- Library/Homebrew/language/node.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/language/node.rb b/Library/Homebrew/language/node.rb index 29e2038671..e30c9ba744 100644 --- a/Library/Homebrew/language/node.rb +++ b/Library/Homebrew/language/node.rb @@ -20,7 +20,7 @@ module Language begin pkg_json = JSON.parse(package.read) rescue JSON::ParserError - $stderr.puts "Could not parse package.json" + opoo "Could not parse package.json!" raise end prepare_removed = pkg_json["scripts"]&.delete("prepare")