节点模块和常规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");
执行,然后返回一个对象: 是的
所以这里有两个区别。