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)

但是,我已经在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是空的。 不知道如何解决这个问题。


对于遇到此问题的其他人,由于将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')现在成功了。


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

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


默认情况下,节点不会查看/ 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。 (正如加载模块节点的链接中所述,将在此路径中进行搜索并将工作)

链接地址: http://www.djcxy.com/p/65821.html

上一篇: NPM global install "cannot find module"

下一篇: Ember 2 best practices