#36619: Vendor eslint configuration dependencies to permit pre-commit usage without
npm install
-------------------------------------+-------------------------------------
Reporter: Jacob | Owner: Jacob Walls
Walls |
Type: | Status: assigned
Cleanup/optimization |
Component: Core | Version: dev
(Other) |
Severity: Normal | Keywords:
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
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
interesting 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.
--
Ticket URL: <
https://code.djangoproject.com/ticket/36619>
Django <
https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.