npm installでのパッケージインストールが上手くいかないときにやったことメモ

2021/9/27

(最終更新: 2022/4/02

はじめに

今回の記事の目的

npm installをいつもどおり実行したところ下記のエラーが出た。 解決するまでに実施したことを紹介する。

同じエラーが起きた人の参考になれば幸いです。

発生事象

APIで値を取得するHTTP クライアントaxiosをインストールしたくて、npm install axiosを実行したところエラーとなった。

実行コマンド:

$ npm install axios

The operation was rejected by your operating system.「あなたのOSから拒否されました」と言われてしまった。

npm WARN deprecated @hapi/bourne@1.3.2: This version has been deprecated and is no longer supported or maintained
npm WARN deprecated @hapi/hoek@8.5.1: This version has been deprecated and is no longer supported or maintained
npm WARN deprecated @hapi/address@2.1.4: Moved to 'npm install @sideway/address'
npm WARN deprecated @hapi/topo@3.1.6: This version has been deprecated and is no longer supported or maintained
npm WARN deprecated sane@4.1.0: some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated querystring@0.2.0: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
npm WARN deprecated core-js@2.6.12: core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.
npm WARN deprecated fsevents@1.2.13: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
npm WARN deprecated @types/anymatch@3.0.0: This is a stub types definition. anymatch provides its own type definitions, so you do not need this installed.
npm WARN deprecated flatten@1.0.3: flatten is deprecated in favor of utility frameworks such as lodash.
npm WARN deprecated babel-eslint@10.1.0: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.
npm WARN deprecated querystring@0.2.1: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
npm WARN deprecated chokidar@2.1.8: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated rollup-plugin-babel@4.4.0: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-babel.
npm WARN deprecated @hapi/joi@15.1.1: Switch to 'npm install joi'
npm WARN rm not removing /app/node_modules/.bin/jest as it wasn't installed by /app/node_modules/jest
npm WARN rm not removing /app/node_modules/.bin/rimraf as it wasn't installed by /app/node_modules/rimraf
npm WARN rm not removing /app/node_modules/.bin/uuid as it wasn't installed by /app/node_modules/uuid
npm WARN rm not removing /app/node_modules/.bin/semver as it wasn't installed by /app/node_modules/semver
npm WARN rm not removing /app/node_modules/.bin/mkdirp as it wasn't installed by /app/node_modules/mkdirp
npm WARN rm not removing /app/node_modules/.bin/json5 as it wasn't installed by /app/node_modules/json5
npm WARN rollback Rolling back param-case@3.0.4 failed (this is probably harmless): ETXTBSY: text file is busy, rmdir '/app/node_modules/param-case/node_modules'
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^2.1.2 (node_modules/jest-haste-map/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.7 (node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^2.1.2 (node_modules/jest-haste-map/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^2.1.3 (node_modules/react-scripts/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.7 (node_modules/watchpack-chokidar2/node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.7 (node_modules/webpack-dev-server/node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.15.4 requires a peer of @babel/core@^7.13.0 but none is installed. You must install peer dependencies yourself.

npm ERR! code EPERM
npm ERR! syscall rename
npm ERR! path /app/node_modules/param-case
npm ERR! dest /app/node_modules/.param-case.DELETE
npm ERR! errno -1
npm ERR! Error: EPERM: operation not permitted, rename '/app/node_modules/param-case' -> '/app/node_modules/.param-case.DELETE'
npm ERR!  [OperationalError: EPERM: operation not permitted, rename '/app/node_modules/param-case' -> '/app/node_modules/.param-case.DELETE'] {
npm ERR!   cause: [Error: EPERM: operation not permitted, rename '/app/node_modules/param-case' -> '/app/node_modules/.param-case.DELETE'] {
npm ERR!     errno: -1,
npm ERR!     code: 'EPERM',
npm ERR!     syscall: 'rename',
npm ERR!     path: '/app/node_modules/param-case',
npm ERR!     dest: '/app/node_modules/.param-case.DELETE'
npm ERR!   },
npm ERR!   errno: -1,
npm ERR!   code: 'EPERM',
npm ERR!   syscall: 'rename',
npm ERR!   path: '/app/node_modules/param-case',
npm ERR!   dest: '/app/node_modules/.param-case.DELETE',
npm ERR!   parent: 'app'
npm ERR! }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/node/.npm/_logs/2021-09-27T08_36_43_225Z-debug.log

解決策

最終的に実施しうまくいったのは

  • node_modulesyarn.lockの削除
  • npmではなくyarnでインストールする

の2点。

node_modulesの削除

node_modulesフォルダを削除。

$ rm -rf node_modules/

yarn.lockの削除

yarn.lockファイルも削除。

$ rm yarn.lock

yarn.lockとは

そもそもyarnとは、npmの後継となるパッケージマネージャ。

create-react-appのコマンドでプロジェクトを作ると、yarnがインストールされている場合、npmではなくyarnを利用する前提で初期設定がなされる。

yarn.lockファイルは、パッケージのバージョンを管理するためのlockファイル。

lockファイルは 「依存関係まで含めて、実際にどのバージョンがインストールされているか」 を管理します。それぞれのライブラリのversionの項目がそれにあたります。 パッケージマネージャーは基本的に、lockファイルがあればそちらの記載に従うので、lockファイルを共有することで 「誰がインストールしても同じバージョンがインストールされる」 ことを担保することができます。 参考:[【npm,yarn】今さら聞けないlockファイル](https://zenn.dev/nekoniki/articles/ec5bb4d16ef20a)

ロックファイルとして、yarnを利用する場合はyarn.lockを、npmを利用する場合はpackage-lock.jsonをlockファイルとして利用する。

npm installとyarn addの両方を使っていると、どちらか片方を使った方がよいといった旨の警告が出ます。 なぜかというとnpmはpackage-lock.jsonを、yarnはyarn.lockを参照するため、人によっては異なったバージョンがインストールされる可能性があるからです。
参考: 【npm,yarn】今さら聞けないlockファイル

nodeの再インストール

yarnを使ってnodeを再インストールした。

$ yarn install

axiosのインストール

yarnを利用してインストール。

$ yarn add axios

axiosをインストールできた。

考察

過去のプロジェクトフォルダを確認すると、yarn.lockファイルではなくpackage-lock.jsonが配置されていた。 今のプロジェクトだけはyarn.lockが配置されていたので、yarnでのインストールが必要だったと思われる。

過去のプロジェクトの違いで思い当たるのは、過去プロジェクトでは create-react-appコマンドでプロジェクトを作成していたが、今のプロジェクトはTypeScriptを利用するため--template typescriptオプションを追加したこと。

追記:権限不足の可能性もあり

※2022/4/7追記

移行前のブログにて、以下のコメントをいただきました。

今更ではあるので原因見つかったかと思いますが… Permittedされてないということなので権限不足っぽいですね。 同様のエラーが出てた時はroot権限で実行すると出来ました。

私はroot権限で試しても解決しなかった記憶がありますが、人によっては権限が原因の可能性もあると思うので、試してみてください。

おわりに

根本原因は不明な点も多いが、今後はnpmを使っているのかyarnを使っているのか意識することにする。

参考記事

package-lock.jsonについて調べたので別記事にまとめました。

https://tomiko0404.hatenablog.com/entry/2021/10/07/package-json



個別連絡はこちらへ→Twitterお問い合わせ

プロフィール

プロフィールイメージ

はち子

事業会社のシステム部門に異動して5年目の会社員。システム企画/要件定義/システムアーキテクチャ等。

Twitter→@bun_sugi

過去の記事について

はてなブログに掲載の記事(主にプログラミングメモ)についてはこちらに掲載しております。(本ブログに移行中)

タグ一覧

関連記事

Copyright© 2023, エンジニアを目指す日常ブログ

お問い合わせ|プライバシーポリシー