我已阅读NodeJS网站的详细信息:https://nodejs.org/api/modules.html。我不明白模块是如何工作的,创建模块的最小步骤是什么,以及npm如何帮助我。
如何创建模块?
我如何使用模块?
把它放在npm上是什么意思?
注意:这是一个自我回答的问题,目的是将知识分享为规范。
答案 0 :(得分:14)
您可以使用一行代码创建NodeJS模块:
//mymodule.js
module.exports = 3;
然后您可以使用require:
加载模块//app.js
require('./mymodule.js')
我添加了'./',因为它是一个文件的模块。我们稍后会介绍它。
现在,如果您这样做:
var mymodule = require('./mymodule.js');
console.log(mymodule); // 3
您可以使用功能替换数字3,例如:
//mymodule.js:
module.exports = function () {
console.log('function inside the module');
};
然后你可以使用它:
var mymodule = require('./mymodule.js');
mymodule();
您在A模块中定义的每个变量都只在其中定义:
//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
如下例所示,该私有变量在模块的所有实例之间共享。
如果您的模块包含多个文件,或者您想与其他人共享模块,则必须在单独的文件夹中创建模块,并为模块创建package.json
文件。
npm init
将为您创建package.json文件。
对于模块,有3个必需部分:
{
"name" : "You module name",
"version" : "0.0.3"
}
现在,您可以使用npm publish
发布模块。我建议您将所有模块发布到github,然后模块将连接到您的github页面。
每个人都可以访问您向NPM发布的内容。所以永远不要发布包含私有数据的模块。为此,您可以使用私人npm模块。
模块可以返回多个函数或一个变量。请参阅我们返回对象的示例。
module.exports.a = function() {
// ..
};
module.exports.b = function() {
// ..
};
// OR
myObj = {
a:3,
b:function() {
return this.a;
}
};
module.exports = myObj;
答案 1 :(得分:4)
您可以将模块视为一组功能,只需要它就可以在其他代码中使用。 例如:考虑具有以下内容的文件functional.js:
function display(){
console.log('i am in a display function');
}
module.exports = display;
现在只需要在任何其他模块中使用它:
var display = require('./functional');
display()
输出:我处于显示功能
同样可以:
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;