极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node

本文更佳阅读体验: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,开发者查找发现 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": "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 需要用到如下命令

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 部分版本记录

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": "https://github.com/facebook/react.git",
"directory": "packages/react"
},

main

main 来标识模块的默认入口文件,比如 react main: "index.js" ,下面两句写法含义相同

const react = require('react');

const react = require('react/index.js');

极简 Node.js 入门 - 1.4 NPM & package.json的更多相关文章

  1. 极简 Node.js 入门 - Node.js 是什么、性能有优势?

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  2. 极简 Node.js 入门 - 1.2 模块系统

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  3. 极简 Node.js 入门 - 5.3 静态资源服务器

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  4. 极简 Node.js 入门 - 1.3 调试

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  5. 极简 Node.js 入门 - 2.1 Path

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  6. 极简 Node.js 入门 - 2.2 事件

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  7. 极简 Node.js 入门 - 2.3 process

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  8. 极简 Node.js 入门 - 2.4 定时器

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  9. 极简 Node.js 入门 - 3.1 File System API 风格

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

随机推荐

  1. pyenv虚拟环境安装

    安装过程 配置yum源 # curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo ...

  2. vue使用select间相互绑定

    让这两个select相互绑定,让roleOptions选取值后,worklist弹出得是roleOptions值 <el-select v-model="postForm.projec ...

  3. 基于Vue的UI框架element el-table表格的自定义排序

    html部分: <el-table-column prop="phoneCache" label="手机缓存包编号" align="center ...

  4. spring学习(四)使用注解代替xml配置

    用的是IDEA的maven工程,pom.xml文件导包依赖省略 一.书写要导入容器的实体类 import org.springframework.beans.factory.annotation.Va ...

  5. front-end——HTML5/CSS3基础

    概述 1.什么是前端 前端即网站前台部分,运行在PC端,移动端等浏览器上展现给用户浏览的网页,随着互联网技术的发展,html5,css3,前端框架的应用,跨平台响应式网页设计能够适应各种屏幕分辨率,完 ...

  6. Zabbix-server自动发现,批量添加主机,并链接模板

    zabbix可以手动添加agent客户端,当主机数量比较多时,这时手工重复工作会大大增加.zabbix的自动发现功能可以帮我们解决这个问题. 准备条件: 1. 被监控主机都装上zabbix-agent ...

  7. Android存储--SharedPreferences

    简介 在Android中,主要有以下几种存储方式: SharedPreferences,在键值对中存储私有原始数据. 内部存储,在设备内存中存储私有数据. 官方示例: String FILENAME ...

  8. php 导出数据到excel类

    原文链接地址:http://www.oschina.net/code/snippet_212240_21885 标注:在使用时一定要屏蔽掉//$bodyVal = $this->charset( ...

  9. 《闲扯Redis八》Redis字典的哈希表执行Rehash过程分析

    一.前言 随着操作的不断执行, 哈希表保存的键值对会逐渐地增多或者减少, 为了让哈希表的负载因子(load factor)维持在一个合理的范围之内, 当哈希表保存的键值对数量太多或者太少时, 程序需要 ...

  10. 从0到1:开启CAN通信学习(一)

    1  初识CAN通信 说起CAN通信,可能很多人都比较陌生,但实际上我们却一直在和它打交道.随着家用汽车的普及,我们开车过程中的每次刹车.每次踩油门,甚至每次的开车门.开车窗,其实都是CAN通信的应用 ...