`
yuyongkun4519
  • 浏览: 44632 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

CommonJS规范中module.exports和exports的区别

阅读更多

刚开始接触nodejs的同学对module.exports和exports的使用会有困惑,到底该使用哪一个,还是两个都可以使用,要理解二者的区别,应该先理解nodejs中require的加载机制。

 

// 准备module对象:
var module = {
    id: 'hello',
    exports: {}
};
var load = function (module,exports) {
    // 下面是加载的js代码:
    let foo='hello';
    module.exports = foo;
    // 最后返回module.exports
    return module.exports;
};
var exported = load(module,module.exports);
// 保存module:
save(module, exported);

 从中可以看出一个模块被引用的时候最终都会被输出成module.exports,而exports只是module.exports的一个引用,说到这里大家应该只能二者区别了。

 

下面例子

let name = "张三";
let age = 18;
let sayhello = () => {
    console.log(name);
}
exports.name=name;
exports.age=age;
exports.sayhello=sayhello;

 

 等价于

let name = "张三";
let age = 18;
let sayhello = () => {
    console.log(name);
}
module.exports.name=name;
module.exports.age=age;
module.exports.sayhello=sayhello;

  等价于

let name = "张三";
let age = 18;
let sayhello = () => {
    console.log(name);
}
module.exports={name,age,sayhello};

 

但是不能这样写,如果对exports对象重新赋值,那么最终module.exports的值将是空对象。

let name = "张三";
let age = 18;
let sayhello = () => {
    console.log(name);
}
exports={name,age,sayhello};

 

 总结:只要不是直接导出对象,使用module.exports和exports没有区别,要是导出的对象只能使用module.exports

分享到:
评论

相关推荐

    为Babel和TypeScript编译的代码添加moduleexports

    Node.js环境中,我们通常使用`module.exports`或`exports`来导出模块中的功能和变量,以便其他模块可以导入并使用。当使用Babel(一个广泛使用的JavaScript转换工具)和TypeScript(一种静态类型强校验的JavaScript...

    详解Node.js中exports和module.exports的区别

    在Node.js中,模块的导出和导入是通过CommonJS规范实现的,而exports和module.exports则是实现模块导出的关键概念。虽然在日常开发中经常使用这两个概念,但很多开发者可能会忽视它们之间的区别,这可能会在模块的...

    为Babel和TypeScript添加`module.exports`编译代码-JavaScript开发

    plugin为Babel和TypeScript编译的代码添加module.exports当您将ES2015模块与Babel一起使用或在TypeScript中具有默认导出时,它们会生成代码,要求您使用CommonJS中的require('x')。default而不是require来导入它。...

    微信小程序module.exports模块化操作实例浅析

    微信小程序中,module.exports是JavaScript中CommonJS模块化规范的一种实现方式。模块化是将大块的代码分割成可复用的小模块的过程,模块之间相互独立,便于维护和升级。 在微信小程序中,module.exports通常用于...

    package.json中main,module,exports三种方式的使用,自定义入口文件index.js

    对于Vue.js项目,尤其是由`@vue/cli`生成的Vue3项目,`package.json`中的`main`、`module`和`exports`字段用于指定不同环境下的入口文件,这有助于优化加载和打包过程。本文将深入探讨这三种方式的使用以及如何...

    js代码-for exports & module.exports

    `exports`和`module.exports`都是用来导出模块中的变量、函数或对象的,但它们之间存在一些微妙的区别: 1. **exports**: 这是一个快捷方式,它默认指向`module.exports`对象。当你直接修改`exports`时,实际上是在...

    node中modules.exports与exports导出的区别

    Node.js 中的模块导出机制是基于 CommonJS 规范的,主要通过 `module.exports` 和 `exports` 两个对象来实现的。本文将详细介绍 Node.js 中的模块导出机制,包括 `module.exports` 和 `exports` 的区别、使用场景和...

    浅谈node中的exports与module.exports的关系

    在Node.js环境中,模块系统是基于CommonJS标准构建的,其中`exports`和`module.exports`是两个关键的对象,它们关系密切,用于导出模块中的功能和数据。在这篇文章中,我们将深入探讨这两个对象的区别和如何正确使用...

    详解Sea.js中Module.exports和exports的区别

    因为SeaJs和Nodejs都是基于CommonJS,所以直接看的Node的官方文档解释 Module.exports The module.exports object is created by the Module system. Sometimes this is not acceptable; many want their module to ...

    uncommonjs:Module.exports的最小可行填充程序

    UnCommonJS要求要求出口默认洞穴范围发展兼容性也可以看看版本作者版权和许可 名称UnCommonJS-module.exports的最小可行填充module.exports 特征module.exports exports 可插拔的require 支持实时导出(ESM仿真) ...

    node.js module

    7. **`exports` 与 `module.exports` 的区别**:虽然通常情况下两者可以互换使用,但当需要导出一个完整的对象或函数时,应优先使用 `module.exports`。因为如果 `exports` 被赋值为一个新对象,原来的 `module....

    ES6第四天.xmind

    1.CommonJS 规范:Node.js 遵循 CommonJS 模块规范,该规范定义了如何在服务器环境中实现模块化,包括如何定义模块、如何引入和使用模块。 2.模块的定义:每个文件都是一个模块,模块内部定义的变量和函数默认情况...

    module.js

    `module.js`是Node.js实现这一规范的关键组件,它定义了如何加载、导出和导入模块。 二、模块加载机制 1. 文件查找:Node.js遵循一定的路径规则来查找模块。首先,它会检查当前目录下的`node_modules`文件夹,然后...

    01CommonJS.rar

    CommonJS是Node.js中实现模块化开发的重要规范,它允许我们在JavaScript中导入和导出模块,使得代码结构清晰、可复用性增强。本文将深入探讨CommonJS的基本概念、使用方法以及通过一个模拟扑克牌发牌的小例子来实践...

    node笔记第一天

    nodejs 采用的commonjs模块规范 一个js文件就是一个模块 重点 : 导出 module.exports exports.变量 = 导出的对象 不能让exports直接指向一个对象, 因为,exports 就 不再指向module.exports了, 指向新对象了 ...

    module.zip

    在过去,浏览器环境不直接支持模块化,开发者通常依赖于如AMD(Asynchronous Module Definition)和CommonJS等库,如RequireJS和Browserify。但是随着ES6标准的普及,现代浏览器开始原生支持`import`和`export`,...

    详解Node中导入模块require和import的区别

    在 Node.js 中,我们使用 require 函数和 module.exports 对象来导入和导出模块。在 ES6 中,我们使用 import 语句和 export 语句来导入和导出模块。两种方式有着不同的语法和使用场景,但是它们都可以用来实现模块...

    斗鱼制动发言的

    nodejs 采用的commonjs模块规范 一个js文件就是一个模块 重点 : 导出 module.exports exports.变量 = 导出的对象 不能让exports直接指向一个对象, 因为,exports 就 不再指向module.exports了, 指向新对象了 ...

    Nodejs中的require函数的具体使用方法

    关于模块导出,Node.js 使用两种主要的方法来导出模块功能:module.exports 和 exports。module.exports 对象由每个模块创建,用于定义该模块对外暴露的功能。通过向 module.exports 对象添加属性,可以将函数、对象...

Global site tag (gtag.js) - Google Analytics