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'
相关推荐
西西学代码2 分钟前
Flutter---回调函数
开发语言·javascript·flutter
大尚来也13 分钟前
深入HashMap底层:从JDK1.7到1.8的架构演进与性能突围
开发语言
卷帘依旧26 分钟前
JavaScript 闭包经典问题:为什么输出 10 次 i=10
javascript
柳杉44 分钟前
Three.js × Blender:从建模到 Web 3D 的完整工作流深度解析
前端·javascript·数据可视化
森林里的程序猿猿1 小时前
并发设计模式
java·开发语言·jvm
222you1 小时前
四个主要的函数式接口
java·开发语言
reembarkation2 小时前
vue3中使用howler播放音频列表
前端·vue.js·音视频
手握风云-2 小时前
基于 Java 的网页聊天室(三)
服务器·前端·数据库
weixin199701080162 小时前
《识货商品详情页前端性能优化实战》
前端·性能优化
Forever7_2 小时前
重磅!Vue3 手势工具正式发布!免费使用!
前端·前端框架·前端工程化