2012-05-31 26 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