一般术语放在上下文中

在学习任何其他编程语言之前,我学习了Java编程。 当我学习Node.js时,我得到了所有的术语混淆。 我一直认为API是一个方法库,类,等,有人build立了使我们的生活更容易。 然后我了解了模块,我基本上认为它和API(已经由某人build立的方法列表)是一样的。 那么,我了解了Express框架,它又是一个像模块和API一样的方法列表。 而且,我们将这些function整合到我们的程序中的方式都是通过类似的方式进行的

Var http = require('http'); 

因此,理解这些术语之间区别的人是否可以将这些术语放在可以解决我的问题的上下文(示例)中。

非常感谢您的帮助。

       

网上收集的解决方案 "一般术语放在上下文中"

  • 一个库只是众多模块,类,函数等相互关联的集合。

  • 一个框架是一个types或者是一个图书馆的一部分,这个图书馆是为你build立的,而不是仅仅依靠它。 图书馆和框架之间的区别有时可能有点模糊。

    使用Express,您可以构buildApplication及其Router来处理传入的请求,并确定何时调用您的代码。

     app.get('/', function (req, res) { // ... }); 

    虽然,框架也可以跨越代码跨越工具。 compound.js的可执行文件就是一个很好的例子。

  • 模块是库或框架的一个独立部分。 使用节点,它是一个脚本文件和从脚本导出的Object

  • API是关于如何与库,框架或模块交互的摘要/描述。

    通常你会在文档中find什么,并且是可访问的成员,他们的名字,他们的types,他们接受的论点等等。

    Express'API是:

    • express
      • types: function
      • 命名参数:(无)
      • 返回: Application
      • 会员
        • listen
        • types: function
        • 命名参数:
          • 名称: port
          • types: Number

    等等

这在很大程度上是一个有争议的问题 但是我会尝试提供Node社区通常使用的一些术语,以及它们之间的实际差异。

与Node相关的模块与您将与Java库关联的模块非常相似。 它提供了一个节点用户发现他们做了很多东西的包装。 频繁地提供节点库函数的包装来处理每个人都想做的事情。 一个简单的例子就是一个recursion的文件系统阅读器,就像扳手。 模块也扩展到你用来模块化你的代码的文件。 例如,模块不仅可以通过NPM安装,而且可以在标准的OOP实践下单独编写,作为代码库的一部分,以分离代码function。

要求( 'someNPMINStalledModule')

要求(” ./ someFileInYourCodeBase.js')

都是模块。 一个是通过NPM安装的,位于node_modules目录中,在您启动节点的目录中。 后一个例子是一个位于您启动节点的目录中的JavaScript文件。

那么有框架 。 在核心上,这些模块和模块做的事情是一样的,但是,它们意味着更广泛的传播,并且真正改变了你使用节点的方式。 在像Express这样的java世界框架中,类似于Grails之类的东西。 你仍然可以在Java中包含和执行所有你可以做的事情,但是Grails为你包装了一些东西,并且提供了方便而强大的方法调用来以不太冗长的方式进行批量的工作。 最后你会得到function相同的代码,但Grails允许你用更less的代码行完成更多的代码,通过泛化语言。 但是,正如我所说的,当Grails不提供您需要的function时,它仍然允许您使用本机代码。 以这几行代码获取代价,你已经增加了一层抽象,附加的函数调用等等。除非你是一个非常关心风格的人,否则这个区别是不重要的。 一个硬核ExpressJS开发者可能不会喜欢它,如果你在你的代码中包含一个普通的节点http服务器。 不是因为它是无效的节点,或从一个perforamnce视图任何不同,它破坏了你的代码的风格。 如果你的代码使用框架,你应该坚持使用这个框架中使用的编码约定。 但是,如果使用像扳手这样的模块来recursion地search目录,那么使用fs.readFile来读取单个文件在风格上仍然是可接受的。

然后有迷你应用程序 ,这是一个模块,使您可以快速启动简单的东西,如提供一个文件。 例如:http-server将通过一个简单的命令行将一个文件目录服务到你想要的任何端口。 你不会在你自己的代码中用'require'来使用它们,但是这种types的模块实际上可以是节点提供的最有用的东西,我强烈推荐使用一些。 (Nodemon,http-server和grunt是模块的一些非常有用的例子,可以帮助你的开发生活变得更容易)

最后是本机扩展 。 Node提供的并发性来自V8后端。 在纯粹的Javscript中复制它是不可能的,编写真正asynchronous代码的唯一方法是利用Node API提供的asynchronous操作,用process.nextTick,forksubprocess或者写本机扩展来做一些非常奇怪的逻辑。 本机扩展提供了Node没有提供的真正的并发操作。 数据库通信是最明显的例子,但任何人都可以开发一个C ++扩展,它将产生线程来完成工作。 还有一个非常方便的模块,启动线程来处理称为“线程gogo”的Javascript的位。 它简化了真正并行工作的启动,但是如果您处于需要这样的事情的位置,您可能会发现您的用例使用了错误的语言。 最终,这些模块与您使用它们的方式没有什么不同,但是意识到它们可以为NodeJS API提供的I / Otypes的操作提供额外的并发方法是一个独特且非常重要的区别。