什么是 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来安装第三方软件包,如 jQueryvue等,所以只要学会使用 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 常用的命令

CLI documentation

初始化包描述文件 - 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.jsondependencies 属性,加入软件包信息。
  • 安装软件包到 package.json 同一层目录下 node_modules 文件夹内。
dependencies 属性

dependencies /dɪ'pɛndənsi/ n. 依赖关系

npm 执行 install 命令首先查找 package.json 文件,从当前路径开始查找,一层一层往上,直到根目录,如果没有找到则在当前路径夹创建一个。

找到 package.json 文件之后,会修改 package.jsondependencies 属性,新增一个依赖包信息到该属性。。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.jsondependencies 是一个很重要的属性,表示依赖关系。它的作用是你或者别人使用别人的包的时候,可以通过 npm install 命令一键安装所有依赖。

有一些包在终端也被依赖,如 jQuerybootstrap 等。而有一些包是开发时候才需要的,终端用户并不需要,比如代码压缩、代码转换等。

npm install 指令后面输入配置 -D ,就可以配置到devDependencies 属性下。这是一个约定,只在开发过程中使用到的依赖包则使用 -D 配置到 devDependencies 属性下。

例如 VueBootstrap 都是浏览器也需要的,而转换 Vue 模板的工具 vue-loadervue-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,也可以使用 iadd,如下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 最基础的指令的更多相关文章

  1. Docker学习(三): Dockerfile指令介绍

    特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...

  2. 这几天开始,先学习一些 java 基础吧,学的有点累

    这几天开始,先学习一些 java 基础吧,学的有点累

  3. Emacs学习心得之 基础配置

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Emacs学习心得之 基础配置 1.前言2.基础配置 一.前言 本篇博文记录了Emacs的一 ...

  4. Emacs学习心得之 基础操作

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Emacs学习心得之 基础操作 1.前言与学习计划2.Emacs基础操作 一. 前言与学习计 ...

  5. 如何学习FPGA?FPGA学习必备的基础知识

    如何学习FPGA?FPGA学习必备的基础知识 时间:2013-08-12 来源:eepw 作者: 关键字:FPGA   基础知识       FPGA已成为现今的技术热点之一,无论学生还是工程师都希望 ...

  6. java与.net比较学习系列(2) 基础语言要素

    这一篇从最基础的开始对比总结,说起基础语言要素,故名思义,就是学习语言的基础,主要内容包括标识符,关键字和注释.我想从以下几点进行总结,有区别的地方有都使用红色粗体字进行了总结. 1,标识符 2,关键 ...

  7. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  8. AngularJS1.X学习笔记4-内置事件指令及其他

    AngularJS为我们定义了一系列事件指令,方便我们对用户的操作作出响应.甚至他还有一个可选模块提供了触摸事件和手势事件的支持,为移动端开发提供了可能.现在开始学习一下AngularJS的事件指令. ...

  9. bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111

    基础导航条 在Bootstrap框中,导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多.我们先来看导航条中最基础的一个--基础导航条. 使用方法: 在制作一个基础导航条时,主要分 ...

随机推荐

  1. 阿里P8面试官:如何设计一个扛住千万级并发的架构?

    大家先思考一个问题,这也是在面试过程中经常遇到的问题. 如果你们公司现在的产品能够支持10W用户访问,你们老板突然和你说,融到钱了,会大量投放广告,预计在1个月后用户量会达到1000W,如果这个任务交 ...

  2. 【UE4 C++】 解析与构建 Json 数据

    准备条件 Json 格式 { "Players":[ { "Name": "Player1", "health": 20 ...

  3. 【UE4 设计模式】单例模式 Singleton Pattern

    概述 描述 保证一个类只有一个实例 提供一个访问该实例的全局节点,可以视为一个全局变量 仅在首次请求单例对象时对其进行初始化. 套路 将默认构造函数设为私有, 防止其他对象使用单例类的 new运算符. ...

  4. Canal Server发送binlog消息到Kafka消息队列中

    Canal Server发送binlog消息到Kafka消息队列中 一.背景 二.需要修改的地方 1.canal.properties 配置文件修改 1.修改canal.serverMode的值 2. ...

  5. Noip模拟51 2021.9.12

    T1 茅山道术 考场上卡在了一个恶心的地方, 当时以为每次施法都会产生新的可以施法的区间,然后想都没细想, 认为不可做,甚至$dfs$也无法打,考后一问发现是自己想多了.. 新产生的区间对答案根本没有 ...

  6. 嵌入式单片机stm32之DMA实验

    一. 对于大容量的STM32芯片有2个DMA控制器,控制器1有7个通道,控制器2有5个通道 每个通道都可以配置一些外设的地址. 二. 通道的配置过程: 1. 首先设置CPARx寄存器和CMARx寄存器 ...

  7. IDA*、操作打表、并行处理-The Rotation Game HDU - 1667

    万恶之源 优秀题解 用文字终究难以穷尽代码的思想 思路 每次操作都有八种选择,相当于一棵每次延申八个子节点的搜索树,故搜索应该是一种方法.而这题要求求最少步数,我们就可以想到可以试试迭代加深搜索(但其 ...

  8. 一个C#开发搭建Android框架的心路历程

    前言 Java框架实在是太多了,因为是初学乍练,所以,只好以百度为标准选择框架了. Java的框架文章太难写了,因为他引用了太多框架,而没一个框架都有很繁琐的配置,把每个框架都写一遍,就等于写书了:所 ...

  9. X264编码测试验证

    之前在做一个rtsp直播需求,其中一个方案是要用的x264来对摄像头数据进行实时编码推流,摄像头帧率是25fps,为了验证方案的可行性,先对x264的编码速度进行一个测试研究,再确认是否要采用此方案. ...

  10. Luogu P4390 [BOI2007]Mokia 摩基亚 | CDQ分治

    题目链接 $CDQ$分治. 考虑此时在区间$[l,r]$中,要计算$[l,mid]$中的操作对$[mid+1,r]$中的询问的影响. 计算时,排序加上树状数组即可. 然后再递归处理$[l,mid]$和 ...