Skip to content

Commit 8fa4471

Browse files
committed
Add support for PNPM for installation commands
1 parent 30dc220 commit 8fa4471

File tree

6 files changed

+44
-4
lines changed

6 files changed

+44
-4
lines changed

fixtures/package-helper/pnpm-yarn-npm/package-lock.json

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

fixtures/package-helper/pnpm-yarn-npm/pnpm-lock.yaml

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2+
# yarn lockfile v1

fixtures/package-helper/pnpm/pnpm-lock.yaml

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/package-helper.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ ${missingPackagesRecommendation.message}
3232
}
3333

3434
function getInstallCommand(packageConfigs) {
35+
const hasPnpmLockfile = fs.existsSync('pnpm-lock.yaml');
3536
const hasYarnLockfile = fs.existsSync('yarn.lock');
3637
const hasNpmLockfile = fs.existsSync('package-lock.json');
3738
const packageInstallStrings = packageConfigs.map((packageConfig) => {
@@ -51,11 +52,15 @@ function getInstallCommand(packageConfigs) {
5152
return `${firstPackage.name}@${recommendedVersion}`;
5253
});
5354

54-
if (hasNpmLockfile && !hasYarnLockfile) {
55-
return chalk.yellow(`npm install ${packageInstallStrings.join(' ')} --save-dev`);
55+
if (hasPnpmLockfile) {
56+
return chalk.yellow(`pnpm add ${packageInstallStrings.join(' ')} --save-dev`);
5657
}
5758

58-
return chalk.yellow(`yarn add ${packageInstallStrings.join(' ')} --dev`);
59+
if (hasYarnLockfile) {
60+
return chalk.yellow(`yarn add ${packageInstallStrings.join(' ')} --dev`);
61+
}
62+
63+
return chalk.yellow(`npm install ${packageInstallStrings.join(' ')} --save-dev`);
5964
}
6065

6166
function isPackageInstalled(packageConfig) {

test/package-helper.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ describe('package-helper', () => {
2929
const packageRecommendations = packageHelper.getMissingPackageRecommendations([
3030
{ name: 'foo' }, { name: 'webpack' }, { name: 'bar' }
3131
]);
32-
expect(packageRecommendations.installCommand).to.contain('yarn add foo bar');
32+
expect(packageRecommendations.installCommand).to.contain('npm install foo bar');
3333
expect(stripAnsi(packageRecommendations.message)).to.contain('foo & bar');
3434
});
3535

@@ -51,6 +51,15 @@ describe('package-helper', () => {
5151
expect(stripAnsi(packageRecommendations.message)).to.contain('foo & bar');
5252
});
5353

54+
it('missing packages with pnpm-lock.yaml only', () => {
55+
process.chdir(path.join(__dirname, '../fixtures/package-helper/pnpm'));
56+
const packageRecommendations = packageHelper.getMissingPackageRecommendations([
57+
{ name: 'foo' }, { name: 'webpack' }, { name: 'bar' }
58+
]);
59+
expect(packageRecommendations.installCommand).to.contain('pnpm add foo bar');
60+
expect(stripAnsi(packageRecommendations.message)).to.contain('foo & bar');
61+
});
62+
5463
it('missing packages with both package-lock.json and yarn.lock', () => {
5564
process.chdir(path.join(__dirname, '../fixtures/package-helper/yarn-npm'));
5665
const packageRecommendations = packageHelper.getMissingPackageRecommendations([
@@ -60,6 +69,15 @@ describe('package-helper', () => {
6069
expect(stripAnsi(packageRecommendations.message)).to.contain('foo & bar');
6170
});
6271

72+
it('missing packages with package-lock.json, yarn.lock and pnpm-lock.yaml', () => {
73+
process.chdir(path.join(__dirname, '../fixtures/package-helper/pnpm-yarn-npm'));
74+
const packageRecommendations = packageHelper.getMissingPackageRecommendations([
75+
{ name: 'foo' }, { name: 'webpack' }, { name: 'bar' }
76+
]);
77+
expect(packageRecommendations.installCommand).to.contain('pnpm add foo bar');
78+
expect(stripAnsi(packageRecommendations.message)).to.contain('foo & bar');
79+
});
80+
6381
it('missing packages with alternative packages', () => {
6482
process.chdir(path.join(__dirname, '../fixtures/package-helper/yarn'));
6583
const packageRecommendations = packageHelper.getMissingPackageRecommendations([

0 commit comments

Comments
 (0)