我写了一个模块,不久前发布到npm (https://npmjs.org/package/wisp)
所以它可以从命令行安装:
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为空有关。不知道怎么解决。
对于其他遇到这个问题的人,我有这个问题,因为我的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 promises -io显示它正在安装到/opt/lib/node_modules/ promises -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(' promises -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(' promises -io/promise')现在成功了。
我得到了这个错误:无法找到模块'number-is-nan',而模块实际存在。这是由于一个糟糕的/不完整的Node.js安装。
对于Windows,正如其他答案所建议的那样,你需要一个干净的Node安装:
卸载node . js
删除C:\Users\user\AppData\Roaming目录下的npm和npm_cache文件夹
重新启动Windows,安装Node.js
运行npm inititor (npm init——yes用于默认配置)
设置Windows环境变量“NODE_PATH”。此路径是安装包的位置。它可能是类似于enode_path = C:\Users\user\node_modules或C:\Users\user\ appdata \ roam \npm\node_modules
启动一个新的cmd控制台,npm应该可以正常工作
注意:
在重新安装Node.js之前尝试最后几点,它可以节省你一些时间,并避免重新安装所有的包。