什么是 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. netty系列之:让TLS支持http2

    目录 简介 TLS的扩展协议NPN和ALPN SslProvider ApplicationProtocolConfig 构建SslContext ProtocolNegotiationHandler ...

  2. 网络通信IO的演变过程(二)(一个门外汉的理解)

    2.NIO 当与别人谈论NIO时,一定要弄清楚别人说的NIO是指哪个含义? NIO有2种含义: 1.NonBlocking IO,基于操作系统谈 2.Java New IO,基于Java谈 我们这里主 ...

  3. 【UE4】GAMES101 图形学作业3:Blinn-Phong 模型与着色

    总览 在这次编程任务中,我们会进一步模拟现代图形技术.我们在代码中添加了Object Loader(用于加载三维模型), Vertex Shader 与Fragment Shader,并且支持了纹理映 ...

  4. Java RMI学习与解读(一)

    Java RMI学习与解读(一) 写在前面 本文记录在心情美丽的一个晚上. 嗯.就是心情很美丽. 那为什么晚上还要学习呢? emm... 卷... 卷起来. 全文基本都是根据su18师傅和其他师傅的文 ...

  5. Java:包装类小记

    Java:包装类 对 Java 中的 包装类 这个概念,做一个微不足道的小小小小记 基本数据&包装类 四类八种基本数据类型: 数据类型 关键字 内存占用 取值范围 字节型 byte 1个字节 ...

  6. Spring父子上下文的使用案例

    Spring父子上下文的使用案例 一.背景 二.需求 三.实现步骤 1.基础代码编写 2.测试结果 四.小彩蛋 五.完整代码 一.背景 最近在看在使用Spring Cloud的时候发现,当我们通过Fe ...

  7. cm0 逆向分析

    目录 cm0 逆向分析 前言 Strings工具复习 String工具使用说明 Strings工具解cm0题 cm0 逆向分析 前言 Emmmmm,我假装你看到这里已经学过了我的<恶意代码分析实 ...

  8. DeWeb - 物资流转管理系统 - 开发1

    近期一个朋友提到要做一个安卓手机上物资流转管理系统 准备采用deweb练练手! 大致的计划是先做成手机版网页,然后加壳做成APP 一. 登录 界面基本设计如下 用户表设计如下: 待续

  9. Spring一套全通4—持久层整合

    百知教育 - Spring系列课程 - 持久层整合 第一章.持久层整合 1.Spring框架为什么要与持久层技术进行整合 1. JavaEE开发需要持久层进行数据库的访问操作. 2. JDBC Hib ...

  10. 设计模式--策略模式Strategy

    策略模式 算法经常需要被改变==使用S 节省资源(很多if else if-.不会被执行,却会被装载到代码段) 动机 在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到 ...