Node.js 模块系统

2018-01-14 15:07 更新

Node.js使用基于模块系统的文件。每个文件就是它自己的模块。每个文件都可以使用 module 变量访问当前模块定义。当前模块的导出由 module.exports 变量确定。要导入模块,请使用全局变量的require函数。

例子

以下代码在文件 myData.js 中创建一个函数,以便在应用程序的各个部分重复使用。要从位于c:/intro/base/myData.js中的文件导出函数,我们只需将其分配给module.exports。

module.exports = function () {
   console.log("a function in file myData"); 
}; 

为了从文件c:/intro/base/myValue.js使用此函数,使用全局 require 函数导入myData,并将返回的值存储在局部变量中。

var myData = require("./myData"); 
myData(); // logs out : "a function in file myData" 

module.export

Node.js中的每个文件都是一个模块。要从模块导出的项目应该附加到module.exports变量。module.exports被定义为每个文件中的一个新的空对象。module.exports = {}是隐式存在。

默认情况下,每个模块导出一个空对象, {}

console.log(module.exports); // {} 

导出别名

我们可以从模块中导出多个变量。实现这一点的一种方法是创建一个新的对象字面量并将其分配给module.exports。在c:/intro/exports/myData1.js我们有:

var a = function () {
    console.log("a called"); 
}; /*from www.w3cschool.cn*/
var b = function () {
    console.log("b called"); 
}; 

module.exports = {
    a: a, 
    b: b 
}; 

在c:/intro/exports/myData2.js我们有:

module.exports.a = function () { 
    console.log("a called"); 
}; 

module.exports.b = function () { 
    console.log("b called"); 
}; 

Node.js帮助我们为module.export创建一个名为exports的别名,而不是每次都键入module.exports.something,你可以简单地使用exports.something。

在c:/intro/exports/myData3.js我们有

exports.a = function () { 
    console.log("a called"); 
}; 
exports.b = function () { 
    console.log("b called"); 
}; 

exports 就像任何其他的JavaScript变量一样。Node.js只是export = module.exports。如果我们添加一些东西,例如,添加myData到exports,也就是exports.myData = 123,因为JavaScript变量是引用,我们可以有效地实现module.exports.myData = 123。以下代码显示,所有这些方法从消费(导入)角度来看是等效的。

在c:/intro/exports/app.js我们有

var myData1 = require("./myData1"); 
myData1.a(); //www.w3cschool.cn
myData1.b(); 

var myData2 = require("./myData2"); 
myData2.a(); 
myData2.b(); 

var myData3 = require("./myData3"); 
myData3.a(); 
myData3.b(); 

模块的最佳实践

不要使用.js扩展名

最好是做require('./myData')而不是require('./myData.js'),即使两者对Node.js都很好。

相对路径

当使用基于文件的模块时,你需要使用相对路径(换句话说,做require('./myData')而不是require('myData'))。

利用exports

当你想要导出多个事物时,尝试并使用exports alias。

以下代码显示如何创建本地变量并导出

var myData = exports.myData = /* whatever you want to export as `myData` from this module */ ; 

导出整个文件夹

如果有太多你持续导入到其他文件的模块在一起,尽量避免重复导入。

var myData = require("../something/myData"); 
var myValue = require("../something/myValue"); 
var another = require("../something/another"); 
var third = require("../something/third"); 

相反,在something文件夹中创建一个单独的index.js。在index.js中,导入所有模块一次,然后从此模块导出它们。

在c:/yourFolder/index.js我们有

exports.myData = require("./myData"); 
exports.myValue = require("./myValue"); 
exports.another = require("./another"); 
exports.third = require("./third"); 

现在你可以在每当你需要所有这些时简单地导入这个index.js:

var something = require("../something/index"); 
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号