NPM全局安装"找不到模块"

Men*_*ual 193 node.js npm

我写了一个模块,我刚刚发布到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)
Run Code Online (Sandbox Code Playgroud)

但是,我在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"
  }
}
Run Code Online (Sandbox Code Playgroud)

有谁知道怎么做才能让这个运行?我知道它与bin部分有关,将可执行文件添加到bin并且该目录中的node_modules为空.不知道如何解决这个问题.

Nee*_*eek 354

对于遇到此问题的其他人,由于我npm安装到不在我身上的位置,我遇到了这个问题NODE_PATH.

[root@uberneek ~]# which npm
/opt/bin/npm
[root@uberneek ~]# which node
/opt/bin/node
[root@uberneek ~]# echo $NODE_PATH
Run Code Online (Sandbox Code Playgroud)

我的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]
Run Code Online (Sandbox Code Playgroud)

我的脚本失败了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)
Run Code Online (Sandbox Code Playgroud)

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

export NODE_PATH=/opt/lib/node_modules
Run Code Online (Sandbox Code Playgroud)

require('promised-io/promise')现在成功了.

  • 对于OSX Lion,以下为我工作... export NODE_PATH =/usr/local/lib/node_modules我使用'locate node_modules'来追踪正确的路径. (13认同)
  • 在哪里设置这个NODE_PATH ?? (10认同)
  • 设置NODE_PATH环境变量的@sandy取决于您的操作系统.我正在使用Linux的一种风格,因此我使用`export NODE_PATH = ...`在本地shell中设置它,以便将其导出到在该shell中运行的命令.要使更改持久化或对所有shell可用,请将其放在.profile或类似的中.整个概念对于新手而言非常复杂,请阅读https://help.ubuntu.com/community/EnvironmentVariables.对于Windows,您需要切换到Linux.开玩笑吧.试试http://www.computerhope.com/issues/ch000549.htm或谷歌吧. (7认同)
  • 如果您在Mac OS X上使用Homebrew安装Node.js:在终端中运行`open -a TextEdit~/.bash_profile`,然后将`export NODE_PATH =/usr/local/lib/node_modules`添加到文件末尾.重启终端窗口.现在运行`echo $ NODE_PATH`应该打印出`/ usr/local/lib/node_modules`. (4认同)
  • NODE_PATH也适用于WINDOWS.这根源于节点模块可以在本地和全局安装. (2认同)
  • 太好了!这完美地运作了!对于我的设置 - OSX 10.10 - 我更新了我的〜/ .bash_profile并为全局节点模块导出添加了#correct path NODE_PATH =/usr/local/lib/node_modules /然后你可以用'source~/.bash_profile'重新加载你的个人资料一切都应该工作正常! (2认同)

小智 35

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

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

  • 有什么办法以非特定的方式做到这一点? (4认同)

ran*_*ess 15

默认情况下,节点不会在/ 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.(正如加载模块节点的链接中所解释的那样,将在此路径中搜索并将起作用)


小智 10

对于一些人(像我一样)没有其他工作,试试这个:

brew cleanup
brew link node
brew uninstall node
brew install node
Run Code Online (Sandbox Code Playgroud)

希望它可以帮助别人:)


use*_*139 8

我得到了"乐观主义"模块错误,我只是做了"npm install"来解决它.过了那个错误.

https://github.com/mbloch/mapshaper/issues/12


xam*_*mir 5

我有这个问题request-promise。就我而言,替换为:

npm install request-promise --global
Run Code Online (Sandbox Code Playgroud)

npm install request-promise --cli
Run Code Online (Sandbox Code Playgroud)

工作(来源

另外,尝试设置环境变量

NODE_PATH=%AppData%\npm\node_modules
Run Code Online (Sandbox Code Playgroud)