commonJS和esModule的应用

commonJS

  • commonJS规范的核心变量是:exports,module.exports,require
  1. exports 和 module.exports可以负责模块的导出
  2. require 负责模块的导入
module.exports 导出方案:
js 复制代码
const name = 'yx'
const age = 18

// 1 导出方案
module.exports.name = name
module.exports.age = age

const info = {
    age: 12,
    name: 'yx',
    foo: function(){
        console.log('foo')
    }
}
// 2 导出方案
module.exports = info
exports 导出方案:
js 复制代码
const name = 'yx'

exports.name = name

注意: exports 导出实际上也是用module.exports进行导出的,如:

js 复制代码
// 默认给的 空对象
module.exports = {}
// 把module.exports 赋值给 exports 的
exports = module.exports
require 导入方案
js 复制代码
const info = require('文件路径')
require(X) 导入格式的查找规则
  • 情况一:X是一个node核心模块,比如path,http,fs
  1. 直接返回核心模块,并且停止查找
  • 情况二:X是以 ./ 或 .../ 或 /(根目录)开头的
  1. 第一步:将X当作一个文件在对应目录下查找:
    A:如果有后缀名,按照后缀名的格式直接查找对应的文件
    B:如果没有后缀名,会按照如下顺序:
    a:直接查找文件X
    b:查找X.js文件
    c:查找X.json文件
    d:查找X.node文件
  2. 第二步:没有找到对应的文件,将X作为一个目录
    A:查找目录下的index文件
    a: 查找X/index.js 文件
    b: 查找X/index.json 文件
    c: 查找X/index.node 文件
  • 情况三:直接是一个X(没有路径),并且X不是一个核心模块
  1. 会在node_modules里查找相应的index.js文件
js 复制代码
const axios = require('axios')

esModule

  • import 是进行导入,export 是进行导出
  1. import 导入的几种方式
js 复制代码
// 第一种方式 解构方式
import { name, age } from './foo.js'

// 第二种方式 可以进行别名设置
import { name as fName, age as fAge } from './foo.js'

// 第三种方式 导出所有 (也可以设置别名)
import * from './foo.js'
import * as foo from './foo.js'

// 第四种方式 针对于 export default 方式
import foo from './foo.js'
// 导出方式则为 
export default foo
// 或者为
export {
    foo as default
}
  1. export 导出的几种方式
js 复制代码
function add(){}

function sub(){}

// 第一种方式
export {
    add,
    sub
}
// 同样导出也可以使用别名
export { add as fAdd, sub as fSub }

// 第二种方式
export { add, sub } from './foo.js'

// 第三种方式
export * from  './foo.js'
相关推荐
懂点Tech3 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
云和数据.ChenGuang3 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
@大迁世界4 小时前
Firefox 本地模式:localhost 再见了 ?
前端·架构
美狐美颜SDK开放平台4 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
dtq04244 小时前
C++小案例 - 日志实战
开发语言·c++
星夜离尘565 小时前
MATLAB ADC 码流触顶诊断:命中数、缺口分段与削顶不可辨识性
开发语言·matlab
码匠许师傅5 小时前
【C++三方组件】Qt 概览:桌面 C++ 的事实标准与许可证三轨
开发语言·c++·qt
码匠许师傅6 小时前
【C++三方组件】POCO:跨平台系统编程全家桶
开发语言·c++
米米商聊6 小时前
同名附件为什么被 Map 覆盖?重复键与一对多索引
前端·javascript
bkspiderx7 小时前
基于Socket的广播通信及C语言实现详解
c语言·开发语言·socket·广播·socket的广播通信