likes
comments
collection
share

Node 包,Npm,包的搜索过程

作者站长头像
站长
· 阅读数 9

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。

Node 包,Npm,搜索包的过程

Node的生态系统中,各种各样的模块,包给我们的开发带来了非常多的便利。最早学习vue的时候,其实就有用到Node的相关功能了,比如安装功能依赖,运行脚本(npm run serve)等等。这篇文章主要是学习Node中和包,Npm相关的概念。

一、包

1. 包简介

包实际上就是一个压缩文件,解压以后还原为目录。一个包就是一组特定功能的模块的集合。说到包就不得不说到CommonJS规范。CommonJS规范中的包规范允许我们将一组相关的模块组合到一起,形成一组完整的工具,也就是包。

CommonJS规范中包由包结构和包描述文件两个部分组成

  • 包结构 – 用于组织包中的各种文件
  • 包描述文件 – 描述包的相关信息,以供外部读取分析

符合CommonJS规范的目录,应该包含如下文件:

文件或目录内容必需性
package.json包描述文件必需
bin可执行二进制文件非必需
libjs代码非必需
doc文档非必需
test单元测试用例非必需

虽然文档和单元测试不是必需的,但是一个有详细文档和严格单元测试的包往往会被认为更踏实可靠,尤其是在对外发布的时候。

2. 包描述文件

package.json —— 包描述文件。用来描述包的相关信息,就像是一个说明书。它是一个JSON格式的文件,位于包的根目录下,是包的重要且必需的组成部分。

package.json的属性非常非常多,具体的大家可以去查阅文档。这里主要讲一讲重要且常用的一些属性。

字段含义重要性
name包名必需
description描述必需
version版本必需
keywords关键词,用于包的搜索必需
maintainers包维护者列表必需
contributors包贡献者列表必需
bugs反馈bug的网页或邮件地址必需
licenses包所使用的的许可证列表必需
repositories托管源代码的位置列表必需
dependencies依赖包列表必需
author包作者常用
bin包作为命令行工具使用的配置常用
main包入口文件常用
scripts脚本说明对象常用
engine支持的JavaScript引擎列表常用
devDependencies开发依赖包列表常用

这里讲一讲dependencies,devDependencies,scripts

  • dependencies,依赖包列表,这个属性会记录当前包所依赖的其他包。在用NPM安装包的时候,会递归地安装所依赖的包。在运行 npm install 指令的时候,会根据这个属性为当前包安装好所有的依赖
  • devDependencies,开发依赖包列表,一些只在开发环境所需的依赖。配置这个属性,可以让后续的开发者安装依赖包。
  • scripts,脚本说明对象,主要用来声明一些功能脚本。比如vue-cli中常用的npm run serve等等。
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "test:unit": "vue-cli-service test:unit",
  },

二、NPM

1. NPM 简介

NPM(Node Package Manager) 顾名思义,就是Node的包管理工具。包和NPM的关系就有点像app和应用商店的关系。通过NPM,我们可以非常方便地对包进行管理,比如发布,安装和依赖构建等。

• CommonJS包规范是理论,NPM是CommonJS包规范的其中一种实践。 • 对于Node而言,NPM帮助其完成了第三方模块的发布、安装和依赖等。借助NPM,Node与第三方模块之间形成了很好的一个生态系统。

2. NPM 常用指令

命令作用
npm –v– 查看版本
npm search 包名– 搜索模块包
npm install– 根据 package.json 中的 dependencies 在当前目录安装包
npm install 包名– 在当前目录安装包
npm install 包名 –g– 全局模式安装包
npm install 文件路径– 从本地安装
npm install 包名 –registry=地址– 从镜像源安装
npm remove 包名– 删除一个模块
npm config set registry 地址– 设置镜像源为默认源

3. 设置镜像源

因为npm官方源的服务器在国外,可能会有速度不稳定的问题,一般可以替换为国内的镜像源,比如淘宝的镜像源

一般有两种做法:

  • 设置淘宝的镜像源为默认源
npm config set registry https://registry.npm.taobao.org
  • 安装淘宝的cnpm工具
npm install -g cnpm --registry=https://registry.npm.taobao.org

4. npm install 参数的区别

命令参数简写作用
npm install安装dependenciesdependencies中的依赖
npm install--production安装dependencies中的依赖
npm install moduleName安装某个module到本地项目的node_modules,但不会把安装包的信息添加到package.json文件
npm install moduleName--save-S安装某个module,同时把相关模块依赖添加到package.json文件的dependencies
npm install moduleName--save-dev-D安装某个module,同时把相关模块依赖添加到package.json文件的devDependencies
npm install moduleName-g与npm install module一样,只是module的安装是全局的

注意:

  • -S 或 -D 和 -g 可以组合使用

三、 包的搜索过程

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

node在使用模块名字来引入模块时,它会首先在当前目录的node_modules中寻找是否含有该模块

  • 如果有则直接使用,如果没有则去上一级目录的node_modules中寻找
  • 如果有则直接使用,如果没有则再去上一级目录寻找,直到找到为止
  • 直到找到磁盘的根目录,如果依然没有,则报错