模块化

 

Nodejs 模块化规范遵循两套一 套CommonJS规范另一套esm规范

 

CommonJS 规范

 引入模块(require)支持四种格式
内置模块(http os fs child_process
第三方模块(express md5 koa
自己编写的模块文件(用相对 绝对路径引入 ./ ../ )
引入addon C++ 扩展模块 (.node文件)
 
const fs = require('node:fs');  // 导入核心模块
const express = require('express');  // 导入 node_modules 目录下的模块
const myModule = require('./myModule.js');  // 导入相对路径下的模块
const nodeModule = require('./myModule.node');  // 导入扩展模块

 

导出

module.exports  对象和常量

module.exports = {
  hello: function() {
    console.log('Hello, world!');
  }
};
module.exports = 123

 

ESM模块规范   (ECMAScript Modules)

 需要在package.json 设置 type:module 才能使用
 
import fs from 'node:fs'

 

 

如果要引入json文件需要特殊处理 需要增加断言并且指定类型json node低版本不支持

import data from './data.json' assert { type: "json" };

 

加载模块的整体对象

import * as all from 'xxx.js'

 

 

动态导入模块

import静态加载不支持掺杂在逻辑中如果想动态加载请使用import函数模式

 
if(true){
    import('./test.js').then()
}

 

模块导出

 

导出一个默认对象,

  default只能有一个不可重复export default

export default {
    name: 'test',
}

导出变量

export const a = 12

 

Cjs 和 ESM 的区别

 
  • Cjs是基于运行时的同步加载,esm是基于编译时的异步加载
  • Cjs是可以修改值的,esm值并且不可修改(可读的)
  • Cjs不可以tree shaking,esm支持tree shaking
  • commonjs中顶层的this指向这个模块本身,而ES6中顶层this指向undefined

 
 
posted @ 2025-03-12 11:13  蜗牛般庄  阅读(10)  评论(0)    收藏  举报
Title
页脚 HTML 代码