Skip to content

Commit 442a974

Browse files
Sahilb315Copilot
andauthored
Fix npm global flag usage (#166)
* fix global flag usage * add comment * Update packagemanager/npm_test.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Sahil Bansal <bansalsahil315@gmail.com> * Update packagemanager/npm_test.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Sahil Bansal <bansalsahil315@gmail.com> --------- Signed-off-by: Sahil Bansal <bansalsahil315@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 6074080 commit 442a974

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

packagemanager/npm.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ func (npm *npmPackageManager) ParseCommand(args []string) (*ParsedCommand, error
121121
flagSet.StringArrayVarP(&devPackages, "dev", "D", nil, "Install dev packages")
122122
}
123123

124+
// Known only to prevent UnknownFlags mode from swallowing the next package arg.
125+
flagSet.BoolP("global", "g", false, "Install packages globally")
126+
124127
err := flagSet.Parse(installArgs)
125128
if err != nil {
126129
return &ParsedCommand{Command: command}, nil

packagemanager/npm_test.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,41 @@ func TestNpmParseCommand(t *testing.T) {
136136
assert.Equal(t, false, parsedCommand.IsManifestInstall) // with no package name, npm won’t add or install anything new
137137
},
138138
},
139+
{
140+
name: "npm install with global flag with single package",
141+
command: "npm install -g prettier",
142+
assert: func(t *testing.T, parsedCommand *ParsedCommand, err error) {
143+
assert.NoError(t, err)
144+
assert.Equal(t, 1, len(parsedCommand.InstallTargets))
145+
assert.Equal(t, false, parsedCommand.IsManifestInstall)
146+
assert.Equal(t, "prettier", parsedCommand.InstallTargets[0].PackageVersion.Package.Name)
147+
},
148+
},
149+
{
150+
name: "npm install with global flag with multiple packages",
151+
command: "npm install -g prettier eslint",
152+
assert: func(t *testing.T, parsedCommand *ParsedCommand, err error) {
153+
assert.NoError(t, err)
154+
assert.Equal(t, 2, len(parsedCommand.InstallTargets))
155+
assert.Equal(t, false, parsedCommand.IsManifestInstall)
156+
assert.Equal(t, "prettier", parsedCommand.InstallTargets[0].PackageVersion.Package.Name)
157+
assert.Equal(t, "eslint", parsedCommand.InstallTargets[1].PackageVersion.Package.Name)
158+
},
159+
},
160+
{
161+
name: "npm install with global and dev flags with multiple packages",
162+
command: "npm install -g --save-dev prettier eslint",
163+
assert: func(t *testing.T, parsedCommand *ParsedCommand, err error) {
164+
assert.NoError(t, err)
165+
assert.Equal(t, 2, len(parsedCommand.InstallTargets))
166+
assert.Equal(t, false, parsedCommand.IsManifestInstall)
167+
var pkgs []string
168+
for _, target := range parsedCommand.InstallTargets {
169+
pkgs = append(pkgs, target.PackageVersion.Package.Name)
170+
}
171+
assert.ElementsMatch(t, []string{"prettier", "eslint"}, pkgs)
172+
},
173+
},
139174
}
140175

141176
for _, tc := range cases {

0 commit comments

Comments
 (0)