nodejs基础:npm的常用命令以及使用

npm(Node Package Manager) 是 Node.js 标准的软件包管理器。如果了解centos的话,可以将其理解为类似yum.

对于Node而言,NPM帮助起完成了第三方模块的发布,安装和依赖。而借助这个npm,Node与第三方模块之间形成了很好的生态系统。

安装好nodejs会自带安装好npm.所以只要搭建好Node环境,不需要另外安装NPM了。

命令

现在看一下起常用的命令:

演示的环境是window是系统,然后再终端输入后(cmd窗口)

命令描述
npm帮助说明
npm init初始化模块环境创建
npm -v查看npm的版本
npm search 包名搜索模块包是否存在
npm install 包名 (或简写 npm i 包名) [ --save| --save–dev ]在当前的目录安装包
npm install 包名 -g(或简写 npm i 包名 -g)全局模式安装包
npm uninstall 包名卸载
npm update 包名更新
npm info 包名查看包的信息
npm outdated检测包过期有那些
npm config ls查看node的配置信息

为了方便演示:将路径cd在:F:\test

npm -v

这个现实npm的版本,常用来查看是否安装了npm。

在这里插入图片描述

npm

这个是查看npm有哪些命令的一个命令。

在这里插入图片描述

npm init

其实这个初始化,我们先试一下:如下

在这里插入图片描述

在初始化的时候,需要依次输入包名,版本等信息(如果想要快速初始化可以:npm init -y ,就需要依次输入这些信息了),图中没有输入确定创建,所以可以看出文件夹下面是空的。

然后输入确定后如下:

在这里插入图片描述

可见初始化的时候,生成了一个package.json文件,然后看一下这个文件的内容:

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "小猪弟",
  "license": "ISC"
}

可以看出初始化的时候会出事一个模块的配置信息,其是不是有点像是开发的软件版本信息的感觉?

如果我们在试着来一个命令插入某个包呢?先来一个插入命令,后面再具体聊这个命令。

插入一个math模块如下:

npm i math

在这里插入图片描述

可以看出多了一个文件node_modules,以及又有了一个package-lock.jsons文件。

其中node_modules文件放了使用的第三方的包或者说是模块。

下面来聊一下两个json。

package.json 和 package-lock.json

在这里插入图片描述

现在需要解释一下package.jsonpackage-lock.json的意义以及区别了

先看一下package.jsonpackage-lock.json文件的内容:

在这里插入图片描述

package.json中字段解析。

  • name:项目名,也就是在使用npm init 初始化时取的名字,但是如果使用的是npm init -y 快速初始化的话,那这里的名字就是默认存放这个文件的文件名;

  • version:版本号;

  • descrotion:项目描述信息,简单描述一下功能

  • private:希不希望授权别人以任何形式使用私有包或未发布的;

  • scripts :指定来运行脚本命令的npm命令的缩写,尝试修改文package.json中的scripts为:

    // 首先同文件下创建一个 1.js
    //内容为:console.log('测试')
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
    	"start":"node ./1.js"
      }
    

    然后运行一下 npm run start

在这里插入图片描述

  • dependencies:指定了项目运行时所依赖的模块;这个命令是再插入第三方模块的时候: npm i 包名 --save。不过新版本不写默认是带有–save参数。

  • devDependencies:指定项目开发时所需要的模块,也就是在项目开发时才用得上,一旦项目打包上线了,就将移除这里的第三方模块;其插入的命令: npm i 包名 --save-dev,的时候会生成。

  • author: 模块作者

  • license:证书

package-lock.json:是在运行npm install时生成的一个文件,用于记录当前状态下项目中实际安装的各个package的版本号、模块下载地址、及这个模块又依赖了哪些依赖。

以前的版本是没有这个package-lock.json文件的,毕竟package.json已有这个开发模块依赖了哪些模块了,上传到一些共享平台(比如:github)上。就不需要上传第三方引用包了,毕竟可以通过这个json配置,然后下载即可。不然开发1M的代码,引用的第三方包有30M,也太浪费共享空间了。

但是这个又发现了一个问题,那就是第三方的包是不断迭代的,有些方法名字变了或者不用了, 而引用新版本会出现很多问题,比如报错等;package.json 仅会申请依赖包及其版本范围。 而 package-lock.json文件会申明具体的请求地址,具体的版本号,甚至 sha 值(怕别人修改已有包)。package-lock.json文件记录的依赖信息比package.json 更全。简单的说, 同一个 package.json 在两次 install 的时候安装的依赖可能不一样。 但是 package-lock.json文件可以保证不管几次安装, 安装的依赖都是一样的。

既然有这两个文件,那如何用

其实这个涉及到npm install命令,这个下面聊这个问题。

npm i | install

npm install 可以简写为npm i 所以下面直接用npm i 进行演示。

下载特定的包

在包版本可能需要初始化有了package.json然后才能插入包,不过现在新版本npm i 包名可以创建快速的package.json文件,以及新版本中多了一个package-lock.json这个锁定版本的文件。

还有一种下载的下载的上海可以定义版本如下写:

npm i  包名[@版本号]

首先常用的安装第三包的命令:

// 这个目前不用写 --save 因为默认就是
npm i math 

这个是快捷创建package.json的方式得到如下:

// 可以看出自己包名以及包的版本信息,只有引入的第三方包的信息 所以可以快捷创建package.json,因为无法显示自己写的包的信息
{
  "dependencies": {
    "math": "^0.0.3"
  }
}

这个时候有没有注意到一个神奇的地方,那就是插入math版本号前面有一个**^**.有什么意义吗?

首先说一下版本号的规范:一般版本号有三个数子带有不同的意义。格式如下:

主版本号.子版本号.修正版本号
  • 主版本号:当功能模块有较大的变动,比如增加多个模块或者整体架构发生变化。此版本号由项目决定是否修改。
  • 子版本号:当功能有一定的增加或变化,比如增加了对权限控制、增加自定义视图等功能。此版本号由项目决定是否修改。
  • 修订版本号:一般是 Bug 修复或是一些小的变动,要经常发布修订版,时间间隔不限,修复一个严重的bug即可发布一个修订版。此版本号由项目经理决定是否修改。

版本前的特殊符号:

  • 符号 ^ :

    例子为:

    {
      "dependencies": {
        "test": "^2.0.3"
      }
    }
    

    表示:只会限定版本号的主版本号倍锁定,然后这个主版本号下最新的版本。

  • 符号 ~ :

    {
      "dependencies": {
        "test": "~2.0.3"
      }
    }
    

    表示:只会限定版:主版本号和子版本号,然后安装最新版,也就是安装以主版本号和子版本号下的最新版本。

  • 符号 ***** :

    {
      "dependencies": {
        "test": "*"
      }
    }
    

    表示安装最新版本。

不过一般package.json这个文件一般不会手动调正。

当然如果下载第三包带另一个参数:

npm i 包名 --save-dev

这个换一个第三方包:

npm i md5 --save-dev

这样看一下package.json如下:

// 因为没有采取初始化后再插入包,而是听过install 快速插入包。所以这个里面没有自定义包名等信息
{
  "dependencies": {
    "math": "^0.0.3"
  },
  "devDependencies": {
    "md5": "^2.3.0"
  }
}

可以看出dependenciesdevDependencies 都是写出这个模块用到的第三放的包,但是两者又有一些区别:

  • dependencies : 程序正常运行需要的包,也就是这个包开发的作用,或者生效必须依赖的包。
  • **devDependencies ** :是开发环境需要的包,比如 一些单元测试的包之类的,而不是此开发的目的而依赖的包
安装包全局(-g)

上面下载的第三方包的时候,是在开发的路径下进行下载的。而且也只能在目标在这个路径下才可以调用,因为一般非全局的变量,调用第三方规则是:

这个路径下的 node_modules下的包,如果没有就找路径的父文件夹中是否有node_modules,依次类推。

而全局的包,却是无论在那个文件下都可以使用,当然也可以查看默认的安装路径:

// 查看默认全局安装的路径
npm config ls;
// 也可以修改这个路径的地址
npm config set prefix  '修改的存储地址'

为什么要有一个全局呢?因为有些第三方工具,需要全部路径下可以用,比如修改镜像地址的工具:nrm。 这个类似与linux的镜像一个道理,那就是访问海外的镜像,有可能会下载很慢,可以通过这个配置镜像的地址,当然也可以通过命令修改镜像的地址但是使用nrm的更方便。

如果不使用nrm直接用命令修改地址如下:

npm config set registry 国内镜像地址

nrm (NPM registry manager)是 NPM 的镜像源管理工具,使用它可以快速切换 npm 命令镜像源。下面试一下:

// 下载nrm 这个工具
npm i nrm -g

虽然在F:\test中插入的,但是其没有在这个路径下,如果想知道在哪里,就通过上面提到的查看默认的全局地址试一下,不再演示。

可以看下nrm下有哪些源:

nrm ls

在这里插入图片描述

其实正常的化,如果使用了那个源,前面有一个星号的,我这个可能出现了bug,没有这个星号,所以网上找一个带有星号图看一下:

在这里插入图片描述

默认是npm源头,切换源可以如下操作:

nrm use taobao

在这里插入图片描述

当然nrm还有其它很多命令,下面再说两个:

//添加源
nrm add <registry> <url>
// 删除源
nrm del <registry> 
      
通过json下载包

前面一直说到两个json文件,一直说上传共享的时这个两个json有什么用?

如下:

在这里插入图片描述

如何用?很简单:

//  引用的时候没有
npm i

在这里插入图片描述

这个就要说到package.jsonpackage-lock.json在这个导入环境中所用的第三方包都起到什么作用。

首先导入的时候先检测package.json中对第三方包的版本限制的限制, 这个就是前面所说的在版本前面的特殊符号。然后再检测package-lock.json,如果其中第三方包的版本在package.json限制的范围之内,那就使用package-lock.json锁定的版本。如package-lock.json的锁定版本不在package.json范围内,就按照package.json限定版本进行下载,然后更新package-lock.json中的版本信息。

npm uninstall

有些第三方的包,可以通过这个命令进行移除:

来一个例子:

// 如果是全局 -g
npm uninstall  md5 

在这里插入图片描述

其它命令简单演示

其它的命令就直接演示一些使用常用命令,相对来说没必要聊太多。

搜索需要的包:

npm search 包名

在这里插入图片描述

更新包的版本:

npm update 包名

在这里插入图片描述

可以查看官网已经提示过期的第三方模块有哪些:

npm outdated

在这里插入图片描述

因为我刚按照以math模块,不可能过期,如果有过期的就会在这个地方显示出来。

查看包的信息:

npm info 包名

在这里插入图片描述

当然npm还有很多神奇的操作,如果需要了解可以看一些官网:https://www.npmjs.cn/

而目前为node的聊的后面一些自己的模块,第三方模块使用目前这些命令够用了。不够的话,以后再聊。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值