本文轉(zhuǎn)自我的博客閱讀原文。
CommonJs規(guī)范
一覽
module代表當(dāng)前的模塊两疚,而module上的exports屬性是這個(gè)模塊對(duì)外暴露對(duì)象的接口床估。require其實(shí)就是導(dǎo)入某個(gè)模塊的exports屬性
/* 導(dǎo)出模塊 */
module.exports = {}
/* 導(dǎo)入模塊 */
const xx = require('xx')
特點(diǎn)
- 模塊可以多次加載,但是只會(huì)在第一次加載時(shí)運(yùn)行一次诱渤,然后運(yùn)行結(jié)果就被緩存了丐巫,以后再加載,就直接讀取緩存結(jié)果。要想讓模塊再次運(yùn)行递胧,必須清除緩存
- 模塊加載的順序碑韵,按照其在代碼中出現(xiàn)的順序(這也是我們一般將導(dǎo)入模塊的操作放到最頂部的原因)
module.exports與exports
為了方便,Node為每個(gè)模塊提供一個(gè)exports變量缎脾,指向module.exports祝闻。等同在每個(gè)模塊頭部,有一行這樣的命令:var exports = module.exports
遗菠。
這樣就有兩個(gè)值得我們注意的點(diǎn)了:
- 我們可以在exports變量上添加屬性联喘,但是不能直接給exports變量賦值
/* 正確做法 */
exports.exp = function() {}
/* 錯(cuò)誤的做法 */
exports = function exp() {}
- 在給exports添加屬性后不能給module.exports重新賦值
exports.exp = function() {}
// 實(shí)際對(duì)外輸出的就是module.exports屬性,這樣就切斷了module.exports與exports的聯(lián)系
module.exports = 'Hello world'
require
require的常規(guī)用法這里就不再多說了辙纬,這里只說以前忽略的點(diǎn)豁遭。
目錄加載規(guī)則:有些時(shí)候,我們?cè)趓equire的參數(shù)中只寫目錄而不寫文件名牲平。在沒有特殊指定的情況下堤框,node會(huì)加載該目錄下的index.js或是index.node文件。當(dāng)然我們也可以指定目錄與文件名:
// package.json
{
"name" : "some-library",
"main" : "./lib/some-library.js"
}
模塊加載機(jī)制
CommonJS模塊的加載機(jī)制是纵柿,輸入的是被輸出的值的拷貝蜈抓。也就是說,一旦輸出一個(gè)值昂儒,模塊內(nèi)部的變化就影響不到這個(gè)值沟使。
npm
常用命令
- npm init:創(chuàng)建package.json文件
- npm login:登錄npm
- npm whoami:告訴你當(dāng)前登錄用戶是誰
- npm publish:發(fā)布自己的npm包
- npm unpublish --force:刪除自己的npm包(每個(gè)版本都得刪)
- npm config list:查看配置信息
踩過的坑
之前發(fā)布不成功,報(bào)了403的錯(cuò)誤渊跋。解決方案是要講淘寶的源切換會(huì)npm官方的源腊嗡。然后還要重新登錄。
某些模塊被墻的解決方案(以node-sass為例):
npm install --save node-sass --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/dist --sass-binary-site=http://npm.taobao.org/mirrors/node-sass
# --registry=https://registry.npm.taobao.org 淘寶npm包鏡像
# --disturl=https://npm.taobao.org/dist 淘寶node源碼鏡像拾酝,一些二進(jìn)制包編譯時(shí)用
# --sass-binary-site=http://npm.taobao.org/mirrors/node-sass 這個(gè)才是node-sass鏡像
yarn
yarn安裝模塊的速度著實(shí)把我給驚艷到了燕少,這里必須要說道說道。
常用命令
- yarn
- yarn init
- yarn add:默認(rèn)添加到開發(fā)依賴
- yarn upgrade
- yarn add --offline:指定離線安裝(當(dāng)前最新版本好像不太需要顯式指定)
- yarn add --dev:添加到開發(fā)依賴
- yarn remove
- yarn publish
- yarn config set 淘寶源
- yarn global add:全局安裝(yarn不推薦濫用全局安裝)
- yarn self-update
- yarn run:運(yùn)行package.json中的腳本