极简 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 ...
随机推荐
- Linux01 /Linux初识
Linux01 /Linux初识 目录 Linux01 /Linux初识 1. 服务器 2. Linux系统介绍 3. linux简单介绍 4. VMware与Centos系统安装 5. 各个连接协议 ...
- Halcon一维测量官方案例解析
下面的例子简要介绍了如何使用HALCON的一维测量工具.最长的部分是预处理和后处理:测量本身只包括两个操作符调用. 测量保险丝-fuse 预处理主要是测量线的生成.在示例程序中,这个步骤是通过将测量对 ...
- 一个简单的Maven小案例
Maven是一个很好的软件项目管理工具,有了Maven我们不用再费劲的去官网上下载Jar包. Maven的官网地址:http://maven.apache.org/download.cgi 要建立一个 ...
- python环境搭建及配置
我选择的是pycharm,这个对新手比较友好 我目前正在自学周志华的西瓜书,在做练习题3.3时需要用到python来实现,做这个练习需要numpy库和matplot库,最开始的时候忘了anaconda ...
- 设计模式:singleton模式
目的:限制类的实例个数只能是一个 例子: #define AGT_DECLARE_SINGLETON(ClassName) \ public: \ static ClassName *Instance ...
- org.apache.commons.net.ftp.FTPConnectionClosedException: Connection closed without indication
Ftp问题 最近遇到了ftp读取中文乱码的问题,代码中使用的是FtpClient.google一下找到了解决方案. FTP协议里面,规定文件名编码为iso-8859-1,FTP类中默认的编码也是这个. ...
- 微软如何绑定二次验证码_虚拟MFA_两步验证_身份验证?
1.登陆Microsoft账户,找到二次验证绑定界面 进入Microsoft,点右上角用户头像进行登陆.之后点“安全性”. 之后点击[更多安全选项] 找到“身份验证应用”(注意不是“双重验证”).点击 ...
- 解决用vscode开发arduino时Serial未定义
在工作目录编辑c_cpp_properties.json文件 添加defines字段 { "configurations": [ { "name": " ...
- windows下nginx问题:[crit] 796#7096: *1 GetFileAttributesEx() "F: ginx-1.12.2\html\dist" failed (123: The filename, directory name, or volume label syntax is incorrect), client: 127.0.0.1, server: localho
错误信息: 2019/09/09 13:54:37 [crit] 796#7096: *1 GetFileAttributesEx() "F: ginx-1.12.2\html\dist&q ...
- 通过C语言获取MAC地址(转)
原文:http://blog.chinaunix.net/uid-25885064-id-3125167.html #include <sys/ioctl.h>#include <n ...