W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
Node.js 和 npm 對包和模塊有非常具體的定義,很容易混淆。我們將在這里討論它們的定義以及他們之間的不同,并解釋為什么某些默認文件以它們的方式命名。
package.json
描述的一個文件或目錄。這可能以多種不同的方式發(fā)生!有關更多信息,請參閱下面的“什么是包??”。require()
加載任何文件或目錄。同樣,有幾種配置允許這種情況發(fā)生。有關詳細信息,請參閱下面的“什么是模塊?”?。包是以下任何一種:
package.json
文件描述的程序的文件夾<name>@<version>
。<name>@<tag>
latest
滿足(e)的標簽<name>
。git
?url, 當克隆時,結果為 (a).
注意到所有這些package
可能性,即使你從未將包發(fā)布到公共注冊表,你仍然可以從使用 npm 中獲得很多好處:
Git 網址可以采用以下形式:
git://github.com/user/project.git#commit-ish
git+ssh://user@hostname:project.git#commit-ish
git+http://user@hostname/project/blah.git#commit-ish
git+https://user@hostname/project/blah.git#commit-ish
commit-ish
可以是任何標簽,sha,或分支可以作為參數(shù)被供給git checkout
。默認值為master
.
模塊是可以require()
在 Node.js 程序中加載的任何東西。以下是可以作為模塊加載的所有示例:
package.json
包包含main
字段的文件的文件夾。index.js
文件。通常,在 Node.js 程序中使用的 npm 包通過 加載require
,使它們成為模塊。然而,沒有要求 npm 包是一個模塊!
一些包,例如cli
包,只包含一個可執(zhí)行的命令行界面,不提供main
在 Node.js 程序中使用的字段。這些包不是模塊。
幾乎所有的 npm 包(至少,那些是 Node 程序的包)?都包含許多模塊(因為它們加載的每個文件?require()
都是一個模塊)。
在 Node 程序的上下文中,module
也是從文件加載的東西。例如,在以下程序中:
var req = require('request')
我們可能會說“變量req
是指request
模塊”。
那么,為什么是node_modules
文件夾和package.json
文件?為什么不是node_packages
或者module.json
?
package.json
文件定義了包。(參見上面的?“什么是包??”)
node_modules
文件夾是 Node.js 查找模塊的地方。(參見上面的“什么是模塊?”)
例如,如果你在node_modules/foo.js
創(chuàng)建一個文件,然后有一個執(zhí)行var f = require('foo.js')
的程序,它將加載該模塊。但是,foo.js
在這種情況下不是“包”,因為它沒有 package.json
。
或者,如果你創(chuàng)建的包在文件中沒有?index.js
或"main"
字段package.json
,則它不是模塊。即使它安裝在 中node_modules
,也不能成為require()
.node_modules
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: