npm:全稱node package mananger,是世界上最大規模的包管理系統,官網是這樣介紹的 Build amazing things...javascript
那我們就來看看他作了哪些驚人的事~html
默認你們確定比較熟悉了,直接 npm init -y
了事,這回咱們再來仔細看看前端
{ "name": "webyouxuan", "version": "1.0.0", "main": "index.js", "scripts": {}, "license": "ISC" }
這裏先聲明npm的版本是6.7.0,由於個人node版本是v11.14.0java
我們來逐個說說這裏比較重要的字段:name
、version
、main
、scripts
、license
node
npm install http-server -g
全局安裝的意思很簡單,就是安裝的模塊會被安裝到全局下,能夠在命令行中直接使用安裝的包,其實只是在/user/local/bin目錄下做了個連接,鏈接到 /usr/local/lib/node_modules/http-server/bin/http-server了這個文件,當咱們執行http-server這個命令時,就會調用連接的這個文件。react
mac由於有權限問題,這裏咱們加
sudo
來執行命令
咱們能夠本身來嘗試寫一個包,建立bin目錄,新增www文件,名字叫什麼無所謂啦~jquery
#! /usr/bin/env node console.log('關注webyouxuan哈'); // #! 這句表示採用node來執行此文件,同理shell能夠表示sh
更新package.json文件webpack
"bin": { "youxuan":"./bin/www" // 這裏要注意名字和你創建的文件夾要相同 },
好了,寫好啦!這裏咱們先不說發包的事,用一個經常使用的命令,他能夠實現連接的功能:git
npm link
[圖片上傳失敗...(image-a09819-1567445632022)]web
這樣咱們在命令行中直接輸入youxuan就能夠打印出關注webyouxuan!
npm install webpack --save-dev
本地安裝很好理解,就是所謂的在項目中使用,而非在命令行中使用!這裏咱們看到生成了一個package-lock.json文件,並且將安裝的模塊放到了node_modules下,而json中也新增了些內容
"devDependencies": { "webpack": "^4.39.3" }
這裏咱們先來簡單介紹下基本的使用
--save-dev
表明當前依賴只在開發時被應用,若是默認不寫則至關於 --save
,是項目依賴開發上線都須要的
也能夠指定版本號來安裝包
npm i jquery@2.2.0 # install能夠簡寫成i
默認執行npm i
會安裝項目中全部須要的依賴,若是隻想安裝生產環境的依賴能夠增長--production
參數
自npm 5以後全部的依賴包都採用扁平化管理的方式 package-lock.json
的做用是鎖定依賴安裝結構,保證在任意機器上執行 npm install 都會獲得徹底相同的 node_modules
結果,由於package-lock.json
存儲了全部安裝的信息。
"name": "youxuan", "version": "1.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@webassemblyjs/ast": { "version": "1.8.5", // 當前依賴的版本 "resolved": "https://registry.npm.taobao.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.8.5.tgz", // 從哪一個渠道安裝的 "integrity": "sha1-UbHF/mV2o0lTv0slPfnw1JDZ41k=", // 內容hash "dev": true, "requires": { "@webassemblyjs/helper-module-context": "1.8.5", "@webassemblyjs/helper-wasm-bytecode": "1.8.5", "@webassemblyjs/wast-parser": "1.8.5" } }, ....
若是手動更新了package.json
文件,執行安裝命令會下載對應的新版本,而且會自動更新lock文件~
簡單介紹下常見的依賴方式:
可使用npm install -S
或 npm install --save
保存到依賴中,當發佈到npm上時dependencies下的模塊會做爲依賴,一塊兒被下載!
可使用npm install -D
或 npm install --save-dev
保存到依賴中。
當發佈到npm上時devDependencies下面的模塊就不會自動下載了,若是隻是單純的開發項目dependencies,devDependencies只有提示的做用!
同等依賴,若是你安裝我,那麼你最好也安裝我對應的依賴,若是未安裝會報出警告
"peerDependencies": { "jquery": "2.2.0" }
npm WARN youxuan@1.0.0 requires a peer of jquery@2.2.0 but none is installed. You must install peer dependencies yourself.
"bundleDependencies": [ "jquery" ],
使用npm pack
打包tgz時會將捆綁依賴一同打包。
若是發現沒法安裝或沒法找到,則不會影響npm的安裝。
npm採用了semver規範做爲依賴版本管理方案。semver 約定一個包的版本號必須包含3個數字
MAJOR.MINOR.PATCH
意思是 主版本號.小版本號.修訂版本號
當咱們每次發佈包的時候都須要升級版本號
npm version major # 大版本號加 1,其他版本號歸 0 npm version minor # 小版本號加 1,修訂號歸 0 npm version patch # 修訂號加 1
若是使用git管理項目會自動 git tag
標註版本號
來看看版本號的標識含義:
range | 含義 | 例 |
---|---|---|
^2.2.1 |
指定的 MAJOR 版本號下, 全部更新的版本 | 匹配 2.2.3 , 2.3.0 ; 不匹配 1.0.3 , 3.0.1 |
~2.2.1 |
指定 MAJOR.MINOR 版本號下,全部更新的版本 | 匹配 2.2.3 , 2.2.9 ; 不匹配 2.3.0 , 2.4.5 |
>=2.1 |
版本號大於或等於 2.1.0 |
匹配 2.1.2 , 3.1 |
<=2.2 |
版本號小於或等於 2.2 |
匹配 1.0.0 , 2.2.1 , 2.2.11 |
1.0.0 - 2.0.0 |
版本號從 1.0.0 (含) 到 2.0.0 (含) | 匹配 1.0.0 , 1.3.4 , 2.0.0 |
預發版:
2.1.0-beta.1
這樣聲明的版本用戶不會立馬使用,能夠用來作測試使用。
在package.json中能夠定義本身的腳本經過npm run來執行
"scripts": { "hello": "echo webyouxuan", "build": "webpack" }
咱們可使用 npm run hello
執行腳本,也可使用 npm run build
執行node_modules/.bin
目錄下的webpack文件
npm run
命令執行時,會把 ./node_modules/.bin/
目錄添加到執行環境的 PATH
變量中,所以若是某個命令行包未全局安裝,而只安裝在了當前項目的 node_modules的,經過 npm run
同樣能夠調用該命令。--
標明, 如 npm run hello -- --port 3000
能夠將 --port
參數傳給 hello
命令npm 提供了 pre 和 post 兩種鉤子機制,能夠定義某個腳本先後的執行腳本,沒有定義默認會忽略
"scripts": { "prehello":"echo 關注", "hello": "echo webyouxuan", "posthello":"echo 謝謝~" }
能夠經過打印全局env
和在項目下執行npm run env
來對比PATH
屬性,不難發如今執行npm run 的時候確實會將./node_modules/.bin/
目錄添加到PATH中
不廢話,這張圖就說明了爲何MIT許但是最大的了!
npx命令是npm v5.2以後引入的新命令,npx能夠幫咱們直接執行node_modules/.bin
文件夾下的文件
npx webpack
是否是省略了配置scripts
腳本啦!
全局安裝的模塊會帶來不少問題,例如:多個用戶全局安裝的模塊版本不一樣
npx create-react-app react-project
咱們能夠直接使用 npx
來執行模塊,它會先進行安裝,安裝執行後會將下載過的模塊刪除,這樣能夠一直使用最新版本啦!
包的發佈比較簡單,首先咱們須要切換到官方源,這裏推薦個好用的工具nrm
npm install nrm -g nrm use npm # 切換到官方源
以後更新名字,這裏也能夠發佈 做用域包 選定版本後,忽略文件夾可使用 .npmignore
,一切就緒後,發佈!!!
npm publish
ok,咱們的包就能夠成功的發佈到npm上啦!
參考