使用Node.js的理论好处之一是可以在客户端和服务器之间共享相同的脚本,这样如果客户端不支持javascript,也可以将相同的功能降级到服务器端。
但是,Node.js的require()方法是独立的。在加载的脚本中,可以向this或exports添加内容,稍后可以在检索脚本的对象中使用它们。
但是,Node.js的require()方法是独立的。在加载的脚本中,可以向this或exports添加内容,稍后可以在检索脚本的对象中使用它们。
var stuff = require('stuff');
stuff.show();
在 stuff.js 中:this.show = function() {
return 'here is my stuff';
}
所以,在客户端重复使用这个脚本时,.show()
方法将被添加到 window
作用域中。这不是我们想要的,相反地,我们想要将它添加到自定义的命名空间中。
到目前为止,我唯一的解决方案是类似下面这样(在 stuff.js 中):
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
这个方案很好用,因为我可以在服务器和客户端上调用stuff.show()
。但它看起来有点奇怪。我尝试搜索解决方案,但是node.js对我来说还很新,所以可靠的资源很少。请问有没有更好的解决方法?
require
函数,并将其作为脚本加载到浏览器中,它的工作方式与在 node.js 上完全相同。 - Raynos