【问题标题】:How to fix `sh: ___: command not found` for NPM Modules如何修复 NPM 模块的 `sh: ___: command not found`
【发布时间】:2020-05-20 19:37:22
【问题描述】:

我对 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.

我在这个网站上查阅了很多资源和很多问题,但是我没有足够的经验来准确地解决这个问题并确定发生了什么。当我在黑暗中拍摄时,我可能会修复一件事并破坏另一件事,所以我来这里看看我是否能得到一个全面的答案。

我会补充一点,我已经找到了一些解决方法,如果这能让问题更清楚的话。我可以通过将此“dev”脚本添加到 package.json 来运行一些模块(在此示例中为 Nodemon):

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

所以我可以通过指定模块的路径来访问本地项目模块,但我不能只在开发脚本或命令行中说“nodemon server.js”,它应该已经全局安装.如果我查看指定的npm -g root 文件夹,我尝试运行的包肯定在其中,所以这不是安装问题。

非常感谢你们的任何指导,因为我不知道该怎么做。

【问题讨论】:

  • 如果有人知道这一点,请查看。
  • 仍在检查中。

标签: node.js npm npm-install


【解决方案1】:

在 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

【讨论】:

    猜你喜欢
    • 2019-09-14
    • 2020-01-28
    • 2020-09-26
    • 1970-01-01
    • 2016-02-24
    • 2011-12-18
    • 2015-09-04
    • 2018-05-30
    • 2021-07-19
    相关资源
    最近更新 更多