node模块***
内置模块
fs,path,url,http...
自定义模块(node)
1:通过require导入自定义模块,得到的是module.exports所指向的对象
2:使用module.exports对象将模块内的成员共享出去,供外界使用
let a = 10
const fn = function () {
console.log(123)
}
console.log(exports === module.exports) //true
// exports.a = a
// exports = {
// a: a,
// }
// module.exports.fn = fn
exports.a = a
module.exports = {
fn: fn,
}
/*
module.exports单词写起来比较复杂,为了简化向外共享成员的代码,node提供了exports对象
exports和module.exports指向的是同一个对象
exports和module.exports指向不同的对象,以module.exports为准
*/
NodeJS中的模块化规范
Node.js遵循了CommonJS模块化规范,Commonjs规定了模块的特性和各模块之间如何相互依赖
CommonJS规定:
- 每个模块内容,module变量代表当前模块
- module变量是一个对象,它的exports属性(module.exports)是对外的接口
- 加载某个模块,其实就是加载模块的module.exports属性,require方法用于加载模块
第三方模块
Node中的第三方模块(别人写好的模块) 又叫做包
包的来源
不同于Node.JS的内置模块和自定义模块,包是由第三方个人和团队开发出来的,免费使用
为什么要使用包
NodeJS提供的api开发效率低
基于内置模块封装出来,提供了更高级,更方便的API,极大的提高了工作效率
下载包
国外的一家IT公司,叫做npm 这家公司的著名的网址www.npmjs.com/是全球最大的包共享平台
registry.npmjs.org/对外共享所有的包。我们可以从这个服务器下载自己所需要的包
https://www.npmjs.com/ 网站上搜索自己所需要的包
https://registry.npmjs.org/ 服务器上下载自己需要的包
如何下载
npm包管理工具
这个包管理工具随着node的安装一起被安装到了用户的电脑上
在终端输入 npm -v 查看自己电脑上安装的npm包管理工具的版本号
项目中如何下载包
npm install 包的完整名称
简写
npm i 包的完整名称
初次安装包完成,项目文件下多了一个叫做node_modules文件夹 和package-lock.json和package.json
node_modules 存放所有已安装到项目中的包 require导入第三方模块包,就是从node_modules目录中查找并加载包
package-lock.json 配置文件用来记录node_modules目录下每一个包的下载信息,包的名字,版本号,下载地址,不需要手动修改文件, npm包管理工具会自动维护它
包管理配置文件
npm规定,在项目目录中,必须提供一个叫做package.json的包管理配置文件,用来记录与项目有关的一些配置
- 项目名称,版本号,描述
- 项目中都用到了那些包
- 那些包只在开发期间调用
- 那些包在开发和部署时都需要用到
npm init -y
//该命令只能在英文的目录下成功运行
dependencies 专门用来记录你使用npm install 命令安装了那些包
一次性安装所有的包
npm i
或者
npm install
npm uninstall 包文件名 删除包s
yarn
全局安装yarn
npm i yarn -g
使用
yarn init
yarn ad 包文件名
yarn remove 包文件名
yarn
or
yarn install 根据package.json文件为项目安装所有依赖
安装指定版本的模块
yarn add 包名@3.0.1
npm i 包名@3.0.1
如何记录项目中安装了那些包
dependencies
package.json中有一个dependencies 节点,专门用来记录你使用npm install 命令安装了那些包
devdependencies
有些包只在项目开发阶段会使用,在项目上线之后不会用到,建议把这些包记录到devdependencies 中(less)
有些包在项目开发阶段和项目上线之后都会用到建议把这些包记录到dependencies
//记录到devdependencies节点中
npm i 包名 -D
完整写法
npm i 包名 --save-dev
包的分类
npm包管理工具下载的包,分为两大类:
-
项目包
哪些被安装到项目的node_modules目录中的包,都是项目包
- 开发依赖包(记录到devdependencies节点中的包,只在开发阶段会用到)
- 核心依赖包记录到dependencies节点中的包,在开发阶段和项目上线之后都会用到)
-
全局包
指向npm i 命令提供了 -g 参数,安装的就是全局包
全局包被安装在C:\Users\54004\AppData\Roaming\npm\node_modules只有工具性质的包,才有全局安装的必要性
ES6模块***
前端模块化分类
es6模块化诞生之前,js社区尝试提出了AMD,CMD,Commonjs模块化规范
AMD,CMD适用于浏览器端的JavaScript模块化规范
Commonjs适用于服务器端的JavaScript模块化
Es6既适用于浏览器端也适用于服务器端
ES6模块化规范定义
- 每个js文件都是一个独立的模块
- 导入其它模块成员使用 import
- 向外共享模块成员 适用 export
注意:
NodeJS默认仅支持Commonjs模块化规范,想基于node.js体验es6的模块化,需要配置
1:安装了 v14.15.1或更高版本的node
2:在package.json的根节点中添加 "type":"module"
默认导出
export default 默认导出的成员
注意:每个模块中,只允许使用唯一的一次export defaut ,否则会报错
var a = 10
function show() {}
const arr = [11, 22, 33]
export default {
a,
show,
}
默认导入
默认导入的时候接收名称可以是任意名称,只要是合法的成员名称就可以
// 导入export default 向外共享的成员
import aa from './01test.js'
console.log(aa) //{ a: 10, show: [Function: show] }
按需导入
import aa, { s as ss, say, s1 } from './03test.js'
console.log(ss, say, s1)
console.log(aa)
按需导出
var a = 12
function show() {}
const arr = [11, 22, 333]
// 按需导出
export let s = 'aaa'
export function say() {}
export let s1 = true
export default {
a,
show,
arr,
}
按需导入和按需导出的注意事项
- 每个模块中可以使用多次按需导出
- 按需导入的成员必须和按需导出的名称保持一致
- 按需导入时,可以使用as进行重命名
- 按需导入可以和默认导入一起使用
直接导入并 执行模块中的代码
如果只想单纯的指向某个模块中的代码,并不需要得到模块中向外共享的成员
for (let i = 0; i < 3; i++) {
console.log(i)
}
import './06test.js'