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
版權宣告:本文為博主原創文章,轉載請附上博文連結!