使用-Javascript-创建后端(2):NodeJS-模块系统.md

NodeJS 模块系统

在文件中编写代码是可以的,但如果你的应用程序需要大量代码,你的文件很快就会变得太大。

这就是为什么最好将代码分成几个模块(文件),以使代码可重用且结构更好。

这是一个例子

app.js

1
2
3
4
5
6
7
const name = "William";

const greeting = function (name) {
console.log(`Hello ${name}, welcome to NodeJS`);
};

greeting(name);

让问候模块可重复使用可能会很有趣。为此,我们将它放在名为 greeting.js 的文件中。

1
2
3
const greeting = function (name) {
console.log(`Hello ${name}, welcome to NodeJS`);
};

默认情况下,NodeJS 不允许从其他模块使用此功能。为此,你必须向模块指示哪些元素可以导出:

1
2
3
4
5
const greeting = function (name) {
console.log(`Hello ${name}, welcome to NodeJS`);
};

module.exports = greeting;

请注意这里最后一行 module.exports = Greeting,此函数允许使用来自另一个模块的 Greeting 函数。

现在你可以从 app.js 使用 require 函数加载此模块

1
2
3
4
const greeting = require("./greeting.js");

const name = "William";
greeting(name);

require 函数将使用 greeting 模块创建一个引用,并将该引用放在 constgreeting 变量中(这个变量可以命名为 greeting 以外的其他名称)

请注意,函数 require ('./greeting.js') 使用路径 ./,这允许向 NodeJS 指示该模块与我们的 app.js 文件位于同一文件夹中

多个导出

可以使用函数 module.exports 导出多个元素。以下是一个例子:person.js

1
2
3
4
const name = "William";
const car = "Ford Mustang";

module.exports = { name, car };

因此,使用包含多个元素的对象完成多次导出。

1
2
3
const person = require("./ person.js");

console.log(person.name, person.car);

请注意,“person”变量并不直接指向“name”或“car”,而是指向导出的对象。因此,要返回其内容,我们必须使用“person.name”

多次导出(替代语法)

可以使用 module.exports 函数导出多个元素。以下是示例:person.js

1
2
3
4
5
const name = "William";
const car = "Ford Mustang";

module.exports.name = name;
module.exports.car = car;

用法保持不变:

1
2
3
const person = require("./ person.js");

console.log(person.name, person.car);

也可以使用解构

1
2
3
const { name, car } = require("./ person.js");

console.log(name, car);

require 函数执行模块

执行 require 函数时,模块会立即执行。以下是示例

1
2
3
4
5
6
7
// hello.js

const hello = function () {
console.log("Hello World");
};

modules.exports = hello;
1
2
3
// app.js

const hello = require("./ hello.js");

NodeJS 执行此行后,hello 模块也会执行。在此示例中,模块仅执行导出,但如果模块包含代码,则会执行该代码,以下是示例

1
2
3
4
5
6
7
8
9
// hello.js

const hello = function () {
console.log("Hello World");
};

console.log("Hello Node!");

modules.exports = hello;
1
2
3
4
5
// app.js

const hello = require("./ hello.js");

Hello();

如果你启动了 app.js,你将看到它会在“Hello World”之前显示“Hello Node!”,因为如上所述,require 会执行模块。

创建模块时请考虑到这一事实,以避免出现不必要的行为。


相关文章: