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'
相关推荐
腾讯TNTWeb前端团队6 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰9 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪9 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪9 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy10 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom11 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom11 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom11 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom11 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom11 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试