红联Linux门户
Linux帮助

npm安装全局模块require时报Error: Cannot find module 'XXX'

发布时间:2017-04-17 15:12:05来源:linux网站作者:喵弟
系统环境:centos
使用npm安装“cheerio”,想搞爬虫玩玩。
npm安装有两种模式:
本地 # npm install cheerio
全局 # npm install cheerio -g
 
如果想要全局安装,你首先要先设置个全局路径
我在"node的安装位置/lib/node_modules/"目录下新建了文件夹node_global专门用来存放新安装的全局包
# npm config set cache "node的安装位置/lib/node_modules/node_global"
# npm config set prefix "node的安装位置/lib/node_modules/node_global"
这个时候可以安装了
# npm install cheerio -g
 
安装好之后,赶紧打开node,试着require刚安装的全局包
var n = require('cheerio')
Error: Cannot find module 'cheerio'
at Function.Module._resolveFilename (module.js:469:15)
at Function.Module._load (module.js:417:25)
失败了!
 
网上查了一大堆文章,原来是忘了设置环境变量。
NODE_PATH
关键的地方来了:
NODE_PATH怎么写?
不要误以为就是你的刚设置的全局目录,我那样填写了。完全没用。
实际上你可以通过下面这个命令查看一下cheerio到底在哪里。然后NODE_PATH就设置哪里
#npm list -g
 
我的系统显示如下:
/usr/node-v6.10.0-linux-x64/lib/node_modules/node_global/lib
├─┬ cheerio@0.22.0
│ ├─┬ css-select@1.2.0
│ │ ├── boolbase@1.0.0
│ │ ├── css-what@2.1.0
│ │ ├── domutils@1.5.1
│ │ └── nth-check@1.0.1
│ ├─┬ dom-serializer@0.1.0
│ │ └── domelementtype@1.1.3
│ ├── entities@1.1.1
│ ├─┬ htmlparser2@3.9.2
│ │ ├── domelementtype@1.3.0
│ │ ├── domhandler@2.3.0
│ │ ├── inherits@2.0.3
 
我是这样配置的:
# vim /etc/profile
#添加下面三行
export NODE_HOME=/usr/node-v6.10.0-linux-x64/lib/node_modules/node_global  #这是全局包的主目录
export NODE_PATH=$NODE_HOME:$NODE_HOME/lib/node_modules  #这是全局包lib库文件目录
export PATH=$NODE_HOME/bin:$PATH  #这是全局包bin可执行文件的目录,不写这一行express会报“Express Command not found” 
保存退出
别忘了
# source /etc/profile 使其生效
 
再次测试require
[root@aliyun node-v6.10.0-linux-x64]#node
> var n = require('cheerio')
undefined
>
 
不再报错了!
 
本文永久更新地址:http://www.linuxdiyf.com/linux/30086.html