首页 > 编程语言 >NodeJs的模块化和包

NodeJs的模块化和包

时间:2023-03-21 19:22:06浏览次数:50  
标签:npm exports NodeJs 模块化 module js 模块

模块化的基本概念

什么是模块化?

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

模块化规范

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

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这三个属性,分别代表包的名字、版本号、包的入口

标签:npm,exports,NodeJs,模块化,module,js,模块
From: https://www.cnblogs.com/gfhcg/p/17241140.html

相关文章

  • nodejs处理一段redis获取集合,数组的代码优化(其中包含:es6同步返回数据的处理,new Pro
    从异步,用延时来处理,改成同步获取数据获取数据主要分2步:1.从redis集合中获取数组;2.遍历数组,抓取其中字符串,解析,拼接成需要的数据,返回给前端原代码,用sleep方法,避免异步......
  • nodejs获取redis集合内容,同步方法
    可以使用redis模块来连接和操作Redis数据库。以下是使用该模块获取Redis集合内容的同步方法://引入redis模块constredis=require('redis');//创建redis客户端const......
  • 什么是webpack、npm、node、nodejs?他们之间有什么区别?
     最近在学一学前端的东西,发现前端技术栈有几个概念有些分不清,比如接触Vue后,对Vue-Cli有了解后,仅仅知道Vue-Cli是一个Vue项目的脚手架,可以快速的构建一个Vue的基于Npm的模......
  • Unbuntu22.04使用NVM安装NodeJS
    一、使用NVM(NodeVersionManager)1.在NVMgithub上的readme获取一行命令curl-o-https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh|bash或wge......
  • nodejs 操作redis的集合操作
    constredis=require('redis');constclient=redis.createClient();//向集合中添加元素client.sadd('myset','foo','bar','baz',(err,result)=>{cons......
  • Nodejs
    Nodejs-Web336global.process.mainModule.constructor._load('child_process').execSync('ls')eval执行代码,过滤了exec,上面的payload用不了网上搜集的payloadrequir......
  • nodejs的全局变量探讨之二
    之前写过一篇博文对nodejs全局变量做了一些验证,本篇博文将继续探讨这个话题。建议先看下前篇博文:​​https://blog.51cto.com/livestreaming/5258039​​好了,我们开始今天的......
  • eclipse创建maven模块化web项目
        第一步,新建项目,把src目录删除       第二步,项目右键,新增模块dao, 第三步,pom.xml报错,修改<artifactId>maven-jar-plugin</artifactId><ve......
  • nodejs的一个十六进制 加密 和 逆算法
    constkaitou="$@$@";Buffer.from(kaitou,"utf8").toString("hex");给以以上nodejs的逆算法consthexString="24402440";//十六进制字符串constbuffer=Bu......
  • 极简实用的Asp.NetCore模块化框架决定免费开源了
    举报简介: 在开发这个框架之前,前前后后看过好几款模块化的框架,最后在一段时间内对ABPVNext痛下狠心,研究一段时间后,不得不说ABPVNext的代码层面很规范,也都是一些最佳实......