>[success] # npm 查看一個包的版本信息
~~~
1.當想看npm 服務器上某個包的本時候
1.1.'npm view 查看的包名 versions' -- 這個會查到npm服務器上對應查詢包的版本所有信息
1.2.'npm view 查看的包名 version' -- 這種方式只能查看的最新的版本是哪一個也就是tag為latest
1.3.'npm info 查看的包名' -- 也可以查看j所有的版本,但是能查出更多的關于查詢包的信息;
2.'npm ls' -- 此命令將以樹狀結構將已安裝軟件包的所有版本及其依賴項打印到標準輸出。
'npm ls -g' -- 全局安裝依賴
3.'npm ls 查詢包' 查看本地安裝的查詢的包版本,本地沒有安裝返回empty的結果;加'-g' 查詢全局的
~~~
>[info] ## 版本
~~~
1.包的版本管理各種版本符號
version 精確匹配版本
>version 必須大于某個版本
>=version 大于等于
<version 小于
<=versionversion 小于
~version "約等于":
^version "兼容版本":
version1 - version2 相當于 >=version1 <=version2.
range1 || range2 范圍1和范圍2滿足任意一個都行
~~~
>[danger] ##### 關于版本
1. **npm采用了semver規范作為依賴版本管理方案**。按照semver的約定,一個npm依賴包的版本格式一般為:'**主版本號.次版本號.修訂號(x.y.z)**' -- 小提示 js有一個專門校驗'semver' 庫
1.1. '**主版本號(也叫大版本,major version)**':大版本的改動很可能是一次顛覆性的改動,也就意味著可能存在與低版本不兼容的API或者用法(比如 vue 2 -> 3)。**做了不兼容的 API 修改(可能不兼容之前的版本)**
1.2. '**次版本號(也叫小版本,minor version)**':小版本的改動應當兼容同一個大版本內的API和用法,因此應該讓開發者無感。所以我們通常只說大版本號,很少會精確到小版本號。**做了向下兼容的功能性新增(新功能增加,但是兼容之前的版本)**
1.3. '**修訂號(也叫補丁,patch)**':一般用于修復bug或者很細微的變更,也需要保持向前兼容,**做了向下兼容的問題修正(沒有新功能,修復了之前版本的bug)**
1.4. '**先行版本**' 如下圖vue3發行版本為例**當某個版本改動比較大、并非穩定而且可能無法滿足預期的兼容性需求時,你可能要先發布一個先行版本**。**先行版本號**可以加到**主版本號.次版本號.修訂號的后面**,先加上一個連接號再加上一連串以句點分隔的標識符和版本編譯信息。'**內部版本(alpha)、公測版本(beta)、正式版本的候選版本rc: 即 Release candiate**'
* **alpha(α)**:預覽版,或者叫內部測試版;一般不向外部發布,會有很多bug;一般只有測試人員使用。
* **beta(β)**:測試版,或者叫公開測試版;這個階段的版本會一直加入新的功能;在alpha版之后推出。
* **rc(release candidate)**:最終測試版本;可能成為最終產品的候選版本,如果未出現問題則可發布成為正式版本。
* **總結**:semver作為包版本管理規范。此規范規定軟件版本**由三個部分組成**:
* 主版本號做了不兼容的重大變更
* 次版本號做了向下兼容的功能添加
* 補丁版本號做了向下兼容的bug修復
* **注意**:
**如果大版本號是 0 的話,表示軟件處于開發初始階段**,一切都可能隨時被改變,可能每個小版本之間也會存在不兼容性。所以在選擇依賴時,**盡量避開大版本號是 0 的包**。
* vue3 版本發行

>[danger] ##### 對于各個標志含義
~~~
1.~: 當安裝依賴時獲取到有新版本時,安裝到 x.y.z 中 z 的最新的版本。即保持主版本
號、次版本號不變的情況下,保持修訂號的最新版本。
2.^: 當安裝依賴時獲取到有新版本時,安裝到 x.y.z 中 y 和 z 都為最新版本。 即保持主版
本號不變的情況下,保持次版本號、修訂版本號為最新版本。
3.'*' 、"x" 或者 (空) 表示可以匹配任何版本。
注意: '當主版本號為 0 的情況,會被認為是一個不穩定版本'
主版本號和次版本號都為 0: ^0.0.z、~0.0.z 都被當作固定版本,安裝依賴時均不
會發生變化。
主版本號為 0: ^0.y.z 表現和 ~0.y.z 相同,只保持修訂號為最新版本。
~~~
>[danger] ##### 舉幾個例子
~~~
1."signale": "1.4.0": 固定版本號
2."figlet": "*": 任意版本(>=0.0.0)
3."react": "16.x": 匹配主要版本(>=16.0.0 <17.0.0)
4."react": "16.3.x": 匹配主要版本和次要版本(>=16.3.0 <16.4.0)
5."^xxx": 最左側非0版本號不變,不小于xxx
^1.2.3 = >=1.2.3 <2.0.0 主版本號不變
^0.1.2 = >=0.1.2 <0.2.0 主、次版本號不變
^0.0.2 = = 0.0.2 主、次、補丁版本號都不變
6."~xxx":如果列出了次版本號,則次版本號不變,如果沒有列出次版本號,則主版本號不
變,均不小于xxx
~1.2.3 = >=1.2.3 <1.3.0 主、次版本號不變
~1 = >=1.0.0 <2.0.0 主版本號不變
~~~
>[danger] ##### 預發布版本
~~~
1.以包開發者的角度來考慮這個問題:假設當前線上版本是 "1.2.3",如果我作了一些改動
需要發布版本 "1.2.4",但我不想直接上線(因為使用 "~1.2.3" 或者 "^1.2.3" 的用戶都會
直接靜默更新),這就需要使用預發布功能。因此我可能會發布 "1.2.4-alpha.1" 或者
"1.2.4-beta.1" 等等。
">1.2.4-alpha.1"表示接受 "1.2.4-alpha" 版本下所有大于 1 的預發布版本。因此 "1.2.4-alpha.7"
是符合要求的,但 "1.2.4-beta.1" 和 "1.2.5-alpha.2" 都不符合。此外如果是正式版本(不
帶預發布關鍵詞),只要版本號符合要求即可,不檢查預發布版本號,例如 "1.2.5",
"1.3.0" 都是認可的。
"~1.2.4-alpha.1" 表示 ">=1.2.4-alpha.1 < 1.3.0"。這樣 "1.2.5", "1.2.4-alpha.2" 都符合條
件,而 "1.2.5-alpha.1", "1.3.0" 不符合。
"^1.2.4-alpha.1" 表示 ">=1.2.4-alpha.1 < 2.0.0"。這樣 "1.2.5", "1.2.4-alpha.2", "1.3.0"
符合條件,而 "1.2.5-alpha.1", "2.0.0" 不符合。
~~~
>[danger] ##### 小知識點
1. **1.0.0 的版本號用于界定公共 API**。當你的軟件發布到了正式環境,或者有穩定的API時,就可以發布1.0.0版本了。所以,當你決定對外部發布一個正式版本的npm包時,把它的版本標為1.0.0。
>[danger] ##### 我想知道更多semver語義化
[semver語義化版本 2.0.0](https://semver.org/lang/zh-CN/)
- 工程化 -- Node
- vscode -- 插件
- vscode -- 代碼片段
- 前端學會調試
- 谷歌瀏覽器調試技巧
- 權限驗證
- 包管理工具 -- npm
- 常見的 npm ci 指令
- npm -- npm install安裝包
- npm -- package.json
- npm -- 查看包版本信息
- npm - package-lock.json
- npm -- node_modules 層級
- npm -- 依賴包規則
- npm -- install 安裝流程
- npx
- npm -- 發布自己的包
- 包管理工具 -- pnpm
- 模擬數據 -- Mock
- 頁面渲染
- 渲染分析
- core.js && babel
- core.js -- 到底是什么
- 編譯器那些術語
- 詞法解析 -- tokenize
- 語法解析 -- ast
- 遍歷節點 -- traverser
- 轉換階段、生成階段略
- babel
- babel -- 初步上手之了解
- babel -- 初步上手之各種配置(preset-env)
- babel -- 初步上手之各種配置@babel/helpers
- babel -- 初步上手之各種配置@babel/runtime
- babel -- 初步上手之各種配置@babel/plugin-transform-runtime
- babel -- 初步上手之各種配置(babel-polyfills )(未來)
- babel -- 初步上手之各種配置 polyfill-service
- babel -- 初步上手之各種配置(@babel/polyfill )(過去式)
- babel -- 總結
- 各種工具
- 前端 -- 工程化
- 了解 -- Yeoman
- 使用 -- Yeoman
- 了解 -- Plop
- node cli -- 開發自己的腳手架工具
- 自動化構建工具
- Gulp
- 模塊化打包工具為什么出現
- 模塊化打包工具(新) -- webpack
- 簡單使用 -- webpack
- 了解配置 -- webpack.config.js
- webpack -- loader 淺解
- loader -- 配置css模塊解析
- loader -- 圖片和字體(4.x)
- loader -- 圖片和字體(5.x)
- loader -- 圖片優化loader
- loader -- 配置解析js/ts
- webpack -- plugins 淺解
- eslit
- plugins -- CleanWebpackPlugin(4.x)
- plugins -- CleanWebpackPlugin(5.x)
- plugin -- HtmlWebpackPlugin
- plugin -- DefinePlugin 注入全局成員
- webapck -- 模塊解析配置
- webpack -- 文件指紋了解
- webpack -- 開發環境運行構建
- webpack -- 項目環境劃分
- 模塊化打包工具 -- webpack
- webpack -- 打包文件是個啥
- webpack -- 基礎配置項用法
- webpack4.x系列學習
- webpack -- 常見loader加載器
- webpack -- 移動端px轉rem處理
- 開發一個自己loader
- webpack -- plugin插件
- webpack -- 文件指紋
- webpack -- 壓縮css和html構建
- webpack -- 清里構建包
- webpack -- 復制靜態文件
- webpack -- 自定義插件
- wepack -- 關于靜態資源內聯
- webpack -- source map 對照包
- webpack -- 環境劃分構建
- webpack -- 項目構建控制臺輸出
- webpack -- 項目分析
- webpack -- 編譯提速優護體積
- 提速 -- 編譯階段
- webpack -- 項目優化
- webpack -- DefinePlugin 注入全局成員
- webpack -- 代碼分割
- webpack -- 頁面資源提取
- webpack -- import按需引入
- webpack -- 搖樹
- webpack -- 多頁面打包
- webpack -- eslint
- webpack -- srr打包后續看
- webpack -- 構建一個自己的配置后續看
- webpack -- 打包組件和基礎庫
- webpack -- 源碼
- webpack -- 啟動都做了什么
- webpack -- cli做了什么
- webpack - 5
- 模塊化打包工具 -- Rollup
- 工程化搭建代碼規范
- 規范化標準--Eslint
- eslint -- 擴展配置
- eslint -- 指令
- eslint -- vscode
- eslint -- 原理
- Prettier -- 格式化代碼工具
- EditorConfig -- 編輯器編碼風格
- 檢查提交代碼是否符合檢查配置
- 整體流程總結
- 微前端
- single-spa
- 簡單上手 -- single-spa
- 快速理解systemjs
- single-sap 不使用systemjs
- monorepo -- 工程
- Vue -- 響應式了解
- Vue2.x -- 源碼分析
- 發布訂閱和觀察者模式
- 簡單 -- 了解響應式模型(一)
- 簡單 -- 了解響應式模型(二)
- 簡單 --了解虛擬DOM(一)
- 簡單 --了解虛擬DOM(二)
- 簡單 --了解diff算法
- 簡單 --了解nextick
- Snabbdom -- 理解虛擬dom和diff算法
- Snabbdom -- h函數
- Snabbdom - Vnode 函數
- Snabbdom -- init 函數
- Snabbdom -- patch 函數
- 手寫 -- 虛擬dom渲染
- Vue -- minVue
- vue3.x -- 源碼分析
- 分析 -- reactivity
- 好文
- grpc -- 瀏覽器使用gRPC
- grcp-web -- 案例
- 待續