require函数来引用和使用其他模块的功能。CommonJS(简称CJS)是Node.js中用于打包JavaScript代码的模块系统,它使用require和module.exports(或exports)语句定义模块,适用于后端开发环境,本文将详细介绍CJS的基本概念、模块导入导出方法及其在项目中的具体应用。

一、基本概念
1. CJS简介
定义:CommonJS是一种同步模块加载规范,主要用于Node.js环境下。
特点:每个文件被视为一个独立的模块,拥有自己的独立作用域,变量和方法对其他模块不可见。
2. 与ESM的区别
ESM:ECMAScript模块(ESM)是ES6引入的标准模块系统,使用import和export关键字。
主要区别:CJS使用同步加载,而ESM支持异步加载;CJS主要用于后端,ESM在前端和后端均可使用。
二、模块导入与导出
1. 导出模块
单值导出:使用module.exports或exports导出一个值。
// module.js
function sayHello() {
console.log('Hello, World!');
}
module.exports = sayHello;多值导出:可以导出多个值,通常以对象形式。
// module.js
function sayHello() {
console.log('Hello, World!');
}
const name = 'John Doe';
module.exports = {
sayHello,
name
};2. 导入模块

单值导入:使用require导入单个值。
// index.js
const sayHello = require('./module');
sayHello();多值导入与解构:可以使用解构语法导入多个值。
// index.js
const { sayHello, name } = require('./module');
sayHello();
console.log(name);三、实际应用示例
1. 项目结构
假设项目目录如下:
D:/MyProjects/nodejs/hello
│ package.json
└─── src/
│ cjs/
│ │ index.cjs
│ │ module.cjs2. 准备文件
module.js:定义一个模块,导出函数和变量。
// src/cjs/module.js
function bcczcs() {
console.log('ljybc,bcczcs');
}
const ljy = 'ljybc';
module.exports = { bcczcs, ljy };index.cjs:导入并使用上述模块。
// src/cjs/index.cjs
const m = require('./module');
console.log(m);
m.bcczcs();
console.log(m.ljy);3. 运行项目
在命令行中运行以下命令:
D:\MyProjects odejs\hello>npm run dev:cjs
控制台输出:

{ bcczcs: [Function: bcczcs], ljy: 'ljybc' }
ljybc,bcczcs
ljybc四、相关问题与解答
1. CJS与ESM如何相互调用?
CJS调用ESM:可以使用第三方插件如esm。
npm install esm
然后在CJS文件中使用:
const esm = require('esm')(module);
const Test = esm('./test.mjs');
console.log(Test);ESM调用CJS:可以使用createRequire函数。
import { createRequire } from 'node:module';
const require = createRequire(import.meta.url);
const Test = require('./test.js');
console.log(Test);2. CJS中的默认导出与重命名导出如何处理?
默认导出:在CJS中,默认导出通常通过module.exports直接赋值。
// defaultExport.js
module.exports = function() { return 'default export'; };重命名导出:在导入时可以重命名以避免命名冲突。
const { default as newName } = require('./defaultExport');
newName(); // 调用默认导出的函数CJS作为Node.js环境中的主要模块系统,提供了简单高效的模块化解决方案,通过掌握其模块导入导出机制,开发者可以更好地组织和管理代码,提高开发效率和代码可维护性。
以上内容就是解答有关“cjs调用”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/44034.html<
