【问题标题】:Building a javascript app shared across node.js and client side构建一个跨 node.js 和客户端共享的 javascript 应用程序
【发布时间】:2012-12-31 02:02:22
【问题描述】:

我习惯跨平台开发。在 C/C++ 方面它很简单,但是在使用 javascript 时我遇到了一个问题。我希望能够在客户端重用我的网络服务中的代码。目前 node.js 要求我以最不愉快的方式编写程序,但我可以处理它:

//MyClass.js
function MyClass()
{
    this.test = function(){}
}

module.exports.MyClass = MyClass;
//server.js

var m = new require('MyClass.js').MyClass();
m.test();
//client.js
$.getScript("MyClass.js", function(){
    var m = new MyClass();
    m.test();
});

到目前为止一切都很好,但是当我需要从MyClass.js 加载类时我遇到了问题。我怎样才能让它在所有平台上工作?有没有办法在不处理文件的情况下实现可重用性?

【问题讨论】:

标签: javascript node.js code-reuse


【解决方案1】:

Node 要求您什么都不做。如果您不喜欢 Node 模块系统的工作方式,请不要使用它。

//MyClass.js
MyClass = function ()
{
    this.test = function(){}
}

//server.js
require('./MyClass.js');
var m = new MyClass();
m.test();

现在您的应用程序与您在客户端进行的操作兼容。请记住,您现在正在全局命名空间中创建类,这是使用 Node 模块布局的原因之一。

我建议还研究一些在客户端上使用节点样式require 的方法。有很多可用的脚本,例如RequireJSBrowserify

【讨论】:

  • 在我这边使用 node.js v0.8.15 它不起作用:src/server.js:3 var m = new MyClass(); ^ ReferenceError: MyClass is not defined 你使用的是哪个版本的 node.js?
  • 抱歉,试试MyClass = function () {,而不是function MyClass()
  • @icktoofay,模块没有自己的全局范围。全局对于整个应用程序来说是全局的。 nodejs.org/api/globals.html#globals_global 我明白你在说什么。让我再次检查我的代码,看看为什么这对我有用。
  • @icktoofay,我刚刚测试过,效果很好。但是,可能存在路径问题...代码缺少./。现在编辑。
  • @icktoofay,不用担心,但我自己现在有点困惑!我的理解是function something 等同于something = function。对此有什么想法吗?
猜你喜欢
  • 2018-04-27
  • 2011-05-21
  • 1970-01-01
  • 2014-10-25
  • 2011-09-03
  • 2017-06-13
  • 1970-01-01
  • 2013-09-01
  • 2011-01-29
相关资源
最近更新 更多