2011-06-12 12 views
2

NodeJS에서 모듈을 만드는 방법을 알고 있습니다 (다소 간단합니다). 그러나 서버 측과 클라이언트 측 환경 모두에서 작동하도록되어있는 것을 만들고 싶다면이 작업을 수행 할 수 있습니까?JavaScript를 클라이언트 측 및 서버 측과 호환되도록 만드는 방법은 무엇입니까?

모델 유형 ("클래스")을 만들고 싶습니다. Lib.define()이라는 클래스 생성 함수가 있다고 가정 해 보겠습니다. 그래서, 당신이 쓰기 :

Lib.Model = Lib.define({ 
    init: function() { 
     // constructor... 
    }, 

    save: function() { 
     // saves the model. 
    } 
}); 

위의 코드는 Lib.Model 인스턴스 작성 유형을 나타내는 개체 만들 것입니다. 그러나 NodeJS를 준수하도록 작성하는 방법은 무엇입니까? 위의 파일 (require('Model.js'))이 필요하면 export에 할당이 없으므로 아무 것도하지 않습니다. 그러나, 그렇다면 클라이언트 측 환경에 쓸모없는 export 개체가 있어야만합니까?

위의 코드가 Lib 글로벌 변수에 Model 멤버를 생성하도록 JS를로드하고 구문 분석하고 전역으로 작업 할 수있는 외에 다른 방법이 있습니까?

나는 지금 vm을 찾고 있는데, 어떻게 제대로 사용 하겠는지는 잘 모르겠다. Dojo가하는 것과 마찬가지로 경로를 분석하고 스크립트를로드하는 파일/클래스 로더가 있습니다. 클라이언트 측 (스크립트 태그 배치)에서 평소대로 작동하는 로직을 작성해야하고 NodeJS의 경우 파일 내용과 vm.runInThisContext(code)?을 읽는 것이 좋습니다.

답변

1

JSHintexports 기호가 있는지 여부를 감지하고있을 경우 추가합니다. 이들 검사는 다음과 같습니다 exports 다음 객체이고 있는지 확인

// Make JSHINT a Node module, if possible. 
if (typeof exports == 'object' && exports) 
    exports.JSHINT = JSHINT; 

은 (&& exports를 통해) null 아니라고 확인합니다. 합리적 접근법 인 것 같습니다. 물론 노드가 사용하는 것인 CommonJS module system에만 해당합니다.

+1

[밑줄 문자도 유사합니다] (http://documentcloud.github.com/underscore/docs/underscore.html#section-10) – Raynos

관련 문제