我如何创build一个NodeJS模块?

我已经阅读了NodeJS站点的详细信息: https : //nodejs.org/api/modules.html 。 我不明白模块是如何工作的,创build模块的最小步骤是什么,以及npm如何帮助我。

我怎样才能创build一个模块?
我如何使用模块?
把它放在npm上是什么意思?

注意:这是一个自我回答的问题,目的是将知识作为一个规范分享。

您可以使用一行代码创build一个NodeJS模块:

//mymodule.js module.exports = 3; 

然后你可以使用require来加载模块:

 //app.js require('./mymodule.js') 

我添加了“./”,因为它是一个文件的模块。 我们稍后会介绍。

现在,如果你做例如:

 var mymodule = require('./mymodule.js'); console.log(mymodule); // 3 

您可以用一个函数replace数字3,例如:

 //mymodule.js: module.exports = function () { console.log('function inside the module'); }; 

那么你可以使用它:

 var mymodule = require('./mymodule.js'); mymodule(); 

私有variables:

您在A模块内定义的每个variables都将只在其中定义:

 //mymodule.js var myPrivateVariable = 3; publicVariable = 5; // Never user global variables in modules //It's bad-pracrtice. Always add: var. module.exports = function() { // Every function of the module can use the private variables return myPrivateVariable++ }; //app.js var mymodule = require('./mymodule.js'); console.log(mymodule()); // return 3 console.log(mymodule()); // return 4 

重用模块:

关于NodeJS模块还需要了解的一点是,如果使用相同的模块两次(需要它),它将返回相同的实例,它将不会运行两次。

例如:

 //app.js var mymodule1 = require('./mymodule.js'); var mymodule2 = require('./mymodule.js'); console.log(mymodule1()); //return 3 console.log(mymodule2()); //return 4 (not 3) console.log(mymodule1()); //return 5 

正如您在下面的示例中看到的,该私有variables在模块的所有实例之间共享。

一个模块包

如果您的模块包含多个文件,或者您想与其他人共享模块,则必须在单独的文件夹中创build模块,并为该模块创build一个package.json文件。

npm init会为你创buildpackage.json文件。 对于模块,有3个必需的部分:

的package.json

 { "name" : "You module name", "version" : "0.0.3" } 

现在,您可以使用npm publish来发布模块。 我build议你将所有的模块发布到github上,然后模块将连接到你的github页面。

每个人都可以访问你发布到NPM的内容。 所以不要发布包含私人数据的模块。 为此你可以使用私有的npm模块。

下一步

模块可以返回多个函数或一个variables。 看到这个样本我们返回一个对象。

 module.exports.a = function() { // .. }; module.exports.b = function() { // .. }; // OR myObj = { a:3, b:function() { return this.a; } }; module.exports = myObj; 

更多信息:

  • 阅读有关package.json文件
  • 版本控制模块的最佳实践
  • 对于NodeJS模块来说更好
  • 私有模块,使用私有npm

相关问题:

  • Node.js module.exports的目的是什么?你如何使用它?
  • 在Node.js中,module.exports vs exports

在node.js中创build模块非常简单!

您可以将模块视为您可以在其他代码中使用的一组function,只需要它即可。 例如:考虑具有以下内容的文件functional.js:

 function display(){ console.log('i am in a display function'); } module.exports = display; 

现在只需要在任何其他模块,如:

 var display = require('./functional'); display() 

输出:我在显示function

同样你可以做:

 var exports = module.exports = {}; exports.display = function(){ console.log('i am in the display function'); } 

或者你也是这样做的:

 var funObj = { hello:function(){ console.log('hello function'); }, display:function(){ console.log('display function'); } }; module.exports = funObj;