node.js 第四天 模块化CommonJs
创始人
2024-05-29 10:59:33
0

文章目录

      • CommonJS
        • exports
        • module.exports
      • ES模块
        • export
        • export default
      • 核心 模块
          • process

CommonJS

通过exports暴露出去,require获取暴露的内容

exports

exports一个一个暴露出去
文件01.js

exports.a='孙悟空';
exports.b ={name:'白骨精'}
exports.c =function fn(){console.log("hello")
} 

文件02.js
require中的路径必须是 ./ 或 ../ 开头,里边的.js扩展名可以省略,如果省略了扩展名,nodejs可以为我们补全,优先找js文件,找不到找json文件

const m =require('./01.js')
console.log(m)
m.c()

module.exports

通过 module.exports同事导出多个值

module.exports ={a:'孙悟空',b:[1,2,30],c:()=>{console.log('xixi')}
}
const m =require('./01.js')
console.log(m)    //孙悟空
m.c()      //xixi

默认情况下,Node.js会将以下内容视为CommonJS模块:

  1. 使用.cjs为扩展名的文件
  2. 当前的package.json的type属性为commonjs时,扩展名为.js的文件
  3. 当前的package.json不包含type属性时,扩展名为.js的文件
    文件夹作为模块

模块的包装
每一个CommonJS模块在执行时,外层都会被套上一个函数:

(function(exports, require, module, __filename, __dirname) {
// 模块代码会被放到这里
});

所以我们之所以能在CommonJS模块中使用exports、require并不是因为它们是全局变量。它们实际上以参数(实参)的形式传递进模块的。

exports,用来设置模块向外部暴露的内容

require,用来引入模块的方法

module,当前模块的引用

__filename,模块的路径

__dirname,模块所在目录的路径,即当前文件所在的文件夹路径

ES模块

export

默认情况下,node只的模块化标准是 CommonJS
要想使用ES的模块化,可以使用以下两种方法

  1. 使用 .mjs作为扩展名
  2. 在package.json中设置 type:"module" , 当前项目下所有的js文件都变成ES模块, type 默认是 CommonJS

新建一个03.mjs 这里扩展是 .mjs,如果不是ES模块就会报错

export let a =10;
export const b={name:"孙悟空"}

新建一个04.mjs

import {a as A ,  b} from './03.mjs'   # as 换个别名,这里默认的名字不能乱写,与前面暴露的名字要一致
console.log(A,b)

export default

一个模块只能有一个默认导出,默认导出的命名可以随意

export let a =10;
export default function sum(a,b){return a+b
}

默认导出可以随意命名

import x ,{a} from './03.mjs'
console.log(x,a)    

默认导出的是值,不能是语句

export default let a =10;   错误let a= 10;
export default a   对的

导入的内容都是常量导入的内容跟前面定义的没关系,只要是导入的都是常量,常量并不影响对象的修改

export let a =10;
export const b={name:"孙悟空"}
import {a,b} from './03.mjs'
console.log(a)
a =20   #报错  这里不能给常量修改值b.name ="ddd"
console.log(b)   #对的  

ES模块化在浏览器中可以使用,但是通常我们不会使用,因为要考虑兼容性的问题,通常结合打包工具使用

核心 模块

window是浏览器的宿主对象,node没有
global是node的全局对象 ,作用类似于window
在ES模块下,都可以共 globalThis

process

表示当前的node进程
通过该对象可以获取进程的信息,或者对进程做各种操作
process.exit([code]) 结束进程
process.nextTick(callback[, …args]) 向tick任务队列中添加任务
process.nextTick 跟queueMicrotask 都是微任务队列中添加任务

queueMicrotask(()=>{console.log(1)
})
process.nextTick(()=>{console.log(2)
})//  2   1

调用栈 -》tick队列-》微任务队列-》宏任务队列

所以queueMicrotask 在tick后面执行,不需要了解

相关内容

热门资讯

这个周末邂逅人艺之友 一起“再... 【这个周末#邂逅人艺之友# 一起“再造时光”】5月10日至11日,北京人民艺术剧院联合东城区委区政府...
它博会纳新采购节成交额破350... 转自:上观新闻如何通过创新项目为参展商开辟增量新渠道,是TOPS它博会始终关注的核心问题之一。去年T...
龙江交投:助力龙江旅游经济由“... 新华信用杭州5月11日电(王思凝)作为2025世界品牌莫干山大会的重要组成部分,以“促消费 树品牌 ...
女演员陷“辱华”争议,疑被新剧... 5月10日,女演员李凯馨相关话题连上热搜。日前,一名自称是李凯馨前助理的网友在微博爆料。在其曝光的录...
《三餐四季》广东篇今晚开播:食... 每当人们谈到广东,总有一个绕不开的话题——粤菜。在这个美食天堂里,藏着无数让人念念不忘的老味道。央视...
既当“护企卫士” 也做“贴心管... 转自:中国警察网从精准打击民营企业内部“蛀虫”到出台相关政策打通惠企服务“最后一公里”,近年来,上海...
当事人回应上门做饭月薪2万质疑... 转自:JSTV荔枝视频 【#当事人回应上门做饭月薪2万质...
今年秋天,中国将隆重纪念中国人... 来源:新华社2025年5月7日至10日,国家主席习近平应邀对俄罗斯进行国事访问并出席纪念苏联伟大卫国...
“下辈子还要做妈妈的女儿” “今天是母亲节,让我们一同重温江西革命史上的那些无私伟大的“革命母亲”。”作者 | 何丹凤题图 | ...
政商学界共话中欧合作前景:探索... 经济观察报 记者 陈姗5月9日,在“中欧建交50周年论坛”上,来自中国和欧盟的政治家、商界领袖、名师...
王涵:资本市场改革要为创新企业...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! 兴业证券股份有限公司...
美股巨震后迎来5月魔咒,特朗普...   4月是美股近5年来最动荡的月份。  刚过去的4月是美股近5年来最动荡的月份。华尔街股谚有“卖在五...
为什么选出美国籍教皇?梵蒂冈消... ► 文 观察者网 陈思佳当地时间5月8日,来自美国的枢机主教罗伯特·普雷沃斯特当选第267任天主教罗...
母亲节 | 有爱莫迟 转自:人民政协报母亲节又到了!想想母亲离开我已经五年了,思念之情油然而生。母亲犹如一朵永远不败的鲜花...
他们围在一起给特朗普打电话,随... 乌克兰外交部长瑟比加10日下午在社交媒体发文说,乌方准备自12日起实施至少30天的全面无条件停火。瑟...
山西鹏飞集团有限公司等13家企... 新华信用杭州5月11日电(徐淑明)作为2025世界品牌莫干山大会的重要组成部分,以“促消费 树品牌 ...
再官宣丨飞天之夜黄小西音乐盛典... 惊喜不断 “乐”享不停!继「黄小西」T次方音乐与艺术节及首批阵容官宣后,我们再次带来重磅消息:由总台...
中芯国际:指引大“翻车”,“国... 中芯国际(0981.HK/688981.SH)北京时间2025年5月8日晚,港股盘后发布2025年度...
平谷快递小哥听到微弱呼救声,被... 转自:北京日报客户端“大姐,您别怕,我马上报警救您出来!”5月5日下午3点40分,顺丰快递小哥高海在...
男子得物买52瓶古驰香水包装是... 转自:河南商报 【#男子得物买52瓶古驰香水包装是假的#...