2011-08-08 2 views
1

브라우저에서 commonjs 모듈을 사용하는 경우 modulr을 사용하고 있습니다. 목표는 서버 환경에서도 이러한 모듈 중 일부를 다시 사용할 수있게하는 것입니다.modulr을 사용하여 브라우저와 서버에서 commonjs 모듈을 재사용하는 방법은 무엇입니까?

var _ = _ || require("underscore"); 

의미 :

  • 경우 _ 글로벌 VAR (브라우저 환경)로 존재, 그것은
  • 다른 부하를 사용

    이 "공유"모듈은 같은 것을 할 필요가 "밑줄"모듈 (서버)을 찾아 대신 사용하십시오.

이제 modulr은 정적 애널라이저를 수행하므로 모든 코드에서 해독, 마지막 js 파일을 생성하기 위해 호출 요청을 찾고, 빌드가 실패합니다.

이 문제를 해결할 수있는 방법이 있습니까?

답변

0

은 분명히 modulr에서이 문제를 해결하는 방법은 없다 (modulr이 --ignore=<module_list> 매개 변수 같은 것을 지원하는 경우 예를 들어, 모든. 잘 실행됩니다), 그래서 보이는 봉투라는 이름의 해결 모듈을 만들어야했습니다 같은 :

// ClientInitializer.js 
Env = require('shared/Env'); 
Env.override({ underscore: _ }); 
,691을 :
// Env.js 

var my = { 
    modules: undefined, 
    require: require 
}; 

exports.override = function(modules) { 
    my.modules = modules; 
}; 

exports.require = function(path) { 
    if (my.modules && my.modules[path]) { 
     return my.modules[path]; 
    } else { 
     // my.require(...) is needed instead of simply require(...) 
     // because simply require(...) will cause a modulr parsing failure 
     return my.require(path); 
    } 
}; 

그리고 클라이언트 측에서

는 않는 특정 초기화가

그래서, "공유"모듈을 수행 할 수 있습니다

// SharedModule.js 
var _ = require('shared/Env').require('underscore'); 

을 "공유"모듈이 서버에서 실행중인 경우, 보통은 함수가 호출이 필요합니다. 브라우저에서 실행중인 경우 Env 모듈은 global _ 변수로 응답합니다.

관련 문제