1. ホーム
  2. node.js

[解決済み] npm install errors with Error: ENOENT, chmod

2022-03-07 12:49:20

質問

公開したばかりのnpmモジュールをグローバルにインストールしようとしています。インストールしようとすると、npmからもフォルダからも、毎回このエラーが出ます。

npm ERR! Error: ENOENT, chmod '/usr/local/lib/node_modules/takeapeek/lib/cmd.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <[email protected]>

npm ERR! System Linux 3.8.0-19-generic
npm ERR! command "node" "/usr/local/bin/npm" "install" "-g" "takeapeek"
npm ERR! cwd /home/giodamlio
npm ERR! node -v v0.10.6
npm ERR! npm -v 1.3.6
npm ERR! path /usr/local/lib/node_modules/takeapeek/lib/cmd.js
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/giodamlio/npm-debug.log
npm ERR! not ok code 0

私はsudoを使用しており、パッケージ内のすべてのものを3回チェックしました。私はいくつかの検索を行い、いくつかの類似したケースを見たが、どれも解決されていない。以下は私が試したことです。

  • npmのアップグレード ( sudo npm install -g npm )
  • グローバルなnpmキャッシュをクリアする ( sudo npm cache clear )
  • ユーザーのnpmキャッシュをクリアする ( npm cache clear )

私は、エラーがパスにリンクしているファイルに関係していることに気づきました。特に、npmがchmodを行おうとしたときに起こりました。これは問題ないはずで、私の lib/cli.js は通常のパーミッションを持ち、今回のインストールではnpmがスーパーユーザーパーミッションを持ちます。

npmのドキュメントを掘り下げた結果、npmがbinリンクを作成しないようにするオプションを見つけました( --no-bin-links をインストールしたところ、正常に動作しました。

で、どうなんだ?これは、ある 奇妙なフリンジケースバグ まだ解決していないのでしょうか?

編集部:参考までに。 ここで は、私がアップロードしたモジュール

解決方法は?

OK、どうやらNPMはあなたの .gitignore をベースとして .npmignore ファイルを無視するため /lib . もし、空白の .npmignore ファイルをアプリケーションのルートに置くと、すべてがうまくいくはずです。

より良い、より明示的な方法は、disallow-list ではなく allow-list を使用し、package.json の "files" フィールドでパッケージ内のファイルを指定することです。

[編集] - この動作についての詳細はこちら。 https://docs.npmjs.com/cli/v7/using-npm/developers#keeping-files-out-of-your-package