极简 Node.js 入门 - 1.4 NPM & package.json
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node
npm 是什么
npm 是 Node.js 的包管理工具,Node.js package manger,通过 npm Node.js 可以方便的使用第三方开发的开源模块,同时也可以把自己的模块发布到 npm 供其它开发者使用
npm 主要有三部分组成
- npm website:https://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": "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 形式,对应 主版本.次版本.修订版本 ,版本号递增规则如下:
- 主版本:当你做了不兼容的 API 修改
- 次版本:当你做了向下兼容的功能性新增
- 修订版本:当你做了向下兼容的问题修正
快捷命令
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 字段用来表示模块的依赖和开发环境依赖,模块依赖的版本号有些几种不同写法,来保证安装的时候使用对应的版本
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": "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的更多相关文章
- 极简 Node.js 入门 - Node.js 是什么、性能有优势?
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 1.2 模块系统
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 5.3 静态资源服务器
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 1.3 调试
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 2.1 Path
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 2.2 事件
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 2.3 process
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 2.4 定时器
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 3.1 File System API 风格
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
随机推荐
- 微博大数据即席查询(OLAP)引擎实践
前言 适用于 即席查询 场景的开源查询引擎有很多,如:Elasticsearch.Druid.Presto.ClickHouse等:每种系统各有利弊,有的擅长检索,有的擅长统计:实践证明,All In ...
- Elasticsearch从入门到放弃:再聊搜索
在前文中我们曾经聊过搜索文档的方法,Elasticsearch 一般适用于读多写少的场景,因此我们需要更多的关注读操作. Elasticsearch 提供的 Search API 可以分为 URI S ...
- HTML学习分享(一)
HTML学习小结(一) 1.css的全称是什么? 2.样式表的组成 3.浏览器读取编译css的顺序? (1)HTML基本选择器 1.通配符选择器 * { margin: 0; padding: 0; ...
- ATX学习(一)-atx-server
今天无意中发现了ATX手机设备管理平台,瞬间勾引起了我极大的兴趣,这里对学习过程中的情况做个记录. 1.搭建环境 先按照作者步骤搭建环境出来吧,哇,突然发现ATX搭建环境很方便(一会就搭建好了) ...
- 并发编程AQS----共享锁
Semaphore Semaphore 字面意思是信号量的意思,它的作用是控制访问特定资源的线程数目.应用场景:资源访问,服务限流. Semaphore 实现AbstractQueuedSynchro ...
- split().reverse().join()代码解析
split() 方法用于把一个字符串分割成字符串数组. reverse() 方法用于颠倒数组中元素的顺序. join() 方法用于把数组中的所有元素放入一个字符串.
- 【java面试】- 集合篇
Java 集合概览 从下图可以看出,在Java中除了以Map结尾的类之外, 其他类都实现了Collection接口.并且,以Map结尾的类都实现了Map接口 List.Set.Map三者的区别 Lis ...
- 分布式ID生成服务,真的有必要搞一个
目录 阐述背景 Leaf snowflake 模式介绍 Leaf segment 模式介绍 Leaf 改造支持RPC 阐述背景 不吹嘘,不夸张,项目中用到ID生成的场景确实挺多.比如业务要做幂等的时候 ...
- Zookeeper ----- 系统模型
数据模型 Zookeeper的数据模型与文件系统非常相似,唯一不同的它的每个节点(ZNode)都可以存放数据,无论父节点还是子节点. 事务ID 即前面提到的ZXID.对每个事务请求,Zookeeper ...
- vue学习(四) v-on:事件绑定
//html <div id="app"> <input type="button" value="ok" v-bind: ...