From 30566198cb2d05201625f92b660a34c38ffe2dc7 Mon Sep 17 00:00:00 2001 From: anthony sottile Date: Mon, 10 Aug 2026 17:45:37 -0400 Subject: [PATCH 1/2] fix `language: node` for hooks with build scripts and npm 11.x --- pre_commit/languages/node.py | 5 ++++- tests/languages/node_test.py | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/pre_commit/languages/node.py b/pre_commit/languages/node.py index 304fdcdd8..17b7393ab 100644 --- a/pre_commit/languages/node.py +++ b/pre_commit/languages/node.py @@ -99,5 +99,8 @@ def install_environment( cmd_output_b(*cmd) with in_env(prefix, version): - install = ('npm', 'install', '--allow-git=root', '-g', *pkgs) + install = ( + 'npm', 'install', '--allow-git=root', '--install-links', '-g', + *pkgs, + ) lang_base.setup_cmd(prefix, install) diff --git a/tests/languages/node_test.py b/tests/languages/node_test.py index 0fb84a916..778501a69 100644 --- a/tests/languages/node_test.py +++ b/tests/languages/node_test.py @@ -158,6 +158,21 @@ def test_node_hook_versions(tmp_path, version): assert ret == (0, b'Hello World\n') +def test_npm_install_succeeds_with_build(tmp_path): + _make_hello_world(tmp_path) + + with open(tmp_path.joinpath('package.json')) as f: + contents = json.load(f) + contents['scripts'] = {'build': 'echo hello hello'} + with open(tmp_path.joinpath('package.json'), 'w') as f: + json.dump(contents, f) + _make_repo(tmp_path) + + # node version chosen to be npm 11.19.0 with this particular bug + ret = run_language(tmp_path, node, 'node-hello', version='26.7.0') + assert ret == (0, b'Hello World\n') + + def test_node_additional_deps(tmp_path): _make_local_repo(str(tmp_path)) ret, out = run_language(tmp_path, node, 'npm ls -g', deps=('lodash',)) From 9767b6c8211a6bf683875a0afcf2b390457a4b66 Mon Sep 17 00:00:00 2001 From: anthony sottile Date: Mon, 10 Aug 2026 18:06:52 -0400 Subject: [PATCH 2/2] v4.6.2 --- CHANGELOG.md | 10 ++++++++++ setup.cfg | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c31f6dbd6..dfd8a1e24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +4.6.2 - 2026-08-10 +================== + +### Fixes +- Fix `language: node` hooks that contain `"scripts": {"build": ...}` with + npm 11.x. + - Regressed in 4.6.1. + - #3737 issue by @mheiges. + - #3743 PR by @asottile. + 4.6.1 - 2026-07-21 ================== diff --git a/setup.cfg b/setup.cfg index 5d4ef5b2c..6113e6973 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 4.6.1 +version = 4.6.2 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown