NodeJS 模块系统
在文件中编写代码是可以的,但如果你的应用程序需要大量代码,你的文件很快就会变得太大。
这就是为什么最好将代码分成几个模块(文件),以使代码可重用且结构更好。
这是一个例子
app.js
1 | const name = "William"; |
让问候模块可重复使用可能会很有趣。为此,我们将它放在名为 greeting.js
的文件中。
1 | const greeting = function (name) { |
默认情况下,NodeJS
不允许从其他模块使用此功能。为此,你必须向模块指示哪些元素可以导出:
1 | const greeting = function (name) { |
请注意这里最后一行 module.exports = Greeting
,此函数允许使用来自另一个模块的 Greeting
函数。
现在你可以从 app.js
使用 require
函数加载此模块
1 | const greeting = require("./greeting.js"); |
require
函数将使用 greeting
模块创建一个引用,并将该引用放在 constgreeting
变量中(这个变量可以命名为 greeting
以外的其他名称)
请注意,函数 require ('./greeting.js')
使用路径 ./
,这允许向 NodeJS
指示该模块与我们的 app.js
文件位于同一文件夹中
多个导出
可以使用函数 module.exports
导出多个元素。以下是一个例子:person.js
1 | const name = "William"; |
因此,使用包含多个元素的对象完成多次导出。
1 | const person = require("./ person.js"); |
请注意,“person”变量并不直接指向“name”或“car”,而是指向导出的对象。因此,要返回其内容,我们必须使用“person.name”
多次导出(替代语法)
可以使用 module.exports
函数导出多个元素。以下是示例:person.js
1 | const name = "William"; |
用法保持不变:
1 | const person = require("./ person.js"); |
也可以使用解构
1 | const { name, car } = require("./ person.js"); |
require 函数执行模块
执行 require
函数时,模块会立即执行。以下是示例
1 | // hello.js |
1 | // app.js |
NodeJS
执行此行后,hello
模块也会执行。在此示例中,模块仅执行导出,但如果模块包含代码,则会执行该代码,以下是示例
1 | // hello.js |
1 | // app.js |
如果你启动了 app.js
,你将看到它会在“Hello World”之前显示“Hello Node!”,因为如上所述,require
会执行模块。
创建模块时请考虑到这一事实,以避免出现不必要的行为。
相关文章: