package.json中的type字段含義—— node官方翻譯

package.json的“type”字段

如果最近的package.json文件包含一個頂級字段“type”,其值爲“module”,則以.js結尾或沒有任何擴展名的文件將作爲ES模塊進行加載。

最近的package.json被定義爲第一個在當前文件夾、該文件夾的父文件夾等中搜索時發現的package.json,直到到達卷的根目錄。

// package.json
{
  "type": "module"
}

在上述package.json所在的文件夾
node --experimental-modules my-app.js #my-app.js將作爲ES模塊運行

如果最近的package.json缺少“type”字段,或者包含“type”:“commonjs”,則無擴展名的文件和.js結尾文件將被視爲commonjs。如果一直到卷根,還是沒找到package.json, Node.js則按默認規則運行,就像package.json中沒有“type”字段。“無擴展”指的是不包含擴展名的文件路徑,而不是在說明符中選擇性地刪除文件擴展名。

如果最近的父package.json包含“type”:“module”,則.js結尾的文件和和無擴展文件的導入語句將被視爲ES模塊。

// my-app.js, part of the same example as above
import './startup.js'; // Loaded as ES module because of package.json

包的作者應該在package.json中指明“type”字段,即使在所有源都是CommonJS的包中也是如此。如果Node.js的默認類型發生了變化,那麼明確包的類型將使包在將來不會受到影響,而且它還使構建工具和加載程序更容易確定包中的文件應該如何解釋。

不管“type”字段的值是多少,.mjs文件總是被當作ES模塊,而.cjs文件總是被當作CommonJS。

總結

總的來說,關於type,知道下面4點就行了:

  1. type字段的產生用於定義package.json文件和該文件所在目錄根目錄中.js文件和無拓展名文件的處理方式。值爲'moduel'則當作es模塊處理;值爲'commonjs'則被當作commonJs模塊處理
  2. 目前node默認的是如果pacakage.json沒有定義type字段,則按照commonJs規範處理
  3. node官方建議包的開發者明確指定package.jsontype字段的值
  4. 無論package.json中的type字段爲何值,.mjs的文件都按照es模塊來處理,.cjs的文件都按照commonJs模塊來處理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章