NodeJs的模块化和包 - 辜负寒彻骨
source link: https://www.cnblogs.com/gfhcg/p/17241140.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
模块化的基本概念#
什么是模块化?#
模块化是解决一个复杂问题时,自顶向下逐层把系统划分为若干个模块的过程,编程中,就是遵守一定规则,把一个大文件拆成独立并相互依赖的多个小模块。
模块化规范#
使用什么样的语法格式引用模块和向外暴露成员
CommonJS规范#
Node.js 遵循了 CommonJS
的模块化规范。其中:
- 每个模块内部,
module
变量代表当前模块 - 导入其它模块使用
require()
方法 - 模块对外共享成员使用
module.exports
对象
ES6 模块化规范#
是浏览器端与服务器端通用的模块化开发规范。它的出现极大的降低了前端开发者的模块化学习成本,开发者不需再额外学习 AMD、CMD 或 Commonjs 等模块化规范。
ES6 模块化规范中定义:
- 每个js文件都是一个独立的模块
- 导入其它模块成员使用
import
关键字 - 向外共享模块成员使用
export
关键字
在Node.js中设置ES6模块化规范:
- 安装
v14.15.1
或更高版本的node.js - 在
package.js
的根节点添加"type:""module"
节点
Node.js中的模块化#
Node.js中模块的分类#
- 内置模块:官方提供的fs、path、http等
- 自定义模块:用户创建的每个.js文件,都是自定义模块
- 第三方模块:由第三方开发的,需要下载的模块
加载模块#
文章以CommonJS
规范为例
//内置模块
const http = require('http')
//自定义模块
const custom = require('./custom.js')//后缀名可以省略
//第三方模块
const moment = require('moment')
注意:当使用require
加载时,会执行被加载模块的代码
模块作用域#
在自定义模块中定义的变量和方法等成员,只能在当前模块被访问,防止全局变量污染的问题。
//username.js
const username='张三'
function sayHello(){
console.log("大家好,我是"+username)
}
//test.js
const custom=require('./username')
console.log(custom)//输出:{} 空对象
向外共享成员#
module对象#
每个.js自定义模块中都有一个module
对象,它里面存储了和当前模块有关的信息
module.exports对象#
在自定义模块中,可以使用它将模块内的成员共享出去,当使用require()
方法导入时,得到的就是module.exports
所指的对象
//username.js
module.exports.username = '张三'
module.exports.sayHello = function () {
console.log("大家好,我是" + username)
}
module.exports
默认指向空对象- 使用
require()
方法导入的结果,以module.exports
指向的对象为准
exports对象#
为了简化,Node提供了exports对象。默认情况下,exports
和module.exports
指向同一个对象。
exports.username= '张三'
module.exports={
gender:'男',
age:22
}
//{gender:'男',age:22}
module.exports.username= '张三'
exports={
gender:'男',
age:22
}
//{username:'张三'}
- 使用
require()
方法导入的结果,永远以module.exports
指向的对象为准 - 防止混乱,不要在同一个模块中同时使用
exports
和module.exports
npm和包#
包#
在Node.js中第三方模块叫做包,来自于第三方个人或团队,免费且开源。
包基于内置模块封装出来,提供了更高级、更方便的API,极大的提高了开发效率。
包的下载#
- 从 https://www.npmis.com/ 网站上搜索自己所需要的包
- 从https://registry.npmis.org/ 服务器上下载自己需要的包
使用npm包管理工具(Node Package Manager)
npm install 包的完整名称
npm i 包的完整名称 -g//全局安装
npm install [email protected]
npm uninstall 包的完整名称
node_modules
文件夹用来存放所有已安装到项目中的包
package-lock.json
配置文件用来记录node_modules
目录下每一个包的下载信息
包的版本号:“点分十进制”
第一位数字:大版本
第二位数字:功能版本
第三位数字:Bug修复版本
(只要前面的版本号增长,后面归零)
包管理配置文件#
npm规定,项目根目录中,必须提供一个package.json
的包管理配置文件
npm init -y//快速新建package.json
dependencies节点#
专门记录使用npm insatll命令安装了哪些包
npm install
//执行该命令,npm会读取package.json中的dependencies节点,一次性下载所有的包
devDependencies节点#
如果某些包只在开发中用到,建议安装在devDependencies节点
npm i 包的完整名称 -D
npm i 包的完整名称 --save-dev
包下载慢的问题#
切换npm的下包镜像源
npm config get registry //查看当前镜像源
npm config set registry=xxxxxxxxxx//切换镜像源
nrm工具
npm i nrm -g
nrm ls//查看所有镜像源
nrm use taobao//切换镜像源
包的分类#
项目包和全局包、开发依赖包和核心依赖包
规范的包结构#
- 包必须以单独的目录出现
- 包的顶级目录必须包含package.json这个包配置文件
package.json
必须包含name
、version
、main
这三个属性,分别代表包的名字、版本号、包的入口
#
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK