npm和包、npm下载安装使用包、全局安装包和本地安装包、全局安装nodemon包、开发依赖和生产依赖
npm
● npm 全稱 Node Package Manager(node 包管理器),它的誕生是為了解決 Node 中第三方包共享的問題。
● npm 不需要單獨安裝。在安裝Node的時候,會連帶自動安裝npm。
● npm -v檢查安裝版本的情況。
當我們談到npm時,我們在說兩個東西:
● 命令行工具。這個工具在安裝node時,已經(jīng)自動安裝過了,不需要額外安裝。
● npm網(wǎng)站。這是一個第三方模塊的"不花錢的模塊超市",我們可以自由地下載,上傳模塊。
包(package)與模塊關系
npm網(wǎng)站上去下載我們的需要的代碼時,它們是以"包"這種結構放在npm網(wǎng)站上的。
● nodejs中一個模塊就是一個單獨的js文件
● Node.js 中的第三方模塊,又叫做包、第三方包、依賴包
● 包是多個模塊的集合。一個模塊的功能比較單一,所以一個包一般會包含多個模塊。
● npm 管理的單位是包。類似于網(wǎng)站和網(wǎng)頁的區(qū)別:一個網(wǎng)站一般會包含多個網(wǎng)頁。
npm下載使用包
分成三步驟:
● 初始化項目。npm init --yes如果之前已經(jīng)初始化,則可以省略。
● 安裝包。 npm install 包名。[注意:保持聯(lián)網(wǎng)的狀態(tài)哈]
● 引入包,使用
第一步:初始化項目
這里提到的項目并不是某個具體的功能,只是要創(chuàng)建一個空文件夾即可(注意,不要起中文名字哈)。
進入到項目所在的根目錄下,啟動小黑窗(建議:按下shift鍵,點擊右鍵,在彈出的菜單中選擇 “在此處打開命令行”)
初始化命令 : npm init --yes
輸入如下命令:
init命令用來在根目錄下生成一個package.json文件,這個文件中記錄了我們當前項目的基本信息,它是一切工作的開始。
第二步:安裝包
npm 這個超市中有現(xiàn)成的寫好的代碼,我們想下載來用,這個過程就是安裝包,或者叫下包、裝包
安裝命令 : npm i 包名
第三步:使用包
當我們已經(jīng)下載好一個包之后,就可以像使用核心模塊一樣去使用它。
格式是:const 常量名 = require(‘包名’) 這個格式與引入核心模塊的格式是一樣的。
安裝包后的整體目錄結構
project01
├── node_modules # 統(tǒng)一放置下載的包
│ └── dayjs # 某個包
├── xx.js # 業(yè)務代碼, 引入dayjs來使用
├── package.json # 記錄本項目的信息
└── package-lock.json # 下載包的詳細信息
下載使用包的細節(jié)1-package.json
npm init 命令
在某個目錄下開啟小黑窗,輸入如下命令:npm init
它會啟動一個交互式的程序,讓你填入一些關于本項目的信息,最后生成一個package.json文件。
如果你希望直接采用默認信息,可以使用 : npm init --yes或者是 npm init -y
說明:
● 這個命令只需要運行一次,它的目的僅僅是生成一個package.json文件。
● 如果項目根目錄下已經(jīng)有了package.json文件,就不需要再去運行這個命令了。
● 這個package.json文件后期是可以手動修改的。
package.json文件
它一般是由npm init命令創(chuàng)建出來的(也可以正常被CV),它的整體內容是一個json字符串,用來對當前項目進行整體描述。
其中最外層可以看作是一個js的對象(每一個屬性名都加了"",這就是一個典型的json標記)。
這個文件中有非常多的內容,我們目前學習如下幾個:
● name:表示這個項目的名字。
如是它是一個第三方包的話,它就決定了我們在require()時應該要寫什么內容。
● version:版本號
● keywords:關鍵字
● author: 作者
● descrption: 描述
下載使用包的細節(jié)2-node_modules文件夾
作用
這個文件夾中保存著我們從npm中下載來的第三方包。在使用npm install 命令時,會從npm網(wǎng)站下載對應的包到這個文件夾中。
執(zhí)行邏輯
當鍵入npm install XXX之后(這里假設這個XXX包是存在的,也沒有出現(xiàn)任何的網(wǎng)絡錯誤):
(1) 修改package.json文件。根據(jù)開發(fā)依賴和生產(chǎn)依賴的不同,決定把這句記錄在加在devDependencies或者是dependencies列表中。
(2) 修改node_modules文件夾
a. 如果有node_modules文件夾,則直接在下面新建名為XXX的文件夾,并從npm中下來這個包。如果這個包還有其它的依賴,則也會下載下來。
b. 如果沒有node_modules,則先創(chuàng)建這個文件夾,再去下載相應的包
● 建議先用init命令創(chuàng)建package.json之后,再去install
● 在分享代碼時,我們一般不需要把node_modules也給別人,只需要給package.json(就像你不需要把day.js給別人,因為他們可以自己去下載)。對方拿到我們的代碼之后,先運行npm install(后面不接任何的包名),自己去安裝這些個依賴包。
下載使用包整體回顧
修改鏡像源
下包速度慢的原因:默認情況下,npm 從一個名為 https://registry.npmjs.org/ 的服務器上下包。這個服務器在國外,因此下包速度會非常慢。
解決方案:把 npm的下包地址,從國外的服務器切換為國內的服務器。
檢查當前的下包地址:
npm config get registry
把下包的地址切換為國內的淘寶服務器
npm config set registry=https://registry.npm.taobao.org/
全局安裝包和本地安裝包
分成兩類:
● 全局安裝: 包被安裝到了系統(tǒng)目錄(一般在系統(tǒng)盤的node_modules中)。
● 局部安裝(或者叫本地安裝),包安裝在當前項目的根目錄下(與package.json同級)的node_modules中。
○ 命令:npm install 包名
全局包與本地包的區(qū)別
● 全局安裝的包一般可提供直接執(zhí)行的命令。我們通過對一些工具類的包采用這種方式安裝,如:
gulp, nodemon, live-server,nrm等。
● 本地安裝的包是與具體的項目有關的, 我們需要在開發(fā)過程中使用這些具體的功能。
一個經(jīng)驗法則:
● 要用到該包的命令執(zhí)行任務的就需要全局安裝
● 要通過require引入使用的就需要本地安裝
全局安裝nodemon包
作用 : 它能幫我們自動檢測到我們的代碼的修改,并自動重新運行我們的代碼
安裝 nodemon : 通過npm包管理工具來進行安裝。
步驟:
在任意位置 打開一個小黑窗,輸入如下命令:
npm install -g nodemon 回車。
此操作需要聯(lián)網(wǎng),根據(jù)網(wǎng)絡速度所耗時間不同。如果這個命令執(zhí)行完成并沒有報錯,就是說明安裝成功了。
使用nodemon
等待安裝成功之后,使用方法也非常簡單:在命令中,使用nodemon來代替node。
// 原來是: node server.js// 現(xiàn)在是 // 改成 nodemon server.js nodemon server.js它的好處在于會自動監(jiān)聽server.js這個文件的變化,如果變化了,就會重新自動再去運行。相當于是如下偽代碼:
while(server.js 變化了){node server.js }說明:
● 它是一個第三方的包(其它程序員寫的工具)
● 之前的node server.js還是可以用的。
可能會出現(xiàn)的錯誤
● 運行nodemon,如果報錯如下:
● 解決辦法是:
○ 管理員方式,打開命令行(powershell)窗口
○ 執(zhí)行 set-ExecutionPolicy RemoteSigned;
○ 在出現(xiàn)的選項中,輸入 A,回車。即可
● 如果報錯如下
解決辦法,重啟vscode,win7可能要重啟電腦。
開發(fā)依賴和生產(chǎn)依賴(了解)
在本地安裝包時,表示我們這個項目要用到這個包,換句話說,我們這個項目要想成功運行,要依賴于這些個包。
但在,具體在項目進行的哪一階段依賴于這些包呢?也有具體的差異。
本地開發(fā) ----> 上線運行
理解
舉個生活中建房子的場景:
在建房子時,我們依賴:
● 輔助工具:尺子,水平儀,腳手架
● 原材料:鋼筋,水泥
在住房子時,我們依賴:
● 原材料:鋼筋,水泥
在房子進入到了使用階段時,我們就不再需要尺子,水平儀,腳手架等這些個輔助工具了。我們買一所房子時,也不應該支付巨型腳手架的費用。
在開發(fā)前端項目的過程中也存在類似的問題:我們的開發(fā)過程和使用過程是分開的,開發(fā)項目時需要用到的包可能在使用項目時就不需要用到了。
假設有這么兩個包:
● gulp-htmlmin。這個工具是用來把html代碼進行壓縮的(去掉空格,換行等),我們需要在開發(fā)時使用它,而項目一旦上線,我們就不再需要它了。,因此將它歸類為"開發(fā)依賴"。
● axios。在開發(fā)時參與源碼編寫,在發(fā)布上線的生產(chǎn)環(huán)境中也是需要它的。不僅在開發(fā)環(huán)境編寫代碼時要依賴它、線上環(huán)境也要依賴它,因此將它歸類為"生產(chǎn)依賴"。
總結
以上是生活随笔為你收集整理的npm和包、npm下载安装使用包、全局安装包和本地安装包、全局安装nodemon包、开发依赖和生产依赖的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Swift 开发的工具类,主要是提供正则
- 下一篇: leetcode 42 接雨水 单调栈