如何创建 NodeJS 模块?

Posted

技术标签:

【中文标题】如何创建 NodeJS 模块?【英文标题】:How Do I create a NodeJS Module? 【发布时间】:2016-06-23 15:19:21 【问题描述】:

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

如何创建模块? 如何使用模块? 放在 npm 上是什么意思?

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

【问题讨论】:

【参考方案1】:

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

您可以将模块视为一组可以在其他代码中使用的功能,只需简单地要求它即可。 例如:考虑具有以下内容的文件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;

【讨论】:

【参考方案2】:

您可以使用一行代码创建一个 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();

私有变量:

您在模块中定义的每个变量都将仅在其内部定义:

//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 个必需部分:

package.json


  "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;

更多信息:

Read about package.json files Versioning in you modules best practice More best practive for NodeJS modules Private modules, using private npm

相关问题:

What is the purpose of Node.js module.exports and how do you use it? module.exports vs exports in Node.js

【讨论】:

以上是关于如何创建 NodeJS 模块?的主要内容,如果未能解决你的问题,请参考以下文章

nodejs之url模块

nodejs之url模块

如何编译nodejs的二进制模块

nodejs加密模块使用

如何使用 nodejs 模块 http2 将 http2 与 ExpressJS 集成?

Nodejs学习笔记之NET模块