节点模块和常规JavaScript文件有什么区别?

最近我有一些编写非常基本的节点应用程序的经验。 但是我对节点模块和javascript之间的区别有点混淆。 例如,我可以在下面的节点和JavaScript中获得underscrore库的优势:

节点

 var _ = require("underscore"); _.each([1, 2, 3], console.log); 

JavaScript的

 <script src="path/to/underscore.js"></script> _.each([1, 2, 3], console.log); 

我得到完全相同的结果。 让我迷惑的一点是,在浏览器中运行客户端编码是非常必要的,而我们可以在一个节点模块中处理它们。

Juhanna已经在评论中表示

如果在服务器上运行alert(),它肯定不会在客户端的浏览器中popup一个警告对话框。

但是,如果你谈论function上的差异( 实际上并不关心在客户端上运行服务器代码:这是愚蠢的 ),

1:在客户端

 <script src="path/to/xyz.js"></script> 

脚本包含在页面中,所有的脚本,无论是脚本内的任何文本,你都没有select只导入你的xyz.js文件的一部分。 例如:xyz.js:

 var a; var b; function Alwaysincluded(){ } function ThisOnealsoAlwaysincluded(){ } 

无论script.js中有什么,所有的东西都包含在html文件中。

2:在节点服务器上

 var _ = require("xyz"); 

您可以编写一个完整的应用程序,并从中返回一个小对象,例如,如果您的文件包含:

export.js文件:

 var xyz=10; function neverExported(){ // do some stuff } module.exports = function(width) { return { area: function() { return width * width; } }; } 

这里发生了什么:整个文件没有被导出到节点服务器,它被执行,然后被显式导出的对象被传送。

所以在这个例子中, function neverExported()永远不会被导出到server.js,

区别1:所以节点模块和普通的javasript文件有一点区别

现在另一个:

差异2:

1:加载之前执行的脚本<script src="path/to/xyz.js"></script>NO

2:是模块var _ = require("xyz"); 执行,然后返回一个对象: 是的

所以这里有两个区别。