我如何创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;