Home  >  Article  >  Web Front-end  >  nodejs exports usage

nodejs exports usage

WBOY
WBOYOriginal
2023-05-14 10:31:06893browse

Node.js is a programming language based on the Chrome V8 engine that allows JavaScript to run on the server. It can use modules and packages to easily organize programs and manage dependencies. Among them, module.exports and exports are commonly used concepts in modularization. This article will introduce their usage in Node.js.

The relationship between module.exports and exports

In Node.js, each file is an independent module. If you want to use the variables and functions inside the file in other modules, you need to Export it. Both variables module.exports and exports can be exported.

In Node.js, each module has a module object, which contains module-related information, including an exports attribute. exports Mount the variables or functions to be exported on this attribute, and then reference the module externally through the require() function and call its exported variables and functions.

By default, exports points to the reference of module.exports, so through exports and module.exportsYou can export modules, but it should be noted that the pointing relationship between the two is not always the same, so sometimes we need to use module.exports instead of exports.

Compare exports and module.exports

When we use exports to export an object, we actually add an attribute to exports and assign a value . For example:

// add.js
exports.add = function (a, b) {
  return a + b;
}

In the above code, we use exports to export the add() method. Equivalent to executing the following code:

exports.add = function (a, b) {
  return a + b;
}

module.exports = exports; // exports被默认指向module.exports

Next let us look at an example:

// math.js
exports.add = function (a, b) {
  return a + b;
};

exports.sub = function (a, b) {
  return a - b;
};

// app.js
const math = require('./math');
console.log(math.add(1, 1)); // 2
console.log(math.sub(1, 1)); // 0

Reference the math module through the require() function and Call its exported method and the result is output correctly. Why is it correct?

We know that exports points to module.exports by default, and when we directly point exports to a new object, module The pointing relationship of .exports has been changed. When Node.js loads a module, it actually returns the module.exports object instead of the exports object, so after pointing exports to a new object , and then use the new object as the value of module.exports, which is the real export operation.

exports = {
  add: function (a, b) {
    return a + b;
  },
  sub: function (a, b) {
    return a - b;
  },
}

module.exports = exports;

Note: If you just reassign the attribute of exports, it will not change the pointing relationship between it and module.exports.

For example:

// multiply.js
exports = {
  mul: function (a, b) {
    return a * b;
  }
}

// app.js
const multiply = require('./multiply');
console.log(multiply.mul(2, 5)); // TypeError: multiply.mul is not a function

In the above code, exports points to a new object, but its properties are not assigned, so the exported value is undefined, so a TypeError will occur when calling.

Usage scenarios of exports and module.exports

In most cases, we can directly use exports to export modules. But sometimes, we need to export a function or object directly from the module instead of mounting them on exports. In this case, we need to use module.exports.

For example:

// foo.js
module.exports = function () {
  console.log('Hello World!')
}

// app.js
const foo = require('./foo');
foo(); // Hello World!

In the above code, directly assigning a function to module.exports actually uses the function as the export object of the entire module.

Summary

exports and module.exports are variables used to export modules in Node.js. They can expose the variables or functions of the module to external use during use. , it should be noted that exports points to module.exports by default, and its relationship does not always point to the same object. As a result, sometimes we need to use module.exports instead of exports. When choosing to use exports and module.exports to export modules, you can choose according to the actual situation.

The above is the detailed content of nodejs exports usage. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn