2013-11-05 2 views
5

Browserify 인 jQuery 또는 녹아웃 같은 공용 라이브러리의 확장자를 포함하는 가장 좋은 방법은 무엇입니까?브라우저에서 확장 기능을 요구하는 올바른 방법

예를 들어 knockout-switch-case과 같은 프로젝트에서 전역 ko (변수) 변수는 모듈 정의 호출에 전달되지 않습니다.

녹아웃 스위치의 경우에 대한 AMD의 코드는 다음과 같습니다

ko (녹아웃)을 기대
(function (root, factory) { 
    if (typeof define === 'function' && define.amd) { 
     // AMD. Register as an anonymous module. 
     define(['knockout'], factory); 
    } else { 
     // Browser globals 
     factory(root.ko); 
    } 
}(this, function(ko) { 

는 일반적으로 window을 할 수 있지만, Browserify를 사용하는 경우가 Object {} 인 것이다, root의 세계로 .

는이 같은 뭔가 browserify-shim를 사용하여 예제를 시도했지만, 예상대로 (그것이 더 나은 모듈 춤을 가지고 knockout-mapping위한 작업 않았지만)가 작동하지 않았다 : 내가 느끼는

knockout: 
    path: VENDOR_PATH + '/knockout.js' 
    exports: 'ko' 
    depends: 
     jquery: '$' 

을 jQuery, Knockout 또는 전역에 의존하는 라이브러리를위한 다른 확장을 포함하는 모듈 정의 패턴이 상당히 일반적 일 것이라고 기대하면서 분명해야 할 사항을 간과해야합니다. 또는 이것은 아마도 무언가에 상당히 특정한 문제입니다. 녹아웃 스위치 케이스이 (가) 수행 중입니다.

어쨌든 생각과 의견은 진심으로 감사드립니다.

+0

을 당신은'녹아웃 스위치 - case'하지 KO 그래서 자신을 심은 필요 다음과 같이 시도하십시오. shim (browserify(), { 'knockout-switch-case': { 경로 : './js/vendor/knockout-switch-case.js' , 내보내기 : null , 의존 함 : {녹아웃 : 'ko'} } })' – nemesv

답변

5

이 browserify - 심 설정은 나를 위해 작동 : 그와

shim(browserify(), { 
    jquery: { 
     path: './js/vendor/jquery.js', 
     exports: '$' 
    }, 
    'knockout': { 
     path: './js/vendor/knockout.js', 
     exports: 'ko', 
     depends: { 
      jquery: '$' 
     } 
    }, 
    'knockout-switch-case': { 
     path: './js/vendor/knockout-switch-case.js', 
     exports: null, 
     depends: { 
      knockout: 'ko' 
     } 
    } 
}) 

, 당신이 평소와 같이 필요할 수 있습니다 : var ko = require('knockout');

관련 문제