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'
相关推荐
XiaoLeisj2 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
励志成为嵌入式工程师3 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
逐·風3 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
捕鲸叉3 小时前
创建线程时传递参数给线程
开发语言·c++·算法
Devil枫3 小时前
Vue 3 单元测试与E2E测试
前端·vue.js·单元测试
A charmer3 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq3 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
尚梦4 小时前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app
GIS程序媛—椰子4 小时前
【Vue 全家桶】6、vue-router 路由(更新中)
前端·vue.js
记录成长java5 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet