極簡 Node.js 入門 – 1.4 NPM & package.json
極簡 Node.js 入門系列教程://www.yuque.com/sunluyong/node
本文更佳閱讀體驗://www.yuque.com/sunluyong/node/npm
npm 是什麼
npm 是 Node.js 的包管理工具,Node.js package manger,通過 npm Node.js 可以方便的使用第三方開發的開源模組,同時也可以把自己的模組發布到 npm 供其它開發者使用
npm 主要有三部分組成
- npm website://npmjs.com,開發者查找發現 package 的站點
- CLI:npm 命令行交互工具,安裝、更新、刪除
- registry:package 及其元資訊存儲的資料庫
package.json
npm 通過 Node.js 模組根目錄的 _package.json_
_ _文件獲取模組元數據和依賴關係等,react 的 package.json 包含如下資訊
可以通過 npm init 可以自助生成 package.json
{
"name": "react",
"description": "React is a JavaScript library for building user interfaces.",
"keywords": [
"react"
],
"version": "16.13.1",
"homepage": "//reactjs.org/",
"bugs": "//github.com/facebook/react/issues",
"license": "MIT",
"files": [
"LICENSE",
"README.md",
"build-info.json",
"index.js",
"cjs/",
"umd/",
"jsx-runtime.js",
"jsx-dev-runtime.js"
],
"main": "index.js",
"repository": {
"type": "git",
"url": "//github.com/facebook/react.git",
"directory": "packages/react"
},
"engines": {
"node": ">=0.10.0"
},
"dependencies": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1"
},
"browserify": {
"transform": [
"loose-envify"
]
}
}
name
name 是模組的唯一標識,安裝、使用模組都需要使用模組的 name,可以使用字母、數字、下劃線、 -
和.
,安裝和使用 react 需要用到如下命令
npm install react
const react = require('react');
可以通過 scope 組織具有相關性的模組,模組名義 @
開頭的包就是一個 scoped package,scope 就是 @ 和 / 之間的內容
@scope/project-name
babel7 相關的 presets 和 plugins 都有 @babel
的 scope
- @babel/preset-env
- @babel/preset-react
- @babel/plugin-transform-typescript
- @babel/plugin-transform-modules-amd
version
版本號遵從語義化版本規範,使用 x.y.z
形式,對應 主版本.次版本.修訂版本
,版本號遞增規則如下:
快捷命令
npm 提供了快捷升級命令
先行版本
x.y.z
格式是模組正式版本,重要模組為了保證穩定,會在放出正式版本之前提供先行版本
- alpha: 內部版本
- beta: 公測版本
- rc: Release candiate,正式版本的候選版本
這種特殊版本除非開發者精確聲明使用,否則 npm install 不會自動安裝對應版本內容,npm 上 react 部分版本記錄
dependencies & devDependencies
dependencies 和 devDependencies 欄位用來表示模組的依賴和開發環境依賴,模組依賴的版本號有些幾種不同寫法,來保證安裝的時候使用對應的版本
x.y.z
使用精確版本號*
任意版本,第一次安裝會使用模組最新版本^x.y.z
^2.3.7,x 位鎖死,y、z 位使用最新版本3.x
和^3.0.0
含義相同,x 位使用指定版本,y、z 位使用最新~x.y.z
~2.3.7 x、y 鎖定,z 位使用最新版本
npm 提供了快捷命令,可以在安裝的時候就自動把對應內容寫到 package.json 中
npm install <package_name> --save # 安裝模組並寫入 dependencies
npm install <package_name> --save-dev # 安裝模組並寫入 devDependencies
peerDependencies
有時候模組需要與宿主模組共享依賴,也就是有可能會用到某個模組,但自己不安裝,希望宿主環境安裝的時候使用 peerDependencies 聲明,比如 react-dom 的 package.json 的使用
"dependencies": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1",
"scheduler": "^0.19.0"
},
"peerDependencies": {
"react": "^16.13.0"
}
repository
repository 用來指定模組源程式碼資訊
"repository": {
"type": "git",
"url": "//github.com/facebook/react.git",
"directory": "packages/react"
},
main
main 來標識模組的默認入口文件,比如 react main: "index.js"
,下面兩句寫法含義相同
const react = require('react');
const react = require('react/index.js');