export exports module.exports 这三个命令的区别是什么如何使用?

作者:J.sky · 发表于:
2023-07-26T13:29:25.000000Z
· 更新于:
2023-08-13T22:54:57.647618Z
· Tag: node.js

export exports module.exports 这三个命令中export是是ECMAScript 6(ES6)中引入的模块化规范,exports module.exports是Node.js中用于实现CommonJS模块规范的对象。

export的使用

export关键字用于在一个模块中声明一个或多个可以被其他模块访问的变量、函数或对象。通过export,我们可以将模块中的特定内容暴露给其他模块使用。

node环境下的示例 m_a.js:

// m_a.js
export const name = "suiyan.cc";
export function sayHello() {
    console.log("hello world!");
}

main.js:

// main.js
import { name, sayHello } from './m_a.js';

console.log(name);      // Output: suiyan.cc
sayHello();             // Output: hello world!

如果这样直接运行会报错。

如果你想在Node.js中使用ES6模块化语法,可以将文件的扩展名设置为.mjs,或者在package.json中添加"type": "module"字段。这样Node.js会将文件视为ES6模块。

exports 和 module.exports

如果你的项目是基于Node.js,可以使用exports或module.exports。这两者是等价的,但不能混用。如果在同一个模块中同时使用了exports和module.exports,后面的那个会覆盖前面的。

代码m_b.js:

//m_b.js
exports.age = 30;
exports.sayBye = function() {
    console.log("Goodbye!");
};

m_c.js:

//m_c.js
module.exports = {
    city: "suiyan.cc",
    population: 888
};

main.js:

//main.js
const moduleB = require('./m_b.js');
const moduleC = require('./m_c.js');

console.log(moduleB.age);       // Output: 30
moduleB.sayBye();               // Output: Goodbye!

console.log(moduleC.city);      // Output: suiyan.cc
console.log(moduleC.population);// Output: 888

记得在package.json中删除"type": "module"字段,因为已经不需要ES6的支持了。

总结

export关键字用于在一个模块中声明一个或多个可以被其他模块访问的变量、函数或对象,大多用在前端JS文件的编写。如果你的项目是基于Node.js,可以使用exports或module.exports。