一node_modules文件詳解:包實際上是一個存檔文件,即一個目錄直接打包為.zip或tar.gz格式的文件,安裝后解壓還原為目錄。完全符合CommonJS規范的包目錄應該包含如下這些文件
1、package.json:包描述文件
2、bin:用於存放可執行二進制文件的目錄
3、lib:用於存放JavaScript代碼的目錄
4、doc:用於存放文檔的目錄
5、test:用於存放單元測試用例的代碼
二 package.json文件:定義了項目所需要的各種模塊,以及項目的配置信息(比如名稱、版本、許可證等元數據)NodeJS中的包
package.json文件可以手工編寫,也可以使用npm init
命令自動生成。[注意]npm init -y表示在安裝過程中回答的都是yes,會自動生成如下所示的package.json文件。所有配置項中,只有項目名稱(name)和項目版本(version)是必填的,其他都是選填的。
基本字段:package.json API
1、name——包名。規范定義它需要由小寫的字母和數字組成,可以包含.、_和-,但不允許出現空格。包名必須是唯一的,以免對外公布時產生重名沖突的誤解。除此之外,NPM還建議不要在包名中附帶上node或js來重復標識它是JavaScript或Node模塊
2、version——版本號。一個語義化的版本號,這在http://semver.org/上有詳細定義,通常為major.minor.revision格式。該版本號十分重要,常常用於一些版本控制的場合
[注意]對於nodejs來說,版本號的小數位代表為這個版本的穩定性,偶數位為穩定版本(0.6.x、0.8.x……),奇數位為非穩定版本(0.7.x、0.9.x……)。一般地,開發時要使用最新的穩定版本
必須字段:CommonJS為package.json文件定義了包括name和version在內的10個必需的字段。但由於CommonJS包規范尚處於草案階段,NPM在實踐中做了一定的取舍
1、description——包簡介。方便別人了解該模塊作用,搜索的時候也有用
2、keywords——關鍵詞數組,NPM中主要用來做分類搜索。一個好的關鍵詞數組有利於用戶快速找到該包
[注意]livereload插件並沒有設置keywords屬性
3、maintainers——包維護者列表。每個維護者由name、email和web這3個屬性組成
[注意]livereload插件並沒有設置maintainers中的web屬性
4、contributors——貢獻者列表。在開源社區中,為開源項目提供代碼是經常出現的事情,如果名字能出現在知名項目的contributors列表中,是一件比較有榮譽感的事。列表中的第一個貢獻應當是包的作者本人。它的格式與維護者列表相同
可選字段:
scripts——腳本說明對象。它主要被包管理器用來安裝、編譯、測試和卸載包。scripts
指定了運行腳本命令的npm命令行縮寫,比如start指定了運行npm run start
時,所要執行的命令。script腳本解讀
其他字段:
- author——包作者
- bin——指定各個內部命令對應的可執行文件的位置。一些包作者希望包可以作為命令行工具使用。配置好bin字段后,通過npm install package_name -g命令可以將腳本添加到執行路徑中,之后可以在命令行中直接執行。通過-g命令安裝的模塊包稱為全局模式
- main——加載的入口文件。模塊引入方法require()在引入包時,會優先檢查這個字段,並將其作為包中其余模塊的入口。如果不存在這個字段,require()方法會查找包目錄下的index.js、index.node、index.json文件作為默認入口
- devDependencies——項目開發所需要的模塊。一些模塊只在開發時需要依賴。配置這個屬性,可以提示包的后續開發者安裝依賴包。類比於dependencies字段
三 npm 包發布:
Node.js 要求 ES6 模塊采用.mjs
后綴文件名。也就是說,只要腳本文件里面使用import
或者export
命令,那么就必須采用.mjs
后綴名。Node.js 遇到.mjs
文件,就認為它是 ES6 模塊,
總結:.mjs
文件總是以 ES6 模塊加載,.cjs
文件總是以 CommonJS 模塊加載,.js
文件的加載取決於package.json
里面type
字段的設置。