#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 django-updates+unsubscr...@googlegroups.com.
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