NPM全局安装“找不到模块”

245

我刚刚编写了一个模块发布到npm上(https://npmjs.org/package/wisp)

在命令行中安装运行良好:

$ npm i -g wisp

但是,当我从命令行运行它时,一直出现一个错误,提示 optimist 未安装:

$ wisp 
Error: Cannot find module 'optimist'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:12:10)
    at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:96:4)
    at Module._compile (module.js:449:26)
    at Object.exports.run (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/coffee-script.js:68:25)
    at compileScript (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:135:29)
    at fs.stat.notSources.(anonymous function) (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:110:18)

然而,我已经在package.json文件中将其指定为依赖项:

{
  "name": "wisp",
  "author": "Brendan Scarvell <bscarvell@gmail.com>",
  "version": "0.1.0",
  "description": "Global nodejs file server",
  "dependencies": {
    "optimist": "~0.3.4"
  },
  "repository": "git://github.com/tehlulz/wisp",
  "bin": {
    "wisp" : "./wisp"
  }
}

有没有人知道如何使它运行?我知道和bin相关,需要将可执行文件添加到bin目录中,该目录下的node_modules为空。但是不知道如何解决。


如果您没有使用-g选项安装,会发生什么? - vinayr
它会在当前目录下安装一个node_modules文件夹,其中包含wisp。 - Menztrual
是的。如果我在本地运行 npm i wisp 后尝试运行 wisp,仍然返回相同的错误。 - Menztrual
这对我也很好用。但我想要在一个随机目录中,只需输入$ wisp即可进行全局安装(类似于Express的方式)。 - Menztrual
如果我执行 export PATH=$PATH:~/node_modules/wisp,那么对我来说是有效的。 - vinayr
显示剩余3条评论
19个回答

2
我遇到了axios模块的问题。我尝试了以下步骤:运行"rm -rf node_modules"和"yarn",然后问题得到解决。"最初的回答"

2

不过需要注意的是 - 我这样做后无法在 AWS Lambda 中使用我的压缩代码。我必须像 npm install wisp --save(不带 -g 选项)一样在本地创建 node_module。 - P M

2

我遇到了这个错误Error: Cannot find module 'number-is-nan',尽管该模块实际上存在。这是由于不完整/错误的Node.js安装引起的。

对于Windows系统,如其他答案建议的那样,您需要进行干净的Node安装

  • 卸载Node.js
  • 删除C:\Users\user\AppData\Roaming中的两个文件夹npmnpm_cache
  • 重启Windows并安装Node.js
  • 运行npm init或(npm init --yes用于默认配置)
  • 设置Windows环境变量NODE_PATH。此路径是您的包安装的位置。它可能类似于NODE_PATH = C:\Users\user\node_modules或C:\Users\user\AppData\Roaming\npm\node_modules
  • 启动新的cmd控制台,npm应该可以正常工作

注意:

在重新安装Node.js之前尝试最后一条建议,这可以节省您的时间并避免重新安装所有包。


1

在一个运行着Ubuntu的测试服务器上,我遇到了同样的问题,使用root用户。然后创建了一个新用户,使用useradd -m myuser命令,并且安装了一切nvmnode,包)作为myuser用户。现在一切正常。


1
在我的情况下,nodenpm都在同一个路径下(/usr/bin)。 NODE_PATH为空,因此npm将全局模块放置在/usr/lib/node_modules中,其中require(...)可以成功找到它们。 唯一的例外是npm模块,它随nodejs软件包一起提供。由于我使用的是64位系统,它被放置在/usr/lib64/node_modules中。这不是NODE_PATH为空且node从/usr/bin启动时require(...)搜索的位置。因此,我有两个选择:

  • /usr/lib64/node_modules/npm链接到/usr/lib/node_modules/npm
  • 将模块从/usr/lib/node_modules/*移动到/usr/lib64/node_modules/并设置NODE_PATH=/usr/lib64/node_modules

两者都可行。我使用的是OpenSUSE 42.1和来自更新存储库的nodejs软件包。版本为4.4.5。


0

遇到了同样的问题,通过在我的zshrc文件中添加以下行解决了它。 根据您的shell,您可以尝试在rc文件中添加,对于bash和zsh - bashrc/zshrc文件位于您的主目录位置。

export NODE_PATH="/usr/local/lib/node_modules"

要直接添加到zshrc文件中,请运行此命令

echo 'export NODE_PATH="/usr/local/lib/node_modules"' >> ~/.zshrc

0

我不得不将 C:\Users\{Username}\AppData\Roaming\npm 添加到我的环境变量中,然后我才能安装东西。


0

我遇到了与OP相同的错误,但是通过查看日志,我发现sh:node:command not found

事实证明,/usr/bin/node程序(符号链接)不再随apt install nodejs一起安装。一旦将/usr/bin/node符号链接到nodejsnpm install -g @angular/cli就成功了。

在Debian上正确的安装方式是apt install nodejs-legacy


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接