Skip to content

Commit

Permalink
feat: add COREPACK_ENABLE_STRICT env variable (#167)
Browse files Browse the repository at this point in the history
  • Loading branch information
aduh95 authored Sep 1, 2022
1 parent 11d24f8 commit 92b52f6
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 2 deletions.
10 changes: 8 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,12 +111,18 @@ This command will retrieve the given package manager from the specified archive

## Environment Variables

- `COREPACK_ENABLE_NETWORK` can be set to `0` to prevent Corepack from accessing the network (in which case you'll be responsible for hydrating the package manager versions that will be required for the projects you'll run, using `corepack hydrate`).

- `COREPACK_DEFAULT_TO_LATEST` can be set to `0` in order to instruct Corepack
not to lookup on the remote registry for the latest version of the selected
package manager.

- `COREPACK_ENABLE_NETWORK` can be set to `0` to prevent Corepack from accessing
the network (in which case you'll be responsible for hydrating the package
manager versions that will be required for the projects you'll run, using
`corepack hydrate`).

- `COREPACK_ENABLE_STRICT` can be set to `0` to prevent Corepack from checking
if the package manager corresponds to the one defined for the current project.

- `COREPACK_HOME` can be set in order to define where Corepack should install
the package managers. By default it is set to `%LOCALAPPDATA%\node\corepack`
on Windows, and to `$HOME/.cache/node/corepack` everywhere else.
Expand Down
2 changes: 2 additions & 0 deletions sources/specUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ export async function findProjectSpec(initialCwd: string, locator: Locator, {tra
// A locator is a valid descriptor (but not the other way around)
const fallbackLocator = {name: locator.name, range: locator.reference};

if (process.env.COREPACK_ENABLE_STRICT === `0`) return fallbackLocator;

while (true) {
const result = await loadSpec(initialCwd);

Expand Down
28 changes: 28 additions & 0 deletions tests/main.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,34 @@ it(`should allow to call "prepare" without arguments within a configured project
});
});

it(`should refuse to run a different package manager within a configured project`, async () => {
await xfs.mktempPromise(async cwd => {
await xfs.writeJsonPromise(ppath.join(cwd, `package.json` as Filename), {
packageManager: `[email protected]`,
});

process.env.FORCE_COLOR = `0`;

await expect(runCli(cwd, [`pnpm`, `--version`])).resolves.toMatchObject({
stdout: `Usage Error: This project is configured to use yarn\n\n$ pnpm ...\n`,
exitCode: 1,
});

// Disable strict checking to workaround the UsageError.
process.env.COREPACK_ENABLE_STRICT = `0`;

try {
await expect(runCli(cwd, [`pnpm`, `--version`])).resolves.toMatchObject({
stdout: `${config.definitions.pnpm.default.split(`+`, 1)[0]}\n`,
exitCode: 0,
});
} finally {
delete process.env.COREPACK_ENABLE_STRICT;
delete process.env.FORCE_COLOR;
}
});
});

it(`should allow to call "prepare" with --all to prepare all package managers`, async () => {
await xfs.mktempPromise(async cwd => {
await xfs.writeJsonPromise(ppath.join(cwd, `package.json` as Filename), {
Expand Down

0 comments on commit 92b52f6

Please sign in to comment.