1. 程式人生 > >極簡 Node.js 入門 - 1.4 NPM & package.json

極簡 Node.js 入門 - 1.4 NPM & package.json

> 極簡 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