我一直看到招聘人员,开发人员等将Node.js称为框架。我认为,这对Node.js的真正含义是无知的。
通常,在职位描述中,Node.js被分组为AngularJS,React等库中的库。通常,我认为它是由不知道差异的人(HR,招聘人员等)输入的。
我认为Node.js是一个平台或运行时环境。它将DOM API(浏览器中的JavaScript)切换为其他各种API,例如文件系统(因为它作为服务器运行,而不是在浏览器中运行)。
人们为什么认为Node.js是框架?我错了吗?它实际上是一个框架吗?
我一直看到招聘人员,开发人员等将Node.js称为框架。我认为,这对Node.js的真正含义是无知的。
通常,在职位描述中,Node.js被分组为AngularJS,React等库中的库。通常,我认为它是由不知道差异的人(HR,招聘人员等)输入的。
我认为Node.js是一个平台或运行时环境。它将DOM API(浏览器中的JavaScript)切换为其他各种API,例如文件系统(因为它作为服务器运行,而不是在浏览器中运行)。
人们为什么认为Node.js是框架?我错了吗?它实际上是一个框架吗?
Answers:
很难说,因为这些词的定义不明确。通常来说,我认为将Node.js称为框架确实有点不典型,但是我很难辩解为什么它不是真正的框架。
所有这些都变得扑朔迷离,而且我经常看到语言的使用非常差,所以我会明确地从下而上开始
JavaScript是一种计算机语言,狭义地讲,是一组约定,这些约定使我们能够阅读和解释一堆具有执行语义的文本,这是一个奇特的词,意为“将语言解释为一组指令的方式”。叫程序类翻译,编译器,transpilers,棉短绒,荧光笔等,都以文本,并尝试做一些与如何执行代码这种传统的理解。
现在,让我们深入研究执行语义。通常,执行语义涉及读取语言文本并得出抽象机器的描述或可观察到的副作用的描述的过程。我想建议的是,这两个都假设需要某种“低级API”来操作机器或执行可观察的效果。这些通常被认为是运行时环境的
通常会滥用运行时一词来指代假定的原语本身及其实际实例化。
因此,现在我们有了一些毛病。语言是一组约定,它们假定存在运行时,以便为其执行语义提供含义。它永远不会“探究它们”,因为它们超出了范围。
为了实际使用一种语言,您需要诸如编译器或解释器之类的东西以及运行时实现。编译器/解释器和此运行时在实际执行代码时紧密结合。
那么Node.js在哪里适合呢?
我们必须将其分为几部分:
因此,Node.js有很多东西!
但这是一个框架吗?
这就是术语完全崩溃的地方-没有人对框架实际是什么有一个良好,一致,有意义的定义。
争论激昂:“什么是框架而不是库”,它们最终以不令人满意的事情结束,例如“库是您所调用的东西,而框架是您所需要的东西”。我什至不是真的想像今天这样悲伤地解释一下,但是JavaScript(尤其是Node.js JavaScript)对该定义有很大的打击,因为整个回调传递技术意味着您不断在调用之间进行切换被召唤。
我个人认为,这里有些实质性内容。我不想划清界限,所以我只想说
可以肯定地说,这是一条容易动摇的话,但是我想对框架提出一个非常有趣的观点:
框架暗示了一组有关如何解释代码的约定;因此,它们本身就是一种语言。
人们可能也想对此进行争论,但是如果您购买了我先前的定义,即语言只是一组约定,可以赋予一段文本以生命,那么只要您放下新的约定层,您就可以建立了一种新的语言。也许对于框架而言,原材料是其宿主语言的语义解释,而不是原始文本文件,但是想法是一样的!
因此,尽管如此,我很高兴将Node.js称为框架,即使它有点违反规范!Node.js以扩展语言的方式向原始JavaScript添加功能。随之带来了使用这种扩展语言的新假设和工具。从功能上讲,这些想法与其他公认的框架(如Ruby on Rails)的想法相同。
我会争辩说,如果此时您感到有点不安,并且想争辩说Ruby on Rails和Node.js在这种事情上存在巨大分歧,那么我当然会陪在您身边。两者所生活的概念世界截然不同 -我只想说它们是同一种东西:用于在特定领域内扩展基本语言功能的一组约定。
我也很高兴地建议Node.js的域很小且很紧,因此它添加的约定很容易推论,并且相对容易正确。在OTOH中,Ruby on Rails生活在一个复杂的,定义不明确的“业务Web应用程序”域中,这意味着它所遵循的约定肯定是模糊不清的。
但是所有这一切都说得很长,是的,招聘人员可能不知道说这些的意思。我猜想“框架”听起来比“运行时”或“引擎”更好,更古怪。
probably have no idea“框架”是一个您无需成为程序员就可以理解的词,这是一个有用的功能,如果可以节省时间,那么它实际上会有所作为。
                    Node.js®是基于Chrome V8 JavaScript引擎构建的JavaScript 运行时。
节点是运行时或环境。它不是一个框架。人们(我觉得)经常会犯错,因为诸如express之类的框架在节点上无处不在。
如果您有兴趣,请阅读更多有关运行时与框架的文章。