Node.js的包资源管理

Node.js的包和模块并没有本质的区别,包是在模块基础上更深一步的抽象,Node.js的包类似于C/C++的函数库或者java的类库,它将某个独立的功能封装起来,用于发布、更新、依赖管理的版本控制。
Node.js包和模块的关系:
在这里插入图片描述

Nodejs 中第三方模块由包组成,可以通过包来对一组具有相互依赖关系的模块进行统一管理。
Node.js的包遵循CommonJS规范,一个包应该具有如下结构:

包结构作用
package.json包描述文件。
bin用于存放可执行二进制文件的目录。
lib用于存放 JavaScript 代码的目录。
doc用于存放文档的目录

NPM

包管理器(Node Package Manage),NPM是Node.js提供的包管理工具,用于下载,安装,升级和删除包,或者发布并维护包。NPM工具默认到https://wwww.npmjs.com上下载和更新第三方模块,如果将自己编写的模块发布到网上,默认也是这个网站。
NPM 是随同 Node.js 一起安装的包管理工具,能解决 Node.js代码部署上的很多问题, 常见的使用场景有以下几种:

  1. 允许用户从 NPM 服务器下载别人编写的第三方包到本地使用。
  2. 允许用户从 NPM 服务器下载并安装别人编写的命令行程序(工具)到本地使用。
  3. 允许用户将自己编写的包或命令行程序上传到 NPM 服务器供别人使用。

NPM的基本使用

常用命令作用
npm init [-y]初始化一个package.json文件
npm install会根据项目中的package.json文件自动下载项目所需的全部依赖。
npm install <包名>安装某一个包
npm install –g <包名>执行全局安装某一个包
npm docs <包名>查看某一个包的文档
npm root -g查看全局安装路径
npm config set prefix “路径”修改全局安装路径
npm list查看当前目录下安装的所有包
npm list -g查看全局包的安装路径下所有的包
npm update <包名>更新当前目录下的某一个包
npm uninstall <包名>卸载当前目录下的某一个包
npm uninstall -g <包名>卸载全局安装路径下的某一个包

使用NPM初始化项目

在这里插入图片描述

初始化后会出现一个package.json配置文件,解决了多个包的管理问题。

NPM安装软件包

当使用 NPM 安装软件包时,可以执行两种安装类型:
1. 本地安装
在这里插入图片描述

将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
在这里插入图片描述

在这种情况下,npm 还会在当前文件夹中存在的 package.json 文件的 dependencies 属性中添加 lodash 条目。
在这里插入图片描述

2. 全局安装

在这里插入图片描述
在这里插入图片描述

全局的位置到底在哪里?
在 macOS 或 Linux 上,默认可能是 /usr/local/lib/node_modules。 在 Windows 上,默认可能是 C:\Users[用户名]\AppData\Roaming\npm\node_modules。
在这里插入图片描述
在这里插入图片描述

查看 NPM 包安装的版本

查看所有已安装的 npm 软件包(包括它们的依赖包)的最新版本。
在这里插入图片描述

卸载 NPM 软件包

若要卸载之前在本地安装的软件包,则从项目的根文件夹(包含 node_modules 文件夹的文件夹)中运行
在这里插入图片描述

如果该软件包是全局安装的,则需要添加 -g 或 --global 标志,此命令可以在系统上的任何位置运行。

在这里插入图片描述

package.json文件

package.json 文件作用
package.json 文件其实就是对项目或者模块包的描述,里面包含许多元信息。比如项目名称,项目版本,项目执行入口文件,项目贡献者等等。npm install 命令会根据这个文件下载所有依赖模块。
package.json 文件创建
package.json 文件创建有两种方式,手动创建或者自动创建。

  1. 手动创建
    在项目根目录新建一个 package.json 文件,然后输入相关的内容。
    package.json 文件中的内容没有固定的要求。 唯一的要求是必须遵守 JSON 格式,否则,尝试以编程的方式访问其属性的程序则无法读取它。
  2. 自动创建
    在项目根目录下执行 npm init 或 npm init -y,然后根据提示一步步输入相应的内容完成后即可自动创建。
    3.3.3 package.json 文件说明
    package.json文件的示例,该示例是从 Vue.js 应用程序中提取的:
    在这里插入图片描述

属性说明

属性作用
name设置了应用程序/软件包的名称。
version表明了当前的版本。
description是应用程序/软件包的简短描述。
main设置了应用程序的入口点。
private如果设置为 true,则可以防止应用程序/软件包被意外地发布npm。
scripts定义了一组可以运行的 node 脚本。
dependencies设置了作为依赖安装的 npm 软件包的列表。用于保存项目的第三方包的依赖信息。
devDependencies设置了作为开发依赖安装的 npm 软件包的列表。
engines设置了此软件包/应用程序在哪个版本的 Node.js 上运行。
browserslist用于告知要支持哪些浏览器(及其版本)。

软件包版本
所有的版本都有 3 个数字,第一个是主版本,第二个是次版本,第三个是补丁版本,具有以下规则:

版本说明符作用
~如果写入的是 〜0.13.0,则只更新补丁版本:即 0.13.1 可以,但 0.14.0 不可以。
^如果写入的是 ^0.13.0,则要更新补丁版本和次版本:即 0.13.1、0.14.0、依此类推。
*如果写入的是 *,则表示接受所有的更新,包括主版本升级。
>接受高于指定版本的任何版本。
>=接受等于或高于指定版本的任何版本。
<=接受等于或低于指定版本的任何版本。
<接受低于指定版本的任何版本。
无符号仅接受指定的特定版本。
latest使用可用的最新版本。

package-lock.json文件

在Node5 中,npm 引入了 package-lock.json 文件。当安装包的时候,npm都会生成或者更新package-lock.json文件。
package-lock.json文件锁定所有模块的版本号,包括主模块和所有依赖子模块。当你执行npm install时,node从package.sjon文件读取模块名,从package-lock.json文件中获取版本号,然后下载更新。
在这里插入图片描述

当我们使用npm管理包时,package.json 及package-lock.json 的内容都会自动更新。

require加载第三方模块的规则

第三方模块加载规则:

  1. 先在当前文件的模块所属目录去找 node_modules目录如果找到,则去该目录中找 模块名的目录,如 : jquery。
  2. 如果找到 jquery目录,则找该目录中的 package.json文件,如果找到 package.json 文件,则找该文件中的 main属性,如果找到main 属性,则拿到该属性对应的文件。
  3. 如果找到 jquery目录之后,没有package.json或者有 package.json没有 main 属性或者有 main 属性,但是指向的路径不存在,则 node 会默认去看一下jquery目录中有没有 index.js --> index.json–> index.node 文件,如果找不到index 或者找不到 jquery或者找不到 node_modules,则进入上一级目录找 node_moudles 查找(规则同上)。如果上一级还找不到,继续向上,一直到当前文件所属磁盘的根目录。如果到磁盘概目录还没有找到,则会报错:can not find module xxx。

在这里插入图片描述
注意:一个项目只有一个node_modules,放在项目根目录中,子目录可以直接调用根目录的文件。

安装CNPM

npm存储包文件的服务器在国外,有时候会被墙,速度很慢,所以需要解决这个问题。淘宝 NPM 镜像是一个完整 npmjs.org 镜像,可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。
淘宝 npm 镜像官网:https://developer.aliyun.com/mirror/NPM
安装命令:npm install -g cnpm --registry=https://registry.npm.taobao.org
在这里插入图片描述
安软件包的时候把以前的npm替换成cnpm。

在这里插入图片描述
欢迎大家阅读,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位指点,在此表示感激不尽。文章持续更新中…

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐小侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值