﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
36619	Vendor eslint configuration dependencies to permit pre-commit usage without npm install	Jacob Walls	Jacob Walls	"The pre-commit hook for eslint has been broken for over a year. Noticed contributors at the DCUS 2025 sprints stumbling on this.

Eventually, [https://forum.djangoproject.com/t/adding-a-formatter-for-css-js we may be looking at another JS formatter], like Biome. Today, I'm interested in just fixing the hook.

More context is [https://github.com/django/django/pull/18162 here], but in essence, the v9 eslint flat config format assumes you're a javascript project in the habit of running `npm install`. We're not; we only run `npm install` to run the `js_tests`.

We can either document that `npm install` is necessary to run `pre-commit` (and consider that objectors might prefer to remove the hook altogether instead of tolerating that), or we can write a [https://github.com/django/django/pull/18162#issuecomment-2146012490 local hook] that fiddles with symlinks, or as I'm suggesting, just vendor the rule configuration and global definitions.

Sarah also suggested vendoring them [https://github.com/django/django/pull/18162#discussion_r1598527382 here].
----
On vendoring:
eslint exports `@js/recommended` and `@js/all` specifically so that `@js/all` can iterate faster with every minor release; so vendoring `@js/recommended` doesn't seem horrible -- it's supposed to be stable.

Vendoring the globals creates a larger file, but there is various tweaking we can do there, like weighing whether it's better or mysterious to just vendor the constants we need (`""browser""` and `""commonjs""`).

Vendoring isn't ideal, but I think it makes sense for us given that most contributors rarely need to run the `js_tests`.

From [https://eslint.org/blog/2022/08/new-config-system-part-2/#goodbye-environments%2C-hello-globals eslint blog]:
> all that was left was for environments to manage global variables ... so we are handing this responsibility back to you."	Cleanup/optimization	closed	Core (Other)	dev	Normal	fixed			Ready for checkin	1	0	0	0	0	0
