Closed Tatsh closed 1 month ago
That's not a bug, and that's not something I think we should add complexity to support.
As a workaround, I made a simple plugin to run prettier
after all installed:
import { cwd as cwdFunc, stdout, stdin, stderr } from 'process';
import { Configuration, Hooks, Project, scriptUtils } from '@yarnpkg/core';
import { getPluginConfiguration } from '@yarnpkg/cli';
import { PortablePath } from '@yarnpkg/fslib';
// The documentation says to use `const plugin: Plugin = {...}; export.default = plugin` but this
// does not work. Explicit `module.exports` does.
module.exports = {
factory: (): { hooks: Hooks } => ({
hooks: {
afterAllInstalled(project: Project): void {
void (async () => {
const cwd = cwdFunc() as PortablePath;
const configuration = await Configuration.find(cwd, getPluginConfiguration());
const { locator } = await Project.find(configuration, cwd);
const packageAccessibleBinaries = await scriptUtils.getPackageAccessibleBinaries(
locator,
{
project,
},
);
if (!packageAccessibleBinaries.get('prettier')) {
throw new Error('Prettier not found.');
}
const ret = await scriptUtils.executePackageAccessibleBinary(
locator,
'prettier',
['--log-level', 'error', '-w', 'package.json', '.yarnrc.yml'],
{ cwd, packageAccessibleBinaries, project, stderr, stdin, stdout },
);
if (ret !== 0) {
throw new Error(`Prettier returned non-zero: {ret}.`);
}
})();
},
},
}),
name: 'plugin-prettier-after-all-installed',
};
The reason for this is because I have a hook in pre-commit to check that yarn.lock
is valid against package.json
. The formatting done by Yarn leads to a false positive.
repos:
- hooks:
- entry: yarn install --check-cache --immutable
files: ^package\.json$
id: yarn-check-lock
language: system
name: check yarn.lock is up-to-date
pass_filenames: false
Self-service
Describe the bug
package.json
is formatted unexpectedly when there are no changes to be applied to the file duringyarn install
. Yes--immutable
does stop the formatting but sometimes I want to get the changes and then re-formatpackage.json
after.install
should not format anything unless the file content is actually changed.To reproduce
Add the following to
package.json
:package.json
at path.eslint.rules["@typescript-eslint/no-magic-numbers"][1].ignore
is now formatted with one number per line in the list.Environment
Additional context
No response