nodejs初識總結(jié)-02

這里我們學習nodejs的一些關(guān)鍵和基礎(chǔ)的內(nèi)容

npm是什么

  • 相信各位大佬都知道npm這個東西锥涕。npm 其實又叫 node package manager,翻譯過來就是node的包管理工具皿淋。它的但是解決了很實際的一些東西。

    • 如果有早期做前端的人奥溺,如果用一個庫摔吏,比如jQuery媒怯,就得去它的官網(wǎng)下載它的js文件订讼,并且版本也比較難維護,有些特定版本官網(wǎng)還找不到扇苞。
    • 現(xiàn)在有npm就可以很好的解決我們這些實際的問題欺殿。
      假設(shè)你想下載一個jQuery來使用,有npm我們可以這樣做鳖敷,直接在控制臺輸入npm i jquery你會發(fā)現(xiàn)文件夾中多了一個node_modules文件夾脖苏,文件夾內(nèi)就有一個jquery的文件夾屏箍。
    • 如果想指定版本蟆豫,那么可以這樣npm i jquery@1.11.1。怎么樣是不是比你去官網(wǎng)找再下會快很多啊氨距。

    簡單講npm就是一個包維護的一個工具,常用的命令就那么幾個蜒谤,沒什么內(nèi)涵的東西在里面在這列舉一些常用的npm命令,都不用記至扰,你用到就記住了鳍徽。

    在項目中初始化一個 package.json 文件

凡是使用 npm 來管理的項目都會有這么一個文件

npm init

# 跳過向?qū)В焖偕?package.json 文件
# 簡寫是 -y
npm init --yes

# 一次性安裝 dependencies 中所有的依賴項
# 簡寫是 npm i
npm install

# 安裝指定的包敢课,可以簡寫為 npm i 包名
# npm 5 以前只下載阶祭,不會保存依賴信息,如果需要保存直秆,則需要加上 `--save` 選項
# npm 5 以后就可以省略 --save 選項了
npm install 包名

# 一次性安裝多個指定包
npm install 包名 包名 包名 ...

# 安裝指定版本的包
npm install 包名@版本號

# npm list命令以樹型結(jié)構(gòu)列出當前項目安裝的所有模塊濒募,以及它們依賴的模塊。
npm list

# 加上global參數(shù)圾结,會列出全局安裝的模塊
npm list -global

# npm list命令也可以列出單個模塊
npm list 包名

# 安裝全局包
npm install --global 包名

# 更新本地安裝的模塊
# 它會先到遠程倉庫查詢最新版本瑰剃,然后查詢本地版本。如果本地版本不存在筝野,或者遠程版本較新晌姚,就會安裝
npm update [package name]

# 升級全局安裝的模塊
npm update -global [package name]

# 卸載指定的包
npm uninstall 包名

# 查看包信息
# view 別名:v、info歇竟、show
npm view 包名

# 查看使用幫助
npm help

# 查看某個命令的使用幫助
# 例如我忘記了 uninstall 命令的簡寫了挥唠,這個時候,可以輸入 `npm uninstall --help` 來查看使用幫助
npm 命令 --help

tips:npm 5 以后就可以省略 --save 選項,自動會給你的package.json中添加包信息了焕议。

  • 還有個特殊的假設(shè)你想升級你的npm宝磨,你可以這樣npm i npm自己升級自己。
  • -global/-g表示的是全局安裝盅安,有些東西可以全局安裝唤锉,比如nodemon eslint。全局安裝的包不會在node_modules內(nèi)宽堆。

這里看起來命令很多很長腌紧,其實很多都有簡寫比如:install/i-global/-g畜隶、uninstall/un壁肋。

  • 解決npm下載慢問題

淘寶有npm官網(wǎng)的同步鏡像,我們可以使用淘寶的鏡像地址籽慢。淘寶鏡像:https://npm.taobao.org/
+ 第一種方法:每次使用npm時指定從何處下載包浸遗。寫法如下:
shell npm i jquery --registry=https://registry.npm.taobao.org
* 但是這樣每次都要手動加--registry=https://registry.npm.taobao.org非常麻煩
+ 第二種方法:直接使用https://registry.npm.taobao.org為我們的默認地址
```shell
# 配置到淘寶
npm config set registry https://registry.npm.taobao.org

# 查看 registry 是否配置正確
npm config list
```
    * 這樣你在使用`npm`的時候,默認就會去淘寶上下載包了箱亿。
+ 第三種方法:全局安裝`cnmp`跛锌,然后用`cnmp`去代替`npm`。
```shell
# 全局安裝cnpm
npm i cnpm -g

#下次使用
cnpm i
```
采用這三種方式都可以解決npm慢的問題届惋。個人正在使用第二種方式髓帽,感覺不錯菠赚。
  • package.json和package-lock.json文件的解讀
    • package.json文件是記錄你項目的一些基本信息。
      • 當沒有時可以使用npm init來初始化這個文件郑藏,填寫的都是一些基本信息衡查。項目名、描述等等必盖。
      • 你也可以不填寫這些信息拌牲,快速生成該文件可以像這樣npm init -y
    • packages.json中的scripts這表示你的執(zhí)行腳本,你可以像這樣
    "scripts": {
        "start": "node ./app.js"
    },
    
    • 在這項目的命令行中我輸入npm start實際上執(zhí)行的是node ./app.js歌粥。這樣可以把復雜的啟動腳本簡單化塌忽。

    • packages.json中的main。這個相當于入口失驶,比如你引用了bootstrap這個庫土居。當var bs = require('bootstrap');這條語句執(zhí)行時,它會這樣先找node_modules這個文件夾突勇,當前目錄找不到就向上一級目錄找装盯,直到到找到這個node_modules這個文件夾,它就在文件夾內(nèi)找bootstrap這個文件夾甲馋,找到后就到里面找package.json這個文件埂奈,沒找到則找index.js。兩個都沒找到就報錯定躏。找到package.json就在文件內(nèi)找main账磺,找到后根據(jù)main的值找到文件執(zhí)行。找到index.js則執(zhí)行這個文件痊远。

      • 說了這么多垮抗,其實main主要是指定入口的文件。
    • packages.json中dependencies表示你這個項目用到的包碧聪,有可能它會像這樣

    "dependencies": {
        "bootstrap": "^4.1.3",
    }
    
    • 這表示這個項目使用了bootstrap冒版,并且版本4.1.3以上,^表示是以上的意思逞姿,相當于以上都行辞嗡。
      • 這樣就存在一個問題,假設(shè)我這個項目就依賴于某版本的庫那這樣的維護會相對麻煩npm i是下載最新的包滞造。所以出現(xiàn)了package-lock.json续室。
  • package-lock.json
    • 其實package-lock.json主要是用來記錄包的版本,和提升npm i的性能谒养。是npm 5 之后才出現(xiàn)的挺狰。
      • 有這個文件之后庫的版本能得到維護,你再次使用npm i時版本還是以前的版本。
      • 并且當你沒有node_moudles這個文件夾時丰泊,使用npm i的速度會比較快薯定。原因是npm只要讀取package-lock.json這個文件就行了,文件中有包的下載地址和版本會加快下載速度瞳购。

npm官網(wǎng):https://www.npmjs.com/ 查找包沉唠,和包簡單的使用非常有用。

初識node之文件操作

- fs模塊異步同步操作文件
    + fs是系統(tǒng)提供的核心模塊苛败,提供了`readFile()`和`readFileSync()`,同步和異步讀取文件径簿。
        * 同步會阻塞程序的執(zhí)行罢屈,所以大部分情況推薦使用異步操作,特殊情況除外篇亭。
        * 異步操作往往通過回調(diào)函數(shù)來獲取操作的結(jié)果缠捌。
    + fs的常用api

    > 更多可以去node官網(wǎng)查看,鏈接:http://nodejs.cn/api/fs.html
Api 作用 注意點
fs.appendFile(file, data, callback) 向文件中追加內(nèi)容
fs.copyFile(src, callback) 復制文件
fs.mkdir(path, callback) 創(chuàng)建文件夾
fs.readDir(path, callback) 讀取文件夾列表
fs.rmdir(path, callback) 刪除文件夾 只能刪除空文件夾
fs.unlink(path, callback) 刪除文件
fs.readFile(path, callback) 讀取文件內(nèi)容
fs.writeFile(path, callback) 寫出內(nèi)容到文件
  • fs的回調(diào)函數(shù)一般第一個參數(shù)為錯誤對象err译蒂,err有值說明出錯了曼月,err為null說明比較順利。大概相當于這樣:
    fs.readFile('./index.html', 'utf8', function (err, data) {
        if (err) {
            throw err;
        }
        // do something
        console.log(data);
    })
  • 基本的用法大概就是這樣的柔昼,這里要注意的是path,為絕對路徑會比較好哑芹,因為node命令是依賴控制臺的路徑的,所以當你去另一個目錄輸入相對路徑執(zhí)行時就會報錯捕透。
  • 例如這樣:E:> node index.js是正常的聪姿,然而當你這樣D:> node E:就會報錯找不到文件。
  • path模塊的用法
    • path模塊的常用的方法

      • join(...agrs)方法,很簡單用戶兩個地址間的拼接,你可能見過這樣的代碼
          fs.readFile(path.join(__dirName,'../index.html'),(err, data) => {
              if(err) throw err;
          })
      

      這里就是將相對路徑改成了絕對路徑乙嘀,這樣就不會出現(xiàn)因為控制臺地址的改變而讀取不到文件了末购。

      • path還有很多方法,你可以只記住path.parse(path)這一個虎谢。用的時候打印看一下,然后取你想要的盟榴。用法如下:

      返回的對象有以下屬性:
      dir <string>
      root <string>
      base <string>
      name <string>
      ext <string>
      例如在Windows系統(tǒng)上:
      javascript path.parse('C:\\path\\dir\\file.txt'); // 返回: // { root: 'C:\\', // dir: 'C:\\path\\dir', // base: 'file.txt', // ext: '.txt', // name: 'file' }
      在其他系統(tǒng)上
      javascript path.parse('/home/user/dir/file.txt'); // 返回: // { root: '/', // dir: '/home/user/dir', // base: 'file.txt', // ext: '.txt', // name: 'file' }

很簡單的nodejs,但是要學的靈活貫通還是非常的難,nodejs中有很多npm包,我曾經(jīng)遇到一個人他每天堅持看10個npm包源碼,但是以這個速度都要看非常之久。貴在堅持婴噩。加油擎场!

下一個文章開始帶來一系列干貨。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末讳推,一起剝皮案震驚了整個濱河市顶籽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌银觅,老刑警劉巖礼饱,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡镊绪,警方通過查閱死者的電腦和手機匀伏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝴韭,“玉大人够颠,你說我怎么就攤上這事¢” “怎么了履磨?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長庆尘。 經(jīng)常有香客問我剃诅,道長,這世上最難降的妖魔是什么驶忌? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任矛辕,我火速辦了婚禮,結(jié)果婚禮上付魔,老公的妹妹穿的比我還像新娘聊品。我一直安慰自己,他們只是感情好几苍,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布翻屈。 她就那樣靜靜地躺著,像睡著了一般妻坝。 火紅的嫁衣襯著肌膚如雪妖胀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天惠勒,我揣著相機與錄音赚抡,去河邊找鬼。 笑死纠屋,一個胖子當著我的面吹牛涂臣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播售担,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼赁遗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了族铆?” 一聲冷哼從身側(cè)響起岩四,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哥攘,沒想到半個月后剖煌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體材鹦,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年耕姊,在試婚紗的時候發(fā)現(xiàn)自己被綠了桶唐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡茉兰,死狀恐怖尤泽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情规脸,我是刑警寧澤坯约,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站莫鸭,受9級特大地震影響鬼店,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜黔龟,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望滥玷。 院中可真熱鬧氏身,春花似錦、人聲如沸惑畴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽如贷。三九已至陷虎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間杠袱,已是汗流浹背尚猿。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留楣富,地道東北人凿掂。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像纹蝴,于是被迫代替她去往敵國和親庄萎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理塘安,服務(wù)發(fā)現(xiàn)糠涛,斷路器,智...
    卡卡羅2017閱讀 134,626評論 18 139
  • 1.運行一個nodejs文件兼犯, 如一個js文件中只含有console.log("hello world");的文件...
    不忘初心_9a16閱讀 5,780評論 0 8
  • 一忍捡、Node快速體驗 1集漾、 Node介紹 (1) Node.js是什么 Node 是一個基于Chrome V8 ...
    寵辱不驚丶歲月靜好閱讀 3,297評論 0 6
  • JavaScript 模塊化編程 網(wǎng)站越來越復雜,js代碼锉罐、js文件也越來越多帆竹,會遇到什么問題? 命名沖突脓规; 文件...
    magic_pill閱讀 1,411評論 0 1
  • 當我慢慢走出自己狹小的世界栽连,離開父母的庇護,我開始懂得反省自己的不足侨舆,自己的缺點秒紧,轉(zhuǎn)變自己的思想,認識到以前的自己...
    舒曼月閱讀 677評論 2 4