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'
相关推荐
千里镜宵烛1 小时前
深入 Lua 环境机制:全局变量的 “容器” 与 “隔离术”
开发语言·junit·lua
辻戋2 小时前
从零实现React Scheduler调度器
前端·react.js·前端框架
徐同保2 小时前
使用yarn@4.6.0装包,项目是react+vite搭建的,项目无法启动,报错:
前端·react.js·前端框架
Qrun3 小时前
Windows11安装nvm管理node多版本
前端·vscode·react.js·ajax·npm·html5
中国lanwp3 小时前
全局 npm config 与多环境配置
前端·npm·node.js
JELEE.4 小时前
Django登录注册完整代码(图片、邮箱验证、加密)
前端·javascript·后端·python·django·bootstrap·jquery
TeleostNaCl6 小时前
解决 Chrome 无法访问网页但无痕模式下可以访问该网页 的问题
前端·网络·chrome·windows·经验分享
QX_hao6 小时前
【Go】--反射(reflect)的使用
开发语言·后端·golang
inferno6 小时前
Maven基础(二)
java·开发语言·maven
我是李武涯7 小时前
从`std::mutex`到`std::lock_guard`与`std::unique_lock`的演进之路
开发语言·c++