#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.

Reply via email to