You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
syncpack format orders dependencies differently than npm does, so package.json can easily become "unformatted" every time you install a new package (npm likes to re-sort things). This is most noticeable if a dependency begins with a number (e.g. 5to6-codemod); syncpack will sort it before any scoped deps (presumably because of this), whereas npm puts scoped deps first (since it uses localeCompare when sorting).
Basic repro:
npm i 5to6-codemod @babel/register
Note that @babel/register appears before5to6-codemod in package.json
npx syncpack format
Note that @babel/register now appears after5to6-codemod
npm i @babel/types
Note that @babel/* again appears before5to6-codemod
npx syncpack lint fails linting
While you can mostly work around this by running syncpack format in a pre-commit hook, this isn't always feasible (e.g. if you have automated processes that are updating packages ... in that case those also need to explicitly run syncpack format)
Suggested Solution
syncpack should sort dependencies the same way that npm does (using a localeCompare-based sort, rather than a vanilla sort)
The text was updated successfully, but these errors were encountered:
jenseng
changed the title
syncpack format orders dependencies differently than npm doessyncpack format orders dependencies differently than npm does
Apr 18, 2024
Description
syncpack format
orders dependencies differently than npm does, so package.json can easily become "unformatted" every time you install a new package (npm likes to re-sort things). This is most noticeable if a dependency begins with a number (e.g.5to6-codemod
); syncpack will sort it before any scoped deps (presumably because of this), whereas npm puts scoped deps first (since it useslocaleCompare
when sorting).Basic repro:
npm i 5to6-codemod @babel/register
@babel/register
appears before5to6-codemod
in package.jsonnpx syncpack format
@babel/register
now appears after5to6-codemod
npm i @babel/types
@babel/*
again appears before5to6-codemod
npx syncpack lint
fails lintingWhile you can mostly work around this by running
syncpack format
in a pre-commit hook, this isn't always feasible (e.g. if you have automated processes that are updating packages ... in that case those also need to explicitly runsyncpack format
)Suggested Solution
syncpack
should sort dependencies the same way that npm does (using alocaleCompare
-based sort, rather than a vanilla sort)The text was updated successfully, but these errors were encountered: