NPM全局安装“无法找到模块”;

我写了一个模块,不久前发布到npm (https://npmjs.org/package/wisp)

所以它可以从命令行安装:

$ npm i -g wisp

然而,当我从命令行运行它时,我一直得到一个错误,乐观主义者没有安装:

$ 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)

但是,我已经在包中指定了。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为空有关。不知道怎么解决。

348370 次浏览

对于其他遇到这个问题的人,我遇到这个问题是因为我的npm安装到一个不在我的NODE_PATH上的位置。

[root@uberneek ~]# which npm
/opt/bin/npm
[root@uberneek ~]# which node
/opt/bin/node
[root@uberneek ~]# echo $NODE_PATH

我的NODE_PATH是空的,运行npm install --global --verbose promised-io显示它正在安装到/opt/lib/node_modules/promised-io:

[root@uberneek ~]# npm install --global --verbose promised-io
npm info it worked if it ends with ok
npm verb cli [ '/opt/bin/node',
npm verb cli   '/opt/bin/npm',
npm verb cli   'install',
npm verb cli   '--global',
npm verb cli   '--verbose',
npm verb cli   'promised-io' ]
npm info using npm@1.1.45
npm info using node@v0.8.4
[cut]
npm info build /opt/lib/node_modules/promised-io
npm verb from cache /opt/lib/node_modules/promised-io/package.json
npm verb linkStuff [ true, '/opt/lib/node_modules', true, '/opt/lib/node_modules' ]
[cut]

我的脚本在require('promised-io/promise')上失败:

[neek@uberneek project]$ node buildscripts/stringsmerge.js


module.js:340
throw err;
^
Error: Cannot find module 'promised-io/promise'
at Function.Module._resolveFilename (module.js:338:15)

我可能使用configure --prefix=/opt从源代码安装node和npm。我不知道为什么这使得他们无法找到已安装的模块。现在的修复是将NODE_PATH指向正确的目录:

export NODE_PATH=/opt/lib/node_modules

我的require('promised-io/promise')现在成功了。

默认情况下,node不会在/usr/local/lib/node_module中加载全局模块。 参考http://nodejs.org/api/modules.html#modules_loading_from_the_global_folders

中解释的模块加载 所以要么你必须 1)将“/usr/local/lib/node_module”添加到“NODE_PATH”并导出 或 2)将已安装的节点模块复制到/usr/local/lib/node。 (如加载模块节点的链接中所解释的那样,将在此路径中搜索并工作)

将此添加到prog(mac)的开头:

module.paths.push('/usr/local/lib/node_modules');

我得到了“乐观”模块错误,我只是做了“npm安装”来解决它。跳过了这个错误。

https://github.com/mbloch/mapshaper/issues/12 < a href = " https://github.com/mbloch/mapshaper/issues/12 " > < / >

root下运行Ubuntu的一个测试服务器上有相同的问题。然后使用useradd -m myuser安装所有 (nvmnode, packages)作为myuser创建一个新用户。现在工作得很好。

对于一些(像我一样)其他方法都不起作用的人来说,试试这个:

brew cleanup
brew link node
brew uninstall node
brew install node

希望它能帮助到别人:)

在windows上,如果你只是做了一个干净的安装,你需要吹掉你的npm缓存在\AppData\Roaming

对于Windows,从Nodejs无法在Windows上找到已安装的模块?对我有用的是运行npm link

npm link wisp
在我的例子中,nodenpm都在相同的路径(/usr/bin)。NODE_PATH是空的,所以npm将全局模块放入/usr/lib/node_modules中,而require(...)成功地找到了它们。 唯一的例外是npm模块,它随nodejs包一起提供。由于我使用的是64位系统,所以它被放置在/usr/lib64/node_modules中。这不是require(…)在空NODE_PATH和从/usr/bin开始的节点的情况下搜索的地方。所以我有两个选项:

  • 链接/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。

$ vim /etc/profile.d/nodejs.sh

export NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript

我用简单的方法做到了这一点……

  1. 从控制面板卸载节点[Windows 7]
  2. 重新安装节点
  3. <李>安装量角器 npm install --global --verbose protractor < br > 更新web驱动管理器

对我来说没问题。

希望这对你有帮助....

下面的通用修复将适用于任何模块。例如,request-promise.

替换< / p >
npm install request-promise --global

npm install request-promise --cli

working (),也适用于globalsinherits

另外,尝试设置环境变量

NODE_PATH=%AppData%\npm\node_modules

我有与OP相同的错误,但通过挖掘日志,我可以看到sh: node: command not found

原来/usr/bin/node程序(符号链接)不再使用apt install nodejs安装。一旦符号链接/usr/bin/node' tonodejs,npm install -g @angular/cli '成功。

在debian上安装它的正确方法是apt install nodejs-legacy

我得到了这个错误Error: Cannot find module 'number-is-nan',而模块实际存在。这是由于一个糟糕的/不完整的Node.js安装。

对于Windows,正如其他答案所暗示的那样,你需要一个干净的节点安装:

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

注意:

在重新安装Node.js之前尝试最后几点,它可以节省你一些时间,并避免重新安装所有的包。

对于Mac用户的It's Best使用手动安装:

为了尽量减少权限错误的机会,您可以将npm配置为 使用不同的目录。在本例中,它将是一个隐藏的

.

.
  1. 开始之前备份你的电脑。

  2. 为全局安装创建一个目录:

    mkdir ~ / .npm-global < / p >

  3. 配置npm使用新的目录路径:

    设置NPM前缀'~/.npm-global'

    . >
  4. 打开或创建~/。配置文件,并添加这一行:

    导出路径= ~ / .npm-global / bin: $路径< / p >

  5. 返回命令行,更新系统变量:

    源~ / . profile < / p >

  6. Test:在不使用sudo的情况下全局下载包。

    NPM install -g jshint

代替步骤2-4,您可以使用相应的ENV变量(例如。 如果你不想修改~/.profile):

NPM_CONFIG_PREFIX=~/.npm-global

参考:https://docs.npmjs.com/getting-started/fixing-npm-permissions

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

我刚刚遇到了axios模块的这个问题。 然后我尝试了这个:运行rm -rf node_modulesyarn

面对同样的问题,并通过在我的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

高山/集装箱化

正如在其他地方提到的,解决方案是在你的图像中烘焙,

NODE_PATH=/usr/local/lib/node_modules/

我还在上游用npm apk打开了一个问题,所以设置了这个