您的位置:

深入理解CommonJS模块化规范

一、CommonJS模块化规范介绍

CommonJS是基于JavaScript语言的一种模块化规范,用于约定模块的定义、组织和调用方式,使得JavaScript代码可以更加模块化、可维护、易复用。

其核心思想是每个文件就是一个模块,每个模块都可以通过require方法来加载其他模块,通过module.exports方法暴露自己的接口,从而实现模块的共享和引用。

二、CommonJS模块化规范的特点

1、每个文件就是一个模块

/* counter.js */
let count = 0;

const addCount = () => {
  count++;
};

const getCount = () => {
  return count;
};

module.exports = {
  addCount,
  getCount,
};

2、模块的导入和导出

通过require方法加载模块,通过module.exports方法暴露模块接口。

/* app.js */
const counter = require('./counter');

counter.addCount();
counter.addCount();
console.log(counter.getCount()); // 2

3、同步加载模块

CommonJS是同步加载模块,即在执行代码前,必须先加载所有依赖的模块。

/* app.js */
const fs = require('fs');

const content = fs.readFileSync('test.txt', 'utf-8');
console.log(content);

4、模块的缓存

加载过的模块会被缓存,再次加载时会优先使用缓存中的模块,提高了运行效率。

三、CommonJS模块化规范的实践应用

1、服务器端开发

Node.js基于CommonJS模块化规范,成为服务器端开发的主流语言,可用于搭建web应用、API服务等。

/* server.js */
const http = require('http');

http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World\n');
}).listen(8080);

console.log('Server running at http://localhost:8080/');

2、前端开发

前端模块化开发常用的打包工具webpack、rollup等都支持CommonJS规范,通过打包构建实现代码模块化。

// demo.js
import $ from 'jquery';

export const log = (msg) => {
  $(document.body).append('<p>' + msg + '</p>');
};

// index.js
const { log } = require('./demo');

log('Hello World');

3、命令行工具开发

一些命令行工具也采用CommonJS规范,通过模块化封装实现功能。

#!/usr/bin/env node

const program = require('commander');

program
  .version('0.1.0')
  .option('-p, --port [value]', 'Set server port')
  .option('-h, --host [value]', 'Set server host')
  .parse(process.argv);

console.log('Server listening on ' + program.host + ':' + program.port);

四、CommonJS模块化规范的不足

1、同步加载会阻塞

如果模块数量较多或者某个模块加载时间较长,会导致整个应用线程阻塞,在服务器端应用尤为明显。

2、无法在浏览器中使用

CommonJS是基于Node.js的模块化规范,只能在服务器端使用,在浏览器端要使用模块化需要使用其他规范如AMD或者ES6模块化。

五、总结

CommonJS模块化规范作为JavaScript社区最先使用的模块化规范之一,其思想和实践应用广泛,可以有效提高JavaScript代码的可维护性和可读性,但由于其同步加载和无法在浏览器中使用的限制,已经逐渐被其他规范取代。

深入理解CommonJS模块化规范

2023-05-18
深入理解CommonJS模块化规范

2023-05-20
js模块规范cjs,js模块规范esm

本文目录一览: 1、在node环境下怎么使用commonjs模块去使用require方法 2、如何理解前端模块化 3、js代码规范问题 JavaScript判断语句规范 4、使用 MockJs — 实

2023-12-08
commonjs规范和es6,commonjs和es6混用

本文目录一览: 1、CommonJS与ES6模块化的具体使用方式 2、commonjs 与 ES6 模块化 3、react+webpack 模块化应该采用CommonJS规范还是ES6规范,为什么 C

2023-12-08
前端模块commonjs,前端模块化开发

本文目录一览: 1、react怎么使用commonjs 2、如何理解前端模块化 3、CommonJS与ES6模块化的具体使用方式 4、react+webpack 模块化应该采用CommonJS规范还是

2023-12-08
模块包和commonjs,模块包和库

本文目录一览: 1、ECMAScript 6 的模块相比 CommonJS 的 有什么优点 2、ES6 模块与 CommonJS 模块的差异 3、react+webpack 模块化应该采用Common

2023-12-08
Vue模块化详解

2023-05-19
js引入commonjs,Js引入split

2022-11-23
esm和commonjs(esm和commonjs区别)

本文目录一览: 1、JS模块化规范 2、webpack作者评价vite 3、前端面试计划(二)ES6「v2-附加代码」 4、简述什么是commonjs,以及其与nodejs的关系 5、typescri

2023-12-08
commonjs的核心思想(commonjs语法)

本文目录一览: 1、工程化属于技术研发阶段的哪一个阶段? 2、如何正确理解javascript的模块化 3、简述什么是commonjs,以及其与nodejs的关系 4、工程化是什么 工程化属于技术研发

2023-12-08
commonjs和es6转换,commonjs和es6混用

本文目录一览: 1、node 循环加载- 2、如何将es5的代码转换为es6 3、ES6 模块与 CommonJS 模块的差异 4、怎么快速上手JavaScript中的ES6,ES6中的解构,运算符,

2023-12-08
commonjs缺点(ES6 Modules 相对于 Com

本文目录一览: 1、在node环境下怎么使用commonjs模块去使用require方法 2、webpack 常用loader、Plugins和Mode配置及解析规则 3、requirejs 支持 c

2023-12-08
深入理解 exportjs

2023-05-19
深入理解SystemJS

2023-05-21
commonjs怎么用,commonjs和requirejs

本文目录一览: 1、用commonjs方式开发前端 怎么弄 2、commonjs 循环引用 怎么实现 3、如何在node.js中使用requirejs 4、在node环境下怎么使用commonjs模块

2023-12-08
数据库的笔记mysql,数据库管理系统笔记

2022-11-24
深入浅出:内部模块cjs的加载机制

2023-05-22
js的2种commonjs,js有几种类型

本文目录一览: 1、javascript模块化是什么及其优缺点介绍 2、CMD 规范是不是就是 commonJS 规范 3、简述什么是commonjs,以及其与nodejs的关系 4、什么是【Comm

2023-12-08
关于javascript模块化简史的信息

2022-11-10
深入理解PHP PSR规范

2023-05-23