我写了一个模块,我刚才将其发布到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)
但是,我在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。
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:
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'):
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)
我可能使用的源安装了node和npm configure --prefix=/opt。我不知道为什么这使他们无法找到已安装的模块。现在的解决方法是将NODE_PATH指向正确的目录:
configure --prefix=/opt
export NODE_PATH=/opt/lib/node_modules
我require('promised-io/promise')现在成功了。