1. 程式人生 > >Node.js Cannot find module 'mysql' 'express'

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

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 (沒有此檔案會自動生成一個)中。

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


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'


--------------------- 
作者:SMouse魚骨頭 
來源:CSDN 
原文:https://blog.csdn.net/fouglelove/article/details/52778021 
版權宣告:本文為博主原創文章,轉載請附上博文連結!