Skip to content

Commit 93a69cb

Browse files
committed
server: check pnpm version(require pnpm@9 or later)
1 parent 023a931 commit 93a69cb

File tree

2 files changed

+16
-15
lines changed

2 files changed

+16
-15
lines changed

server/nodejs.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ import (
1717

1818
const (
1919
nodejsMinVersion = 22
20-
nodeTypesVersion = "20.12.12"
20+
pnpmMinVersion = "9.0.0"
21+
nodeTypesVersion = "20.14.4"
2122
)
2223

2324
var nodejsInternalModules = map[string]bool{
@@ -109,7 +110,7 @@ func checkNodejs(installDir string) (nodeVersion string, pnpmVersion string, err
109110
}
110111

111112
pnpmOutput, err := run("pnpm", "-v")
112-
if err != nil && errors.Is(err, exec.ErrNotFound) {
113+
if (err != nil && errors.Is(err, exec.ErrNotFound)) || (err == nil && semverLessThan(strings.TrimSpace(string(pnpmOutput)), pnpmMinVersion)) {
113114
_, err = run("npm", "install", "pnpm", "-g")
114115
if err != nil {
115116
return

server/npm.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -457,29 +457,29 @@ do:
457457
}
458458

459459
func (rc *NpmRC) installPackage(pkg Pkg) (err error) {
460-
dir := path.Join(rc.Dir(), pkg.Fullname())
461-
lock := getInstallLock(dir)
460+
installDir := path.Join(rc.Dir(), pkg.Fullname())
462461

463-
// only one install process allowed at the same time
462+
// only one installation process allowed at the same time for the same package
463+
lock := getInstallLock(installDir)
464464
lock.Lock()
465465
defer lock.Unlock()
466466

467467
// skip installation if the pnpm-lock file exists
468-
if existsFile(path.Join(dir, "pnpm-lock.yaml")) && existsFile(path.Join(dir, "node_modules", pkg.Name, "package.json")) {
468+
if existsFile(path.Join(installDir, "pnpm-lock.yaml")) && existsFile(path.Join(installDir, "node_modules", pkg.Name, "package.json")) {
469469
return nil
470470
}
471471

472472
// create '.npmrc' file
473-
err = rc.createDotNpmRcFile(dir)
473+
err = rc.createDotNpmRcFile(installDir)
474474
if err != nil {
475475
err = fmt.Errorf("failed to create .npmrc file: %v", err)
476476
return
477477
}
478478

479479
// ensure 'package.json' file to prevent read up-levels
480-
packageJsonFp := path.Join(dir, "package.json")
480+
packageJsonFp := path.Join(installDir, "package.json")
481481
if !existsFile(packageJsonFp) {
482-
ensureDir(dir)
482+
ensureDir(installDir)
483483
err = os.WriteFile(packageJsonFp, []byte("{}"), 0644)
484484
}
485485
if err != nil {
@@ -491,12 +491,12 @@ func (rc *NpmRC) installPackage(pkg Pkg) (err error) {
491491
if pkg.FromGithub {
492492
err = os.WriteFile(packageJsonFp, []byte(fmt.Sprintf(`{"dependencies":{"%s":"github:%s#%s"}}`, pkg.Name, pkg.Name, pkg.Version)), 0644)
493493
if err == nil {
494-
err = rc.pnpm(dir)
494+
err = rc.pnpm(installDir)
495495
}
496496
// pnpm will ignore github package which has been installed without `package.json` file
497497
// so we install it manually
498498
if err == nil {
499-
packageJsonFp := path.Join(dir, "node_modules", pkg.Name, "package.json")
499+
packageJsonFp := path.Join(installDir, "node_modules", pkg.Name, "package.json")
500500
if !existsFile(packageJsonFp) {
501501
ensureDir(path.Dir(packageJsonFp))
502502
err = os.WriteFile(packageJsonFp, mustEncodeJSON(pkg), 0644)
@@ -505,16 +505,16 @@ func (rc *NpmRC) installPackage(pkg Pkg) (err error) {
505505
err = parseJSONFile(packageJsonFp, &p)
506506
if err == nil && len(p.Files) > 0 {
507507
// install github package with ignoring `files` field
508-
err = ghInstall(dir, pkg.Name, pkg.Version)
508+
err = ghInstall(installDir, pkg.Name, pkg.Version)
509509
}
510510
}
511511
}
512512
} else if regexpFullVersion.MatchString(pkg.Version) {
513-
err = rc.pnpm(dir, pkg.Fullname(), "--prefer-offline")
513+
err = rc.pnpm(installDir, pkg.Fullname(), "--prefer-offline")
514514
} else {
515-
err = rc.pnpm(dir, pkg.Fullname())
515+
err = rc.pnpm(installDir, pkg.Fullname())
516516
}
517-
packageJsonFp := path.Join(dir, "node_modules", pkg.Name, "package.json")
517+
packageJsonFp := path.Join(installDir, "node_modules", pkg.Name, "package.json")
518518
if err == nil && !existsFile(packageJsonFp) {
519519
err = fmt.Errorf("pnpm install %s: package.json not found", pkg)
520520
}

0 commit comments

Comments
 (0)