三分鐘複習一下,Node.js是如何尋找模塊的

前端工程師一般都會使用到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 其實也會按照帶路徑的引用那樣,按照三個步驟尋找:

  1. 尋找 ​jquery.js
  2. 尋找 ​jquery/package.json 以及其中的 ​main 字段
  3. 尋找 ​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


分享到:


相關文章: