2012-05-31 31 views
1

改变对象(在相同的lib,但不同的路径)我的项目像这样的文件夹:如何在同一时间的NodeJS

  • - main.js
  • --lib
  • - ----力霸
  • ---------- a.js
  • ------ libB
  • ---------- 个b.js
  • ---------- LIB
  • --------------力霸
  • ---------- -------- a.js

main.js

var obja = require('./lib/libA/a'); 
require('./lib/libB/b'); 

b.js

var obja = require('./lib/libA/a'); 

a.js

module.exports = {}; 

然后,如果我在b.jsobjamain.js改变obja没有改变。

我的问题是如何同时更改两个obja

谢谢。

+0

如果像util.js这样的a.js使用* obja = require('a'); *,那么问题就解决了。但如何更改module.paths全球。 – coordinate

回答

1

你有两个不同的a.js文件 - 一个在lib/libA,另一个在lib/libB/lib/libA。这些是两个不同的模块,每个模块都有自己的exports对象。如果你想引用相同a模块,您需要将您b.js文件更改为:

var obja = require('../libA/a'); 

这样一来,既main.jsb.js将指向同一个模块(一个在lib/libA/a.js)。

+0

当我开发libB时,没有libA支持。如果我可以将libA放在全局的modules.path中,那么我可以var obja = require('a')来代替。就像require('util')一样。但如何设置modules.path全球? – coordinate

+1

您可以将'a.js'放入应用程序根目录中的'node_modules'文件夹中:请参阅[从node_modules文件夹加载](http://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders)这样您就可以将其简单导入为require('a')'。 – lanzz

+0

这是一个解决方案。但是我很困惑:在NodeJS lib中更改对象是否是错误的。我们永远不会改变普通的NodeJS库中的对象,比如jasmine-node,jshint,uglify-js ...... – coordinate

1

在您的例子,如果你摆脱obja可变的,只是引用libA.a你可以在这两个地方这种方式改变它 - 假设你是在同一个进程/集群

+0

谢谢。你的答案是有帮助的。但我必须导出libA.a.有没有更优雅的方式? – coordinate

+0

@coordinate这是最优雅的方式 – ControlAltDel

+0

如果libB不是我开发的库,我不能改变它来引用libA.a.所以我很困惑:在NodeJS库中更改对象是否是错误的。我们从不改变普通NodeJS库中的对象,比如jasmine-node,jshint,uglify-js ...... – coordinate