node基础——包简介、npm、镜像服务器、yarn

CommonJS的包规范

CommonJS的包规范允许我们将一组相关的模块组合到一起,形成一组完整的工具。
CommonJS的包规范由包结构包描述文件两个部分组成。
包结构——用于组织包中的各种文件
包描述文件——抽述包的相关信息,以供外部读取分析

包结构

包实际上就是一个压缩文件,解压以后还原为目录。
符合规范的目录,应该包含如下文件∶

  • package.json:描述文件(必须有
    包的说明书,介绍包的名字、作用、内容
  • bin:可执行二进制文件(一般情况下没有
  • lib:js代码
  • doc:文档,功能性描述
  • test:单元测试

只有package.json是必须的,其他都可有可无。

包描述文件

包描述文件用于表达非代码相关的信息,它是一个JSON格式的文件。
package.json ,位于包的根目录下,是包的重要组成部分。

package.json中的字段:
name、description、 version、keywords、maintainers、contributors、bugs、licenses、repositories、dependencies、homepage、os、cpu、engine、builtin、directories、implements、scripts、author、bin、main、devDependencies。
eg:
packsge.json:

{
    
    
    "name":"01.node",
    "version": "0.0.1"
}

注意:package.json中不能有注释。

npm

当有很多包的时候我们需要对包进行管理,使用的就是npm工具。
npm的全称是nodePackageManager,即node的包管理工具。

对于Node而言,npm帮助其完成了第三方模块(即:包)的发布、安装和依赖等。借助npm,Node与第三方模块之间形成了很好的一个生态系统。
就是说npm可以将我们写的包发布到网络上,它来帮助我们管理包的发布和下载。我们最常用的功能也是通过npm将包下载下来。

npm的安装

下载node会自动安装npm

扫描二维码关注公众号,回复: 14220498 查看本文章

npm的命令

  • npm -v :查看版本
  • npm:帮助说明
  • npm search 包名:搜索模块包
    eg:在这里插入图片描述
  • npm init:初始化文件夹,会初始化创建package.json
    在这里插入图片描述
    package.json:
{
    
    
  "name": "text",
  "version": "1.0.0",
  "description": "this is a text",
  "main": "index.js",
  "scripts": {
    
    
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

  • npm install 包名:在当前目录安装包
    install可以简写成i
    eg:
    在这里插入图片描述
    下载后的文件:
    在这里插入图片描述
    需要注意的是下载的时候要确保文件夹中有package.json文件,使npm将下载的的包添加到package.json中的依赖中去。如果文件夹中没有package.json就会向上一级文件夹中寻找package.json文件,直到找到就会在该问价夹中进行包的下载。如果找到根目录依然没有package.json文件就会在当前文件夹创建package.json文件进行下载。

这里的package-lock.json文件,是指确定下载包的版本。意思是你的版本可以更新,但是别人进行依赖的时候还是以用package-lock.json文件中指定的版本进行下载,这样就可以避免自己更新对别人的依赖产生影响。

  • npm install 包名 -g:全局模式安装包
    全局安装的包一般都是一些工具,在计算机中用的,而不是项目中。

  • npm install 包名 --save:将安装包并添加到依赖中
    (现在进行了更新,不添加--save也会自动添加到依赖中)
    优点是在上传文件的时候不需要将包也上传,当我们将项目从网上拽下来的时候,只需要执行 npm install命令,就可以通过依赖可以自动下载。

  • npm install 包名 --save-dev:表示下载的依赖包是在开发的时候使用的,标记作用

  • npm install下载当前项目所依赖的包
    npm install会根据package.json文件中的内容将依赖的包进行下载。
    所以在导入别人的项目的时候,运行前先执行该命令下载相应的依赖包。

  • npm uninstall 包名 删除包

  • npm remove 包名 删除包
    remove 可以简写成 r

  • npm list 列举当前目录下的安装包

  • npm info 包名 查看包的详细信息

  • npm info 包名 version 获取包的最新版本

  • npm install 包名@版本号安装指定版本

  • npm outdated检查当前文件夹的包是否已经过时
    eg:一个文件夹下载了math、simple-statistics和md5三个包:
    在这里插入图片描述在这里插入图片描述
    显示的都是命不是最最新的
    Current:是当前下载完成的版本
    wanted:是package.json中dependencies所写的版本号

      "dependencies": {
    
    
        "math": "^0.0.3",
        "md5": "^2.3.0",
        "simple-statistics": "^3.0.0"
      }

如果将package.json中dependencies所写的版本号修改为2.3.0再次运行npm outdated,出现如下结果:(不过我们一般不直接修改package.json文件)
在这里插入图片描述

补充: dependencies中版本号前面的符号代表的含义

  • ^表示如果直接npm install 将会安装确定第一位的最新的版本
    即:"md5": "^2.1.0",会安装 [email protected],^只确定是版本号的第一位是2,无论2.X.X写的是几都会选择2.X.X的最新版本
  • 表示如果直接npm install 将会安装确定前两位的最新的版本
    即:"md5": "~2.1.0",会安装 [email protected],~确定是版本号的前两位是2.1,最后一位取最新版本。
  • * 表示如果直接npm install 将会安装包的最新版本
  • 版本前面没有符号就是下载指定的版本号。

全局安装与局部安装的区别

  • 全局安装:
    全局安装安装的包可以在任何一个node项目中进行引用,即全局安装安装安装在计算机环境中。
    那么它的package.json文件就在计算机环境中,这样就会产生一个问题,我们传项目的时候不会吧项目外面的package.json文件进行传递,这样别人引入我们的文件的时候就看不到全局下载的包,也就无法对在全局下载的包进行引用了。
    所以我们一般不在全局安装包,除非是一些使用工具。
  • 局部安装:
    局部安装的包在执行安装命令的问价夹下可以使用,出了文件夹就不可以进行使用了。

在vscode中下载包并使用的过程

  • 在想要引入包的文件夹下执行下载命令:npm install math(这里以math为例)
    install可以简写成i

下载完成之后就会生成相应的目录:
在这里插入图片描述

  • 引入:
    因为不是我们自己写的模块,是第三方模块,引入的时候直接写名字就行。
var math = require("math")
console.log(math)
console.log(math.add(100,200))

输出:

Object [Math] {
    
    
  samesign: [Function (anonymous)],
  copysign: [Function (anonymous)],
  add: [Function (anonymous)],
  sum: [Function (anonymous)],
  mul: [Function (anonymous)],
  prod: [Function (anonymous)],
  factorial: [Function (anonymous)],
  gcd: [Function (anonymous)],
  lcm: [Function (anonymous)]
}
300

项目中的package.json文件中也会加入相应的依赖:
在这里插入图片描述

npm搜索包的流程

通过npm下载的包都放到node_modules文件夹
我们通过npm下载的包,直接通过包名引入即可。

var math = require("math")
console.log(math.add(100,200))

输出:300
npm搜索包的顺序:
node在使用模块名字来引入模块时,它会首先在当前目录的node_modules中寻找是否含有该模块;
如果有则直接使用,如果没有则去上一级目录的node_modules中寻找;
如果有则直接使用,如果没有则再去上一级目录寻找,直到找到为止直到找到磁盘的根目录,如果依然没有,则报错。

node中的三种模块

在这里插入图片描述

当其他人使用我们的项目的时候只需要把我们自己写的模块给他就可以了。
在这里插入图片描述

镜像服务器

npm的问题:npm的结点在国外,下载的速度可能会比较慢。
所以我们希望有一个镜像服务器,镜像服务器即在中国建立一个服务器,它将国外服务器的内容都下载到中国的服务器上,这样我们就可以直接访问镜像服务器,速度会比较快。

手动切换npm镜像

我们可以手动切换镜像(这里以淘宝镜像为例)
将npm的下载源切换到淘宝镜像上:

npm config set registry https://registry.npm.taobao.org

nrm切换npm镜像

  • nrm:可以切换 npm 连接的服务器
    nrm可以免除手动切换镜像的麻烦,使用nrm命令帮助我们切换源服务器。

下载nrm

npm i -g nrm

nrm是一个工具,所以下载到全局上

  • 查看版本:
C:\Users\86198>nrm -V
1.2.5
  • 查看nrm所提供的的服务器、仓库
C:\Users\86198>nrm ls

  npm ---------- https://registry.npmjs.org/
  yarn --------- https://registry.yarnpkg.com/
  tencent ------ https://mirrors.cloud.tencent.com/npm/
  cnpm --------- https://r.cnpmjs.org/
  taobao ------- https://registry.npmmirror.com/
  npmMirror ---- https://skimdb.npmjs.com/registry/

这6个就是nrm可以切换的服务器

  • 获取npm前使用的源服务器
C:\Users\86198>npm config get registry
http://registry.npmjs.org/
  • nrm切换到指定的服务器:
    nrm use 服务器的名字
C:\Users\86198>nrm use taobao
   Registry has been set to: https://registry.npmmirror.com/

cnpm

cnpm是一个和npm平级的命令,可以取代npm。与npm不同的是:cnpm直接把源服务器固定到了淘宝镜像服务器上,比npm命令更快。

  • cnpm

下载cnpm:
指定下载源为淘宝镜像

npm install -g cnpm --registry=https://registry.npm.taobao.org

cnpm是一个工具,所以下载到全局上。
cnmp的用法和nmp完全一样,就是将npm换成了cnpm。

yarn

yarn也是一个从npm仓库下载包的工具,可以完全取代npm
对比npm:

  • 速度超快: Yarn缓存了每个下载过的包,所以再次使用时无需重复下载。
  • 并行下载:Yarn可以并行下载以最大化资源利用率,因此安装速度更快。
  • 超级安全:在执行代码之前,Yarn会通过算法校验每个安装包的完整性。

yarn下载

npm install -g yarn

yarn使用

  • 初始化项目:yarn init
    生成一个package.json文件:
    eg:
{
    
    
  "name": "yarn",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT"
}

  • 添加包: yarn add 包名
    指定版本: yarn add 包名@版本
    指定开发依赖:yarn add 包名 --dev

  • 升级依赖包 yarn upgrade [package]@[version]

  • 移除依赖包yarn remove [package]

  • 安装项目的全部依赖 yarn install
    导入别人的项目的时候使用

猜你喜欢

转载自blog.csdn.net/mantou_riji/article/details/125003374
今日推荐