極簡 Node.js 入門 - 1.4 NPM & package.json
阿新 • • 發佈:2020-08-07
> 極簡 Node.js 入門系列教程:[https://www.yuque.com/sunluyong/node](https://www.yuque.com/sunluyong/node)
>
> 本文更佳閱讀體驗:[https://www.yuque.com/sunluyong/node/npm](https://www.yuque.com/sunluyong/node/npm)
## npm 是什麼
npm 是 Node.js 的包管理工具,Node.js package manger,通過 npm Node.js 可以方便的使用第三方開發的開源模組,同時也可以把自己的模組釋出到 npm 供其它開發者使用
npm 主要有三部分組成 1. npm website:[https://npmjs.com](https://npmjs.com),開發者查詢發現 package 的站點 1. CLI:npm 命令列互動工具,安裝、更新、刪除 1. registry:package 及其元資訊儲存的資料庫 ## package.json npm 通過 Node.js 模組根目錄的 `_package.json_`_ _檔案獲取模組元資料和依賴關係等,[react 的 package.json](https://github.com/facebook/react/blob/master/packages/react/package.json) 包含如下資訊 > _可以通過 npm init 可以自助生成 package.json_
```json
{
"name": "react",
"description": "React is a JavaScript library for building user interfaces.",
"keywords": [
"react"
],
"version": "16.13.1",
"homepage": "https://reactjs.org/",
"bugs": "https://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": "https://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 需要用到如下命令
```bash
npm install react
```
```javascript
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
版本號遵從[語義化版本規範](https://semver.org/lang/zh-CN/),使用 `x.y.z` 形式,對應 `主版本.次版本.修訂版本` ,版本號遞增規則如下:
1. 主版本:當你做了不相容的 API 修改
1. 次版本:當你做了向下相容的功能性新增
1. 修訂版本:當你做了向下相容的問題修正
#### 快捷命令
npm 提供了快捷升級命令
- 升級主版本號:npm version major
- 升級次版本號:npm version minor
- 升級修訂版本號:npm version patch
#### 先行版本
`x.y.z` 格式是模組正式版本,重要模組為了保證穩定,會在放出正式版本之前提供先行版本
- alpha: 內部版本
- beta: 公測版本
- rc: Release candiate,正式版本的候選版本
這種特殊版本除非開發者精確宣告使用,否則 npm install 不會自動安裝對應版本內容,npm 上 react [部分版本記錄](https://www.npmjs.com/package/react)
![image.png](https://cdn.nlark.com/yuque/0/2020/png/87727/1587200220455-14ef2034-472d-4da3-a82b-27dab249c7f6.png#align=left&display=inline&height=257&margin=%5Bobject%20Object%5D&name=image.png&originHeight=257&originWidth=750&size=39290&status=done&style=none&width=750) ### dependencies & devDependencies dependencies 和 devDependencies 欄位用來表示模組的依賴和開發環境依賴,模組依賴的版本號有些幾種不同寫法,來保證安裝的時候使用對應的版本 1. `x.y.z` 使用精確版本號 1. `*` 任意版本,第一次安裝會使用模組最新版本 1. `^x.y.z` ^2.3.7,x 位鎖死,y、z 位使用最新版本 1. `3.x` 和 `^3.0.0` 含義相同,x 位使用指定版本,y、z 位使用最新 1. `~x.y.z` ~2.3.7 x、y 鎖定,z 位使用最新版本
npm 提供了快捷命令,可以在安裝的時候就自動把對應內容寫到 package.json 中 ```bash npm install --save # 安裝模組並寫入 dependencies
npm install --save-dev # 安裝模組並寫入 devDependencies
```
### peerDependencies
有時候模組需要與宿主模組共享依賴,也就是有可能會用到某個模組,但自己不安裝,希望宿主環境安裝的時候使用 peerDependencies 宣告,比如 [react-dom 的 package.json](https://github.com/facebook/react/blob/master/packages/react-dom/package.json) 的使用
```javascript
"dependencies": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1",
"scheduler": "^0.19.0"
},
"peerDependencies": {
"react": "^16.13.0"
}
```
### repository
repository 用來指定模組原始碼資訊
```bash
"repository": {
"type": "git",
"url": "https://github.com/facebook/react.git",
"directory": "packages/react"
},
```
### main
main 來標識模組的預設入口檔案,比如 react `main: "index.js"` ,下面兩句寫法含義相同
```javascript
const react = require('react');
const react = require('react/index.js
npm 主要有三部分組成 1. npm website:[https://npmjs.com](https://npmjs.com),開發者查詢發現 package 的站點 1. CLI:npm 命令列互動工具,安裝、更新、刪除 1. registry:package 及其元資訊儲存的資料庫 ## package.json npm 通過 Node.js 模組根目錄的 `_package.json_`_ _檔案獲取模組元資料和依賴關係等,[react 的 package.json](https://github.com/facebook/react/blob/master/packages/react/package.json) 包含如下資訊 >
![image.png](https://cdn.nlark.com/yuque/0/2020/png/87727/1587200220455-14ef2034-472d-4da3-a82b-27dab249c7f6.png#align=left&display=inline&height=257&margin=%5Bobject%20Object%5D&name=image.png&originHeight=257&originWidth=750&size=39290&status=done&style=none&width=750) ### dependencies & devDependencies dependencies 和 devDependencies 欄位用來表示模組的依賴和開發環境依賴,模組依賴的版本號有些幾種不同寫法,來保證安裝的時候使用對應的版本 1. `x.y.z` 使用精確版本號 1. `*` 任意版本,第一次安裝會使用模組最新版本 1. `^x.y.z` ^2.3.7,x 位鎖死,y、z 位使用最新版本 1. `3.x` 和 `^3.0.0` 含義相同,x 位使用指定版本,y、z 位使用最新 1. `~x.y.z` ~2.3.7 x、y 鎖定,z 位使用最新版本
npm 提供了快捷命令,可以在安裝的時候就自動把對應內容寫到 package.json 中 ```bash npm install