4

NodeJs的模块化和包 - 辜负寒彻骨

 1 year ago
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.
neoserver,ios ssh client

模块化的基本概念#

什么是模块化?#

模块化是解决一个复杂问题时,自顶向下逐层把系统划分为若干个模块的过程,编程中,就是遵守一定规则,把一个大文件拆成独立并相互依赖的多个小模块。

模块化规范#

使用什么样的语法格式引用模块和向外暴露成员

CommonJS规范#

Node.js 遵循了 CommonJS 的模块化规范。其中:

  • 每个模块内部,module变量代表当前模块
  • 导入其它模块使用require()方法
  • 模块对外共享成员使用 module.exports 对象

ES6 模块化规范#

是浏览器端与服务器端通用的模块化开发规范。它的出现极大的降低了前端开发者的模块化学习成本,开发者不需再额外学习 AMD、CMD 或 Commonjs 等模块化规范。
ES6 模块化规范中定义:

  • 每个js文件都是一个独立的模块
  • 导入其它模块成员使用 import 关键字
  • 向外共享模块成员使用 export 关键字

在Node.js中设置ES6模块化规范:

  1. 安装v14.15.1或更高版本的node.js
  2. 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对象。默认情况下,exportsmodule.exports指向同一个对象。

exports.username= '张三'
module.exports={
    gender:'男',
    age:22
}
//{gender:'男',age:22}
module.exports.username= '张三'
exports={
    gender:'男',
    age:22
}
//{username:'张三'}
  • 使用require()方法导入的结果,永远以module.exports指向的对象为准
  • 防止混乱,不要在同一个模块中同时使用exportsmodule.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//切换镜像源

包的分类#

项目包和全局包、开发依赖包和核心依赖包

规范的包结构#

  1. 包必须以单独的目录出现
  2. 包的顶级目录必须包含package.json这个包配置文件
  3. package.json必须包含nameversionmain这三个属性,分别代表包的名字、版本号、包的入口

#


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK