#36619: Vendor eslint configuration dependencies to permit pre-commit usage
without
npm install
-------------------------------------+-------------------------------------
Reporter: Jacob Walls | Owner: Jacob
Type: | Walls
Cleanup/optimization | Status: assigned
Component: Core (Other) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Jacob Walls):
* has_patch: 0 => 1
Old description:
> 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.
New description:
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.
--
Comment:
[https://github.com/django/django/pull/19899 PR]
--
Ticket URL: <https://code.djangoproject.com/ticket/36619#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/django-updates/01070199799f0fb4-952482df-119e-4705-9f19-18a95b1cc3b8-000000%40eu-central-1.amazonses.com.