天天看點

Node.js Cannot find module 'mysql'

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 目錄下,如下圖

(執行指令)

Node.js Cannot find module 'mysql'
Node.js Cannot find module 'mysql'

(檔案位置)

Node.js Cannot find module 'mysql'
Node.js Cannot find module 'mysql'

2.在nodejs的安裝目錄下執行 :npm install mysql  ,那麼‘mysql’ 子產品就會安裝到下面的node_modules 中

Node.js Cannot find module 'mysql'
Node.js Cannot find module 'mysql'

3.在工程代碼中執行指令:npm install mysql ,那麼‘mysql’ 子產品就會安裝到下面的node_modules (沒有此檔案會自動生成一個)中。

(如下node_modules就是我工程中module的位置,其餘檔案都是各種工程的代碼。)

Node.js Cannot find module 'mysql'
Node.js Cannot find module 'mysql'

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'

繼續閱讀