Cannot find module 'mysql' 不只是‘mysql’,Cannot find module 'express' 等也是同样的道理。
在使用nodejs的时候,难免会引用别人写的模块,就像在写java代码必须要引用第三方jar包一样。
而在引用的时候,可以通过npm获取,这时如果执行执行命令的位置不正确就会造成 Cannot find module 'mysql' 的错误。
执行命令的位置不同会造成module的安装位置的不同,因为命令中不带-g ,是会安装到当前路径下的:
(1和2都是错误安装位置,3位正确安装位置,原因在最后)
1.在任意位置执行命令 : npm install mysql -g 那么此module会出现在 C:\Users\SMouse\AppData\Roaming\npm\node-modules 目录下,如下图
(执行命令)
(文件位置)
2.在nodejs的安装目录下执行 :npm install mysql ,那么‘mysql’ 模块就会安装到下面的node_modules 中
3.在工程代码中执行命令:npm install mysql ,那么‘mysql’ 模块就会安装到下面的node_modules (没有此文件会自动生成一个)中。
mysql目录下有一个 mysql.js 的测试代码如下:
var mysql = require('mysql');
解释:
起初我以为要把所有的module 都放在nodejs安装目录下的 node_modules 中。如果工程代码(指自己写的工程)也放在这,那么是可以使用的,但是如果nodejs安装在D盘,而工程代码在E盘,那么这个模块是引用不到的。 C:\Users\SMouse\AppData\Roaming\npm\node-modules路径也是同理。
node中引用自定义模块(非核心模块)时会进行如下三个步骤
1.路径分析
2.文件定位
3.编译执行
而路径分析是安如下方式进行的:
1)当前目录下的node_modules目录,
2)父目录下的node_modules目录;
3)父目录的父目录下的node_modules目录;
4)逐级递归,直到根目录下的node_modules目录。
如果这些目录中均未找到代码中所引用的module,那么就会报出错误:Cannot find module 'mysql'