簡體   English   中英

如何修復 NPM 模塊的“sh:___:找不到命令”

[英]How to fix `sh: ___: command not found` for NPM Modules

我對 Node 開發比較陌生,我正在嘗試各種模塊、框架等。我在 macOS Catalina 上。 我在嘗試讓事情正常工作時更改了我的 NPM 根目錄和 $PATH ,我想我弄壞了一些東西,盡管我不確定是什么。 我的問題特別針對 NPM,它在本地和全局運行已安裝的模塊時一直存在問題。 當我嘗試安裝像 Nodemon 這樣的開發工具或像 Electron 這樣的框架時,我收到如下錯誤代碼:

sh: electron: command not found
npm ERR! code ELIFECYCLE
npm ERR! syscall spawn
npm ERR! file sh
npm ERR! errno ENOENT
npm ERR! electron-quick-start@1.0.0 start: `electron .`
npm ERR! spawn ENOENT
npm ERR! 
npm ERR! Failed at the electron-quick-start@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

我在這個網站上查閱了很多資源和很多問題,但我沒有足夠的經驗來准確地解決這個問題並確定發生了什么。 當我在黑暗中拍攝時,我可能會修復一件事並破壞另一件事,所以我來這里看看我是否能得到一個全面的答案。

我會補充一點,我找到了一些解決方法,如果這能讓問題更清楚的話。 我可以通過將此“開發”腳本添加到 package.json 來運行一些模塊(在此示例中為 Nodemon):

"scripts": {
    "dev": "node ./node_modules/.bin/nodemon server.js"
  }

所以我可以通過指定模塊的路徑來訪問本地項目模塊,但我不能只說“nodemon server.js”,無論是在開發腳本中還是從命令行中,它應該已經全局安裝。 如果我查看指定的npm -g root文件夾,我嘗試運行的包肯定在那里,所以這不是安裝問題。

非常感謝你們的任何指導,因為我不知道該怎么做。

npm 有 2 種安裝方式,本地和全局。
強烈建議不要在同一環境中混合使用兩者,至少對於給定的模塊是這樣。

全局安裝

例如npm install -g <module name>

您已安裝的模塊提供的可執行文件將添加到PATH環境變量包含的位置。
然后,您可以在任何地方使用此命令(此處electronnodemon ),但您不能為環境中的每個項目使用不同的版本。 您可以使用nvm或在容器中更好地隔離此行為。

本地安裝

例如npm install --save <module name>

可執行文件將安裝到項目node_modules目錄中並保存在package.json中。
然后,您可以為每個項目使用不同版本的模塊,並使用package.json輕松管理它。
PATH環境變量不包括在那里,因此您必須使用./node_modules/.bin/<command> ,就像您在解決方法中所做的那樣,或$(npm bin)/<command>
即使是本地安裝,您也可以使用 npm-scripts 中模塊提供的任何命令,因為npmnpm run-script命令之前將./node_modules/.bin添加到PATH中。

另請參閱: https://docs.npmjs.com/cli/v7/commands/npm-run-script

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM