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

-- 
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/010701997998886e-12a7c579-1ae1-413f-a32e-edec7261bb0c-000000%40eu-central-1.amazonses.com.

Reply via email to