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.
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.exports
You 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
.
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.
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.
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!