Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js和客户端共享相同的脚本_Javascript_Scope_Client Server_Node.js - Fatal编程技术网

Javascript Node.js和客户端共享相同的脚本

Javascript Node.js和客户端共享相同的脚本,javascript,scope,client-server,node.js,Javascript,Scope,Client Server,Node.js,使用Node.js的理论好处之一是可以在客户端和服务器之间共享相同的脚本。如果客户端不支持javascript,那么就有可能将相同的功能降级到服务器 但是,Node.jsrequire()方法可以自己工作。在您加载的脚本中,您可以将内容添加到此或导出,这些内容稍后将在获取脚本的对象中可用: var stuff = require('stuff'); stuff.show(); 在stuff.js中: this.show = function() { return 'here is my

使用Node.js的理论好处之一是可以在客户端和服务器之间共享相同的脚本。如果客户端不支持javascript,那么就有可能将相同的功能降级到服务器

但是,Node.js
require()
方法可以自己工作。在您加载的脚本中,您可以将内容添加到
导出
,这些内容稍后将在获取脚本的对象中可用:

var stuff = require('stuff');
stuff.show();
在stuff.js中:

this.show = function() {
    return 'here is my stuff';
}
var ns = typeof exports == 'undefined' ? (function() {
    return window['stuff'] = {};
})() : exports;

ns.show = function() {
    return 'here is my stuff';
}

delete ns; // remove ns from the global scope
因此,在客户端上重新使用此脚本时,
.show()
方法将添加到
窗口
范围中。这不是我们在这里想要的,相反,我们希望将其添加到自定义名称空间中

到目前为止,我唯一的解决方案是(在stuff.js中):


这非常有效,因为我可以在服务器和客户端上调用
stuff.show()
。但它看起来很奇怪。我尝试搜索解决方案,但node.js仍然非常新(即使对我来说也是如此),因此几乎没有可靠的资源。有人对如何解决这个问题有更好的想法吗?

简而言之,如果你想重复使用脚本,不要使用Node.js特定的东西,你必须使用最低的公分母,浏览器

解决办法是:

  • 过度使用,这将使它在Node.js和浏览器中都能工作。但是您需要在服务器端使用RequireJS格式,还需要插入一个即时转换的脚本

  • 做你自己的加载器

  • 在服务器端和客户端使用匿名函数包装重用脚本
  • 现在创建一些代码,用户在该函数上调用(模块),在传入模块的节点端,在传入名称空间对象的客户端
  • 保持简单和愚蠢,就像现在一样,不要在Node.js端的模块范围中使用
    这个


  • 我希望我能给你一个简单的开箱即用的解决方案,但在这种情况下,两种环境都有很大的不同。如果你真的有大量的代码,你可以考虑一个生成文件的构建脚本。

    你可以只写你自己的<>代码>需要/<代码>函数,并把它作为一个脚本加载到浏览器中,它的运行方式与它在NoDE上的方式完全一样。你必须下载脚本来完成这项工作,这需要花费相当长的时间并阻止其他内容。