node.js学习11--npm的使用

npm的使用

node.js通过自带的npm(node package manager)工具来管理第三方模块。

  • npm 全称 Node Package Manager(node 包管理器),它的诞生是为了解决 Node 中第三方包共享的问题。
  • npm 命令行工具,不需要单独安装。在安装Node的时候,会连带一起安装npm
  • npm网站,是一个第三方模块store,可以自由地下载,上传模块。
  • 官网

包(package)与模块关系

在这里插入图片描述

  • node.js中一个模块就是一个单独的js文件。
  • 包是多个模块的集合。一个模块能够解决的问题比较单一,一个包中有多个模块。
  • npm 管理的单位就是包。

通过npm命令行下载第三方模块(包)

分成三步:

  • 初始化项目。如果之前已经初始化,则可以省略。
  • 安装包。 npm install 包名
  • 引入模块,使用。

第一步:初始化项目

进入到项目所在的根目录下,启动cmd命令行窗口(按下shift键,点击右键,在弹出的菜单中选择在此处打开命令行)

输入如下命令:

npm init --yes
# 或者是 
npm init -y

init命令用来在根目录下生成一个package.json文件,该文件中记录了当前项目的基本信息。它是一切工作的开始。

npm init 命令

在某个目录下开启cmd命令行窗口,输入如下命令:

npm init 

它会启动一个交互式的程序,填入一些关于本项目的信息。最后会生成一个package.json文件。

如果希望直接采用默认信息,可以使用:

npm init --yes
# 或者是 
npm init -y

说明:

  • 这个命令只需要运行一次,它的目的仅仅是生成一个package.json文件。而这个package.json文件在后期是可以手动修改的。
  • 如果项目根目录下已经有了package.json文件,就不需要再去运行这个命令了。
  • 一般从网上clone下来的项目都会包含这个文件。

package.json文件

它整体是一个json字符串,是对当前项目的整体描述。其中最外层可以看作是一个js的对象(每一个属性名都加了"",这就是一个典型的json标记)。这个文件中有非常多的内容:

  • name,表示这个项目的名字。如是它是一个第三方包的话,它就决定了在require()时应该要写什么内容

  • version,版本号

第二步:安装包

生成了package.json文件之后,就可以来安装第三方包了。在npm官网中,有上百万个包,供开发者使用。

在这里插入图片描述

node_modules文件夹

这个文件夹中保存着从npm中下载来的第三方包。在使用npm install 命令时,会修改这个文件夹中的内容。具体如下,当键入npm install XXX之后(这里假设这个XXX包是存在的,也没有出现任何的网络错误):

  1. 如果有package.json

    (1) 修改package.json文件。根据开发依赖和生产依赖的不同,决定把这句记录加在devDependencies或者是dependencies列表中。

    (2) 修改node_modules文件夹

    1. 如果有node_modules文件夹,则直接在下面新建名为XXX的文件夹,并从npm中下来这个包。
    2. 如果没有node_modules,则先创建这个文件夹,再去下载相应的包。
  2. 如果没有package.json。会给一个警告信息

说明

  • 建议先初始化项目,创建package.json文件之后,再去install包。
  • 在分享代码时,一般不需要把node_modules也给别人(就像不需要把jquery.js给别人,因为他们可以自己去下载)。别人拿到代码之后,先运行npm install(后面不接任何的包名),自己去安装依赖包。

全局安装包和本地安装包

通过npm install 命令来安装包,简单说就是把包从npm的官网上下载到自己的电脑中。具体这个包下载到哪里了,还是有一点讲究的。

分成两类:

  • 全局安装: 包被安装到了系统目录(一般在系统盘的node_modules中),本机都可以使用。
    • 命令:npm install -g 包名
  • 局部安装(或者叫本地安装),包被安装在当前项目的根目录下,与package.json同级目录的node_modules。就只在这个项目中可以使用。
    • 命令:npm install 包名

全局安装nrm包

因为下载包时,默认是从npm官网(国外的网站)下载,速度可能会比较慢。在npm有一个工具可以来手动设置从哪里去下载包。这个工具就是nrm。这个工具是帮助切换安装包的来源的,不应该只限于某个具体的项目,所以采用全局安装的方式来安装它。

nrm包的地址

nrm的使用方法:

# 第一步: 全局安装 
npm install nrm -g

# 第二步:列出所有的源信息
# (*)标注的就是当前使用的源
nrm ls

# 第三步:根据需要切换源 
# 例如:指定使用taobao源
nrm use taotao

全局包与本地包的区别

  • 全局安装的包一般可提供直接执行的命令。通常对一些工具类的包采用这种方式安装,如:

    gulp, nodemon, live-server,nrm等。

  • 本地安装的包是与具体的项目有关的, 需要在开发过程中使用这些具体的功能。

提示

  • 要用到该包的命令执行任务的就需要全局安装。
  • 要通过require引入使用的就需要本地安装。

require的加载机制

在使用一个模块时,会使用require命令来加载这个模块。以加载一个自定义模块为例,require(文件名)的效果是:

  1. 执行这个文件中的代码
  2. 把这个文件中的module.exports对象中的内容返回出来。

以如下代码为例:

// moudule1.js
var a = 1;
var b = 2;
console.log(a+b);
var c = a+b;
module.exports = {
    data: c
}

在index.js中使用模块

// index.js
const obj = require('./moudule1.js');
console.log(obj);

// 这里的obj对象就是moudule1.js中的module.exports对象
  • require 优先加载缓存中的模块。
  • 如果是相对路径,则根据路径加载自定义模块,并缓存。
    • require('./main') 省略扩展名的情况。
    • 先加载 main.js,如果没有再加载 main.json,如果没有再加载 main.node(c/c++编写的模块)。
  • 如果不是相对路径,则加载核心模块,并缓存。
  • 如果不是自定义模块,也不是核心模块,则加载第三方模块。
    • node 会去本级 node_modules 目录中找。
    • 如果在 node_modules 目录中找到 moment 目录,则加载该模块并缓存。
    • 如果过程都找不到,node 则取上一级目录下找 node_modules 目录,规则同上。
    • 如果一直找到代码文件的系统的根路径还找不到,则报错.

npm 常用命令

  • 查看

    npm --version
    npm -v            # 查看npm 版本
    npm root -g       # 查看全局包的安装目录
    
  • 升级 npm (npm自己安装自己)

    npm install npm --global   
    # 或者
    npm install npm -g
    
  • 初始化 package.json

    npm init -y        
    # 或者
    npm init --yes
    
  • 安装第三方包

    # 安装package.json中列出的所有的包
    npm install
    
    # 全局安装
    npm install 包名 -g
    
    # 本地安装,没有指定版本,默认安装最新的版本
    npm install 包名
    # 一次安装多个包
    npm install 包名1 包名2 包名3
    # 安装指定版本的包
    npm install 包名@版本号
    
    # 简写,把install简写成 i
    npm i 包名
    
  • 删除已安装的包

    npm uninstall  本地安装的包名
    npm uninstall -g  全局安装的包名
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值