Skip to content

Commit 9a03029

Browse files
committed
Add support for PNPM for installation commands
1 parent 30dc220 commit 9a03029

File tree

6 files changed

+44
-5
lines changed

6 files changed

+44
-5
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 & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ ${missingPackagesRecommendation.message}
3232
}
3333

3434
function getInstallCommand(packageConfigs) {
35+
const hasPnpmLockfile = fs.existsSync('pnpm-lock.yaml');
3536
const hasYarnLockfile = fs.existsSync('yarn.lock');
36-
const hasNpmLockfile = fs.existsSync('package-lock.json');
3737
const packageInstallStrings = packageConfigs.map((packageConfig) => {
3838
const firstPackage = packageConfig[0];
3939

@@ -51,11 +51,15 @@ function getInstallCommand(packageConfigs) {
5151
return `${firstPackage.name}@${recommendedVersion}`;
5252
});
5353

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

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

6165
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)