極簡 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 主要有三部分組成

  1. npm website://npmjs.com,開發者查找發現 package 的站點
  2. CLI:npm 命令行交互工具,安裝、更新、刪除
  3. 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 形式,對應 主版本.次版本.修訂版本 ,版本號遞增規則如下:

  1. 主版本:當你做了不兼容的 API 修改
  2. 次版本:當你做了向下兼容的功能性新增
  3. 修訂版本:當你做了向下兼容的問題修正

快捷命令

npm 提供了快捷升級命令

  • 升級主版本號:npm version major
  • 升級次版本號:npm version minor
  • 升級修訂版本號:npm version patch

先行版本

x.y.z 格式是模組正式版本,重要模組為了保證穩定,會在放出正式版本之前提供先行版本

  • alpha: 內部版本
  • beta: 公測版本
  • rc: Release candiate,正式版本的候選版本

這種特殊版本除非開發者精確聲明使用,否則 npm install 不會自動安裝對應版本內容,npm 上 react 部分版本記錄
image.png


dependencies & devDependencies

dependencies 和 devDependencies 欄位用來表示模組的依賴和開發環境依賴,模組依賴的版本號有些幾種不同寫法,來保證安裝的時候使用對應的版本

  1. x.y.z  使用精確版本號
  2. *  任意版本,第一次安裝會使用模組最新版本
  3. ^x.y.z ^2.3.7,x 位鎖死,y、z 位使用最新版本
  4. 3.x^3.0.0 含義相同,x 位使用指定版本,y、z 位使用最新
  5. ~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');
Tags: