前端工程師一般都會使用到Node.js, 所以有必要了解一下,當我們寫下如下代碼時:
<code>const a = require('../src/a');
const $ = require('jquery');/<code>
Node.js是如何去尋找我們需要的模塊的。
通過 require 語句引入的模塊時,分為兩種:
- 帶有路徑的引入,如
- 相對路徑 const a = require('../src/a')
- 絕對路徑 const b = require('/root/module/b');
- 不帶路徑的引入,如
- const $ = require('jquery');
帶有路徑的引入,
假如我們在 /root/src/b.js 中寫下:
<code>const a = require('../src/a');/<code>
那麼Node.js會按照以下順序的尋找所需要的模塊:
- 尋找 ../src/a.js ,沒有的話,進入下一步;
- 進入 ../src/a 目錄下,尋找 ../src/a/package.json ,並檢查 package.json 中是否有 main 字段,如果有的話,就把 main 字段指示的文件當做最終尋找的模塊。如果發生下列情況:
- 沒找到 package.json
- package.json 沒有 main 字段
- main 字段指示的文件沒找到
就會進入下一步;
- 尋找 ../src/a/index.js ,如果這也沒找到,那就是尋找模塊失敗,報錯。
不帶路徑的引入
這種情況一般是安裝的第三方庫,如 jquery, lodash 。假如我們在 /root/src/b.js 中寫下:
<code>import $ from 'jquery';/<code>
Node.js 其實也會按照帶路徑的引用那樣,按照三個步驟尋找:
- 尋找 jquery.js
- 尋找 jquery/package.json 以及其中的 main 字段
- 尋找 jquery/index.js
只不過呢,因為我們沒有寫具體的路徑,Node.js會使用它自己默認的路徑: node_modules ,
具體尋找的路徑順序為:
- /root/src/node_modules
- /root/node_modules
- /node_modules
也就是現尋找這三項:
- /root/src/node_modules/jquery.js
- /root/src/node_modules/jquery/package.json
- /root/src/node_modules/jquery/package.js
如果沒找到,然後向上一級目錄的 node_modules 中繼續尋找
- /root/node_modules/jquery.js
- /root/node_modules/jquery/package.json
- /root/node_modules/jquery/package.js
這樣直到尋找到根目錄
- /node_modules/jquery.js
- /node_modules/jquery/package.json
- /node_modules/jquery/package.js
閱讀更多 一起學前端 的文章