NodeJs的模块化和包
模块化的基本概念
什么是模块化?
模块化是解决一个复杂问题时,自顶向下逐层把系统划分为若干个模块的过程,编程中,就是遵守一定规则,把一个大文件拆成独立并相互依赖的多个小模块。
模块化规范
使用什么样的语法格式引用模块和向外暴露成员
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 moment@2.22.2
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这三个属性,分别代表包的名字、版本号、包的入口
NodeJs的模块化和包的更多相关文章
- nodejs学习笔记之包、模块实现
简单了解了node的安装和一些基本的常识之后,今天学习了node中很重要的包和模块的一些知识点. 首先学习一下包的规范,它由包结构和包描述两部分组成.包结构用于组织包的各种文件,包 ...
- 通过NPM快速发布你的NodeJS模块(组件包)
1.更新 NPM - [ npm install -g npm | 该步骤可选:最好使用新版本] 楼主当前版本号 2.6.1 ,如果更新报错,可以尝试 国内淘宝镜像 $ npm -v 2.6.1 // ...
- 前端模块化 、包管理器、AMD、 CMD、 require.js 、sea.js
问题由来,为什么要前端模块化管理: 假设我们有个组件名为Acomponent.js, 是架构封装的,里面依赖另一个公司公用库common.js: 那我们引入Acomponent.js的时候,怎么知道要 ...
- nodejs编译sass模块包 node-compass,与gulp包gulp-sass使用方法
简介:node express或者就是node项目中,要自动编译sass方法很多,比如gulp 比如考拉,比如今天我想说的这个包node-compass. 编译sass的三种方法: 前提条件: 都需要 ...
- Nodejs的模块化
Node.js中的模块化 好处: 复用性高,一次定义,多次使用 前端模块化 AMD AMD的实现需要使用 require.js CMD CMD的实现需要使用 sea.js [ 不更新 ] Common ...
- node-basis(提供nodejs开发的基础包)
地址: https://github.com/flybirdsoft/use-node-basis
- NodeJs第3方包说明
formidable 作用:实现简单文件上传 var formidable = require('formidable'); var form = new formidable.IncomingFor ...
- 浅析 Nodejs 模块化
本文只讨论 CommonJS 规范,不涉及 ESM 我们知道 JavaScript 这门语言诞生之初主要是为了完成网页上表单的一些规则校验以及动画制作,所以布兰登.艾奇(Brendan Eich)只花 ...
- NodeJS 中npm包管理工具
NPM 使用介绍 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从 ...
- 【前端】NodeJs包管理工具NPM
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS部署上的很多问题. 测试是否安装成功,出现版本提示表示安装成功. npm -v NPM常用命令 官方文档:https://www.npm ...
随机推荐
- Linux系统安装&VMware安装二
第八步: 完成后,选择刚刚创建好的系统
- Kafka的启动 并创建topic
一.进入到kafka的bin目录下,运行 ./kafka-server-start.sh -daemon /app/kafka/config/server.properties 注意:如果是0.9版本 ...
- 安装python及环境搭建
操作系统是windows7 64位 打算使用visual studio code进行代码编写 1.先安装visual studio code去visual studio 官网下载VS code htt ...
- element select多选选项卡页面抖动问题
最近做项目是有个功能需要下拉框多选,然后碰到了一个问题就是选择选项的时候出现频繁抖动的情况 问题描述: 页面选择到三个选项时长度为三的时候就会开始抖动,其他长度没有问题,检索elements是发现选择 ...
- JDBC与JPA--初学JPA
最近工程中用到JPA,头一次接触,踩了不少坑.刚好复习到JDBC,发现JPA用起来真是很简单.就对比一下这两者的区别 总结:JDBC是更接近数据库SQL的抽象,使用时依然使用的是SQL.优点是靠近 ...
- Promise顺序执行请求;Promise一个请求执行完成再执行另一个请求
1 函数名() { 2 new Promise(resolve => { 3 this.$rest.请求名1().then(res =>{ 4 // 请求成功后改变状态 5 resolve ...
- Bug的前后台分类及定位技巧
必备工具:Firefox debug工具 一般浏览器F12即可 如何区分页面的bug问题归属:前端or后端 前端bug主要分为3个类别:HTML,CSS,Javascript三类问题 给个最大的区 ...
- 需要改动node_modules,并且别人也可以同步,插件 patch-package
patch-package 转自:https://www.cnblogs.com/lovewhatIlove/p/15724812.html 1.简介:有个功能需要修改node_modules里面的代 ...
- operations使用研究
简介 operations支持在peer或者orderer运行过程中,提供基于restful接口的运维服务.包括健康检查.日志level管理.指标metrics接口等.首先利用test-network ...
- 构建 Maven 项目卡爆?优化后:1 秒完成…
在实际开发中,我们通常会用到maven的archetype插件(原型框架)来生成项目框架. 但是无奈,创建时,总会卡在: [INFO] Generating project in Batch mode ...