0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

`pnpm update` は `package.json` 中の `node-semver` を更新してしまうことがある

Last updated at Posted at 2025-05-24

pnpm updatepackage.json 中の node-semver を更新してしまうことがある

pnpm update | pnpm

.npmrc 回避方法はあるのかもしれないが、そういう前提で利用するということで、検証結果を記録しておく.

  • 本記事中に登場するパッケージは架空のものであり、出力例は一部適当な内容である
  • 様々なパターンの node-semver で検証した訳では無い

検証環境

$ node --version
v22.14.0
$ npm --version
10.9.2
$ pnpm --version
10.11.0

インストール済みのバージョンよりも新しいものが公開されている

$ npm info @scope/name

@scope/name@0.10.0 | MIT | deps: none | versions: 6
Package description
https://example.com/scope/name

keywords: nodejs, typescript

dist
.tarball: https://registry.npmjs.org/@scope/name/-/name-0.10.0.tgz
.shasum: 9e68b22e560cdaa486addf40bcac038459e29243
.integrity: sha512-LYvwQb1t6/42EPDrmBkuQ/vVw8nlEPaZdHyeLq5M2XCKDZ8PmxEkEPJDzfRrxFaDPo3RT/1hYmQd0pmTi6Ejqg==
.unpackedSize: 6.2 kB

maintainers:
- foo <foo@example.com>

dist-tags:
latest: 0.10.0

published 48 minutes ago by foo <foo@example.com>

package.json 中の指定内容

$ grep '@scope/name' packages/a/package.json packages/b/package.json 
packages/a/package.json:    "@scope/name": "~0"
packages/b/package.json:    "@scope/name": "~0.9"

インストール済みのもの

$ pnpm --filter "./packages/**" list --recursive # pnpm
Legend: production dependency, optional only, dev only

a@0.0.1 /path/to/repo-root/packages/a

dependencies:
@scope/name 0.9.0

b@0.1.0-beta /path/to/repo-root/packages/b

dependencies:
@scope/name 0.9.0

pnpm update

今回は --recursive --interactive を付与して実行。付与しなくても最終的な結果は変わらない。

$ pnpm update --recursive --interactive # pnpm         
Scope: all 3 workspace projects
? Choose which packages to update (Press <space> to select, <a> to toggle all, <i> to invert selection)❯ ○ dependencies
    ○ Package                                                    Current   Target            Workspace   URL 
    ○ @scope/name                                              0.9.0 ❯ 0.10.0            a               

更新

$ pnpm update --recursive --interactive # pnpm         
Scope: all 3 workspace projects
✔ Choose which packages to update (Press <space> to select, <a> to toggle all, <i> to invert selection) · @scope/name
.                                        |   +1 +
Progress: resolved 39, reused 39, downloaded 0, added 0, done
Done in 41.8s using pnpm v10.11.0

更新後の状態

パッケージは想定通り更新されている.

$ pnpm --filter "./packages/**" list --recursive # pnpm
Legend: production dependency, optional only, dev only

a@0.0.1 /path/to/repo-root/packages/a

dependencies:
@scope/name 0.10.0

b@0.1.0-beta /path/to/repo-root/packages/b

dependencies:
@scope/name 0.9.0

この際 package.jsonnode-semver が変更される。

$ git diff -- packages/
diff --git a/packages/a/package.json b/packages/a/package.json
index 8c48a56..88ac0e5 100644
--- a/packages/a/package.json
+++ b/packages/a/package.json
@@ -13,7 +13,7 @@
   "license": "ISC",
   "description": "",
   "dependencies": {
-    "@scope/name": "~0"
+    "@scope/name": "~0.10.0"
   },
   "devDependencies": {
     "abbrev": "^3.0.1"
diff --git a/packages/b/package.json b/packages/b/package.json
index 7ac9935..8683f9f 100644
--- a/packages/b/package.json
+++ b/packages/b/package.json
@@ -12,6 +12,6 @@
   "license": "ISC",
   "description": "",
   "dependencies": {
-    "@scope/name": "~0.9"
+    "@scope/name": "~0.9.0"
   }
 }

なぜだろう?

Workspace | pnpm では "bar": "workspace:~","bar": "~1.5.0", として扱われると書いてある、そういうことなのかな?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?