学习 NPM 最基础的指令
什么是 NPM
npm的核心是一个软件注册表(software registry)。
registry /ˈredʒɪstri/ n. 注册表;登记处;挂号处。注册表就像是信息登记表或者数据库。
npm, node package manager, node 包管理器,它是 node 的默认包管理器,node.js 是一个 JavaScript的运行环境,也称作 node。
- 软件包(package),是一个模块的集合,将所有的模块和目录结构一起打包成一个称之为“包”(package)的文件,类似于.zip或者类似于.exe。node 规定了软件包里有一个包描述文件
package.json。 package.json是包描述文件,用于描述包的基本信息、相关依赖、执行脚本等。这是一个 json 格式文件,位于包的根目录下。 npm 基于这些规范来管理包与模块之间的依赖关系。
npm 有3部分:
- 注册表(registry):注册表是 npm 的核心,所有 node 软件包的信息都登记在这个大型“数据库”里,它是界上最大的 node 软件注册表,来自全球的开源开发人员使用 npm 共享和借用软件包。
- 命令行界面(CLI - Command Line Interface):npm-cli 提供了与 npm 交互的方式,如:发布(到npm)、(从npm)安装、管理依赖包等操作。我们要学习的就是它。
- 网站(website):npm 还提供了一个网站,为用户提供可视化的操作,提升用户管理 npm 的体验。
npm 工具是由 Isaac Z. Schlueter 单独创建,作为 Node 的包管理器。在 node v0.6.3版本之后,npm作为node的默认管理器,变成了 node 安装包的一部分,安装node 就自动安装了 npm 工具。
大多数人仅仅只要通过 npm 下载、管理、卸载软件包,所以大部分人学习 npm 就是学习这个 npm-cli 的指令,并且大部分人只要学习一些常用命令就够用了。
https://docs.npmjs.com/about-npm/
使用 npm(npm-CLI)
如果要发布、管理软件包,需要在网站上注册账户,然后通过网站来管理、发布。但一般用户不需要这些操作,一般用户就是用 npm-CLI来安装第三方软件包,如 jQuery、vue等,所以只要学会使用 npm-CLI几个最常用的命令就可以了。
搜索包(package)
绝大部分开发者是使用别人的包,比如下载和使用jQuery,要搜索自己需要的包最简单体验最好的方式,就要从 npm 网站搜索 搜索栏开始。
安装 npm-CLI
安装 Node.js 的时候会自动将 npm 也安装在本地,并且 npm 就是 Node.js 的包管理工具(node package manager 的缩写)。ref
所以,安装Node.js默认就会安装npm,安装npm最简单的方式就是安装node。ref
安装完成之后,输入如下命令,如果能看到版本号,则安装完成。
$ npm -v
$ npm -version
6.12.1
node.js 默认安装路径是:C:\Program Files\nodejs\
在 nodejs 的目录下,有一个 node_modules 文件夹,里面存放是全局 npm 包
CLI 常用的命令
初始化包描述文件 - init
$ npm init -y
配置文件就是 package.json
使用 init 命令就会在当前目录下创建一个 package.json 文件,-y 参数是创建一个默认文件,如果不使用这个参数,则需要手动填写配置,否则都是用默认配置,默认配置如下。
{
"name": "npm",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
新的项目一定要先 init 再做其他操作,否则在安装包的时候,会自动往父级目录查找这个配置文件。
安装一个包 - install
install 命令将会安装软件包,以及该软件包依赖的所有软件包也会被安装。下面是4种常用的写法:
- 本地安装
package.json列为依赖项的所有包 - 本地安装一个包,默认是:本地安装,安装最新版本
- 本地安装一个包,指定版本号
- 全局安装一个包,全局安装
$ npm install
$ npm install <package_name>
$ npm install <package_name>@<version>
$ npm install <package_name> -g
npm install <package_name>
使用 npm install <package_name> 命令,可以本地安装一个软件包,比如安装一个 jQuery 包:
$ npm install jquery
也可以一次安装多个安装包:
$ npm install jquery bootstrap
npm 执行 install 命令会有2个重要的步骤:
- 修改
package.json的dependencies属性,加入软件包信息。 - 安装软件包到
package.json同一层目录下node_modules文件夹内。
dependencies 属性
dependencies /dɪ'pɛndənsi/ n. 依赖关系
npm 执行 install 命令首先查找 package.json 文件,从当前路径开始查找,一层一层往上,直到根目录,如果没有找到则在当前路径夹创建一个。
找到 package.json 文件之后,会修改 package.json 的 dependencies 属性,新增一个依赖包信息到该属性。。package.json 中的 dependencies 属性用于描述依赖包的信息。
$ npm install jquery bootstrap
执行完上面的命令之后,再查看 package.json 文件,多了bootstrap 和 jQuery 两条依赖项:
// package.json 文件的 dependencies 属性
{
//...
"dependencies": {
"bootstrap": "^4.4.1",
"jquery": "^3.4.1"
}
}
node_modules 目录
软件包会被安装在 package.json 同层目录的 node_modules 目录。
>
node_modules
bootstrap
jQuery
package.json
package-lock.json
npm install (no args)
如果已经有 package.json 文件,则直接执行 install 命令,会自动把 package.json 文件中的所有依赖项都安装到 node_modules 目录。
$ npm install
所以上传代码到服务器的时候,只要上传 package.json 文件即可,不需要上传node_modules 目录。从服务器下载代码之后,只要执行 install 指令就可全部安装。
npm install <name>@<version>
可以通过 @ 符号指定要安装的版本号:
- 指定小版本号则安全安装指定版本号
- 只指定大版本号,则安装大版本号下最新的版本
- 已安装的包要改版本,直接
install就可以,不需要卸载
$ npm install jquery@3.1.1
$ npm ls jquery
`-- jquery@3.1.1
$ npm install jquery@3
$ npm ls jquery
`-- jquery@3.4.1
全局安装包 -g
install 有 2 种方式安装 npm 包:本地安装和全局安装
- 本地安装:安装在当前目录下,别的目录访问不到。
npm install命令的默认行为。 - 全局安装:安装在 node.js 的安装目录下,npm 在任何目录下都能访问这个包。使用参数
-g
$ npm install webpack -g
全局安装具体安装到哪个目录下可以看输出信息,我是安装在 C:\Users\lucio\{user}\Roaming\npm\node_modules 目录下。
检测
安装完成后如下方式可以检测是否安装成功:
查看
npm的输出信息到
node_modules的文件夹下查看是否有软件包。查看
package.json文件的dependencies的属性是否已有软件包的信息。{
"dependencies": {
"bootstrap": "^4.4.1",
"jquery": "^3.4.1"
}
}
devDependencies
在 package.json 中 dependencies 是一个很重要的属性,表示依赖关系。它的作用是你或者别人使用别人的包的时候,可以通过 npm install 命令一键安装所有依赖。
有一些包在终端也被依赖,如 jQuery,bootstrap 等。而有一些包是开发时候才需要的,终端用户并不需要,比如代码压缩、代码转换等。
在 npm install 指令后面输入配置 -D ,就可以配置到devDependencies 属性下。这是一个约定,只在开发过程中使用到的依赖包则使用 -D 配置到 devDependencies 属性下。
例如 Vue 和 Bootstrap 都是浏览器也需要的,而转换 Vue 模板的工具 vue-loader 和 vue-template-compiler 只有开发时候才需要。注意 -D 必须大写。
$ npm install vue bootstrap
$ npm i vue-loader vue-template-compiler -D
// 这是 package.json
{
"dependencies": {
"bootstrap": "^4.4.1",
"vue": "^2.6.11"
},
"devDependencies": {
"vue-loader": "^15.9.0",
"vue-template-compiler": "^2.6.11"
}
}
这些包(包括它们的依赖包)都被安装到 node_modules 目录下,不同的是,-D 依赖包被保存到了 devDependencies 属性下。
使用已安装的包
要根据情况,ES6和Node采用不同的规范
- require
- include
更新包 - update
$ npm update <package_name> [-g]
卸载 package - uninstall
$ npm uninstall <package_name> [-g]
列出包 - ls
$ npm ls
$ npm ls <package_name>
$ npm ls -g
帮助 - help
$ npm help
$ npm help <package_name>
管理配置 - config
npm config 命令要配合子命令一起使用。
$ npm config list
$ npm config get <key>
$ npm config get metrics-registry
$ npm config set <key>
$ npm config set registry http://registry.npm.taobao.org/
$ npm config set registry https://registry.npmjs.org/
alias
指令还有别名,比如 install,也可以使用 i 和 add,如下3条命令都是 install 操作:
$ npm install jquery
$ npm i jquery
$ npm add jquery
install i add
uninstall remove rm r un unlink
update up upgrade
ls list la ll
npm-cli文档:https://docs.npmjs.com/cli-documentation/
学习 NPM 最基础的指令的更多相关文章
- Docker学习(三): Dockerfile指令介绍
特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...
- 这几天开始,先学习一些 java 基础吧,学的有点累
这几天开始,先学习一些 java 基础吧,学的有点累
- Emacs学习心得之 基础配置
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Emacs学习心得之 基础配置 1.前言2.基础配置 一.前言 本篇博文记录了Emacs的一 ...
- Emacs学习心得之 基础操作
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Emacs学习心得之 基础操作 1.前言与学习计划2.Emacs基础操作 一. 前言与学习计 ...
- 如何学习FPGA?FPGA学习必备的基础知识
如何学习FPGA?FPGA学习必备的基础知识 时间:2013-08-12 来源:eepw 作者: 关键字:FPGA 基础知识 FPGA已成为现今的技术热点之一,无论学生还是工程师都希望 ...
- java与.net比较学习系列(2) 基础语言要素
这一篇从最基础的开始对比总结,说起基础语言要素,故名思义,就是学习语言的基础,主要内容包括标识符,关键字和注释.我想从以下几点进行总结,有区别的地方有都使用红色粗体字进行了总结. 1,标识符 2,关键 ...
- MyBatis:学习笔记(1)——基础知识
MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...
- AngularJS1.X学习笔记4-内置事件指令及其他
AngularJS为我们定义了一系列事件指令,方便我们对用户的操作作出响应.甚至他还有一个可选模块提供了触摸事件和手势事件的支持,为移动端开发提供了可能.现在开始学习一下AngularJS的事件指令. ...
- bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111
基础导航条 在Bootstrap框中,导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多.我们先来看导航条中最基础的一个--基础导航条. 使用方法: 在制作一个基础导航条时,主要分 ...
随机推荐
- 阿里P8面试官:如何设计一个扛住千万级并发的架构?
大家先思考一个问题,这也是在面试过程中经常遇到的问题. 如果你们公司现在的产品能够支持10W用户访问,你们老板突然和你说,融到钱了,会大量投放广告,预计在1个月后用户量会达到1000W,如果这个任务交 ...
- 【UE4 C++】 解析与构建 Json 数据
准备条件 Json 格式 { "Players":[ { "Name": "Player1", "health": 20 ...
- 【UE4 设计模式】单例模式 Singleton Pattern
概述 描述 保证一个类只有一个实例 提供一个访问该实例的全局节点,可以视为一个全局变量 仅在首次请求单例对象时对其进行初始化. 套路 将默认构造函数设为私有, 防止其他对象使用单例类的 new运算符. ...
- Canal Server发送binlog消息到Kafka消息队列中
Canal Server发送binlog消息到Kafka消息队列中 一.背景 二.需要修改的地方 1.canal.properties 配置文件修改 1.修改canal.serverMode的值 2. ...
- Noip模拟51 2021.9.12
T1 茅山道术 考场上卡在了一个恶心的地方, 当时以为每次施法都会产生新的可以施法的区间,然后想都没细想, 认为不可做,甚至$dfs$也无法打,考后一问发现是自己想多了.. 新产生的区间对答案根本没有 ...
- 嵌入式单片机stm32之DMA实验
一. 对于大容量的STM32芯片有2个DMA控制器,控制器1有7个通道,控制器2有5个通道 每个通道都可以配置一些外设的地址. 二. 通道的配置过程: 1. 首先设置CPARx寄存器和CMARx寄存器 ...
- IDA*、操作打表、并行处理-The Rotation Game HDU - 1667
万恶之源 优秀题解 用文字终究难以穷尽代码的思想 思路 每次操作都有八种选择,相当于一棵每次延申八个子节点的搜索树,故搜索应该是一种方法.而这题要求求最少步数,我们就可以想到可以试试迭代加深搜索(但其 ...
- 一个C#开发搭建Android框架的心路历程
前言 Java框架实在是太多了,因为是初学乍练,所以,只好以百度为标准选择框架了. Java的框架文章太难写了,因为他引用了太多框架,而没一个框架都有很繁琐的配置,把每个框架都写一遍,就等于写书了:所 ...
- X264编码测试验证
之前在做一个rtsp直播需求,其中一个方案是要用的x264来对摄像头数据进行实时编码推流,摄像头帧率是25fps,为了验证方案的可行性,先对x264的编码速度进行一个测试研究,再确认是否要采用此方案. ...
- Luogu P4390 [BOI2007]Mokia 摩基亚 | CDQ分治
题目链接 $CDQ$分治. 考虑此时在区间$[l,r]$中,要计算$[l,mid]$中的操作对$[mid+1,r]$中的询问的影响. 计算时,排序加上树状数组即可. 然后再递归处理$[l,mid]$和 ...