一、模块(module):
本章主要讲解模块与包,认识模块请看小编上一篇文章Node.js的基础知识。
1、 引入模块时的路径问题:
(1)引入核心模块,不需要考虑路径,直接书写模块名即可。
var http = require('http'); //引入核心模块http,并将其赋值给一个模块对象。
(2)引入模块文件:
引入本模块同路径下的模块:var 变量 = require('./模块名');
引入本模块同路径下的下一级路径下的模块:var 变量 = require('./模块名');
引入本模块上一级路径下的模块:var 变量 = require('../模块名');
(3)引入第三方模块:
由于第三方模块都被下载到了本项目的node_modules文件夹中,所以直接输入模块名即可:var express = require('express');
2、REPL交互式解释:
(1)在命令提示符中输入node命令,可以直接进入到REPL交互式解释器工具中。
(2)除了window对象及其DOM操作以外,几乎所有的js操作都可以执行。
(3)可以在REPL交互式解释器中查看Node下的对象。
(4)在REPL交互式解释器中直接输入下列命令:
>moudle <回车>
上述命令中将显示当前模块的具体属性,问欸是当前是哪个模块?
在REPL交互式解释器中显示的module模块就是REPL交互式解释器本身。
(5)按两次ctrl+C可以推出REPL交互式解释器环境。
3、module对象:
module对象是Moudle类的实例,表示模块自身。
module.id | 表示模块的标识符 |
---|---|
module.express | 表示模块的导出对象 |
module.parent | 表示当前模块的父模块,当前模块是谁加载的 |
module.filename | 表示模块的绝对路径 |
module.loaded | 表示是否加载完成 |
module.children | 表示当前模块加载了哪些模块 |
module.paths | 表示模块的搜索路径,路径的多少取决于目录的深度 |
4、require对象:
- require.main:表示项目的主模块(入口模块)。
在模块中可以调用(require.main == module){}来判断当前是否为主模块。 - require.resolve:表示完整的模块名。
//例如: console.log(require.resolve('./a')); //F:\node.js console.log(require.resolve('http')); //http console.log(require.resolve('abc')); //报错,没有找到abc模块
- require.cache:显示哪些模块装入了缓存。
5、模块的特点
- 对于同一个模块的多次调用,不会引起模块内代码额多次执行。
- 模块在首次加载后将缓存存在内存缓冲区中,即require.cache。
- 两个模块相互调用,不会导致模块之间的循环执行。
二、认识包(Package):
1、 包:
包是将模块联系起来的机制(可以认为一个项目就是一个包)。
2、包由两部分组成
- 包结构:结构包的一些目录结构
- 包描述文件:package.json
Com模拟JS规定的package.json文件中必须的字段
序号 | 键名 | 含义 | 键值数据类型 | 说明 |
---|---|---|---|---|
1 | name | 包名 | 字符串 | 只能包含小写字符、数字、.、_和-、不允许出现空格 |
2 | descrip | 包介绍 | 字符串 | |
3 | version | 包版本号 | 字符串 | |
4 | keywords | 包关键字 | 数组 | NPM中主要用来做分类搜索 |
5 | maintainers | 包维护者列表 | JSON数组 | 每个维护者由name、email和web这3个属性组成 |
6 | contribuctors | 包贡献者列表 | JSON数组 | 每个贡献者由name、email、和web这3个属性组成 |
7 | bugs | 反馈bug的网址/邮箱 | JSON | 由url、email两个属性组成 |
8 | licenses | 包许可证列表 | JSON数组 | |
9 | repositories | 托管源代码位置列表 | JSON | 由type、url、path三个属性组成 |
10 | dependencies | 包的依赖关系 | JSON | 由包名和版本号组成 |
11 | main | 包项目的入口文件 | 字符串 | 默认值为项目根目录下的index.js文件 |
CommonJS规定的package.json文件中的其他字段
序号 | 键名 | 含义 | 键值数据类型 |
---|---|---|---|
1 | homepage | 包项目的首页地址 | |
2 | author | 作者 | |
3 | os | 操作系统 | |
4 | CPU | 处理器 | |
5 | engine | 项目需要的Node版本 | JSON |
9 | script | npm script脚本 | JSON |
10 | devDependencies | 包的依赖关系 | JSON |
3、包管理工具:npm、yarn
- npm init:初始化npm工具,并在项目根目录下创建包描述文件。
npm init-y:在不提问的情况下直接创建包描述文件。 - npm install 包名(简写为:npm i 包名):
哪些包全局安装,哪写包本地(本项目)安装:每一个项目都可能会用到包,或者是工具类型的包,都必须全局安装。
全局安装到哪里了?npm root -g 查看全局安装的路径。 - npm list查看当前项目的所有的依赖包列表。
- npm run 查看当前项目所有的npm Script脚本代码。
命令 | 简写 | 含义 |
---|---|---|
npm -v | - | 显示npm包管理工具的版本号 |
npm init | - | 初始化npm,在项目中创建package.json文件 |
npm init -y | - | 所有选项均采用默认是初始化npm |
npm install 包名 | npm i 包名 | 安装依赖包 |
npm install 包名 --save | npm i 包名 -S | 安装依赖包至生产环境,依赖关系书写在dependencies中 |
npm install 包名 --save-dev | npm i 包名 -D | 安装依赖包至开发环境,依赖关系书写在devDependencies中 |
npm install 包名 -g | npm i 包名 -g | 全局安装依赖包 |
npm install | npm i 包名 -i | 按照package.json中的依赖安装所偶有哦需要用到的包 |
npm root -g | - | 查看全局安装依赖包的安装路径 |
npm root | - | 查看当前项目中依赖包的安装路径 |
npm update 包名 | - | 更新依赖包 |
npm uninstall 包名 | - | 卸载依赖包 |
npm uninstall 包名 -g | - | 卸载全局依赖包 |
npm list | npm ls | 查看当前项目下安装的依赖包清单 |
npm run | - | 查看当前项目中所有的npm Script脚本 |
4、npm节点管理工具:nrm
- 全局安装nrm:npm install nrm -g
- nrm ls:显示当前所有的npm接入节点(*标注的是当前使用的节点)。
- nrm test:测试所有的npm接入节点的速度,所花费的毫秒数越少越快。
- nrm use 节点名称:切换npm接入节点。
- nrm current:显示当前节点。
5、npm Script:npm脚本
在package.json文件中有一个键名:scripts,取值为JSON数据。
script:{
"脚本名称":"脚本代码"
}
//所有的脚本名称,都可以使用npm run + 脚本名称来执行
6、包管理工具yarn
全局安装yarn工具:npm install yarn -g
命令 | 含义 | 对应npm命令 |
---|---|---|
yarn init | 初始化项目,在项目根目录生成package.json文件 | npm init |
yarn --version | 查看yarn工具的当前版本 | npm -v |
yarn add 包名 | 在生产环境下安装依赖包 | npm install 包名 --save |
yarn add 包名 --dev | 在开发环境下安装依赖包 | npm install 包名 --save -dev |
yarn global add 包名 | 在本地全局安装依赖包 | npm inatall 包名 -g |
yarn install | 根据package.json文件安装左右的依赖包 | npm install |
yarn upgrade 包名 | 更新依赖包 | npm update 包名 |
yarn remove 包名 | 卸载依赖包 | npm install 包名 |
yarn run | 执行package.json中的script脚本 | npm run |