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