2013-05-18 3 views
4

저는 현대의 클라이언트 측 JS 생태계를 따라 잡고 CommonJS 및 AMD와 같은 모듈 시스템 (브라우저 도구, 요구 사항, onejs, 잼 ​​및 기타 수십 가지 관련 도구 포함)에서 읽어 왔습니다. Javascript 라이브러리를 작성하는 경우 가장 널리 액세스 할 수있는 패키지 (CommonJS, AMD, 그리고 특히 어느 것에 의해서도 맹세하지 않는 사용자가 이상적입니다)를 어떻게 포장합니까?오늘 클라이언트 측 Javascript 라이브러리를 패키지하는 방법은 무엇입니까?

jQuery와 같은 인기있는 라이브러리는 건물 자체에 오래된 학교 파일 연결을 사용하고 내보내기 또는 전역 컨텍스트에 쓸 것인지 여부를 동적으로 감지하는 것 같습니다. 저는 현재 동일한 일을하고 있습니다 만, 주된 단점은 (jQuery와는 달리) 몇 개의 라이브러리에 의존하는 경우 사용자에게 전이 집합을 수동으로 미리 포함시키지 않아도된다는 것입니다. (현재 저는 두 가지 의존성 만 가지고 있습니다.) 물론 전역 네임 스페이스 오염도 있습니다.

또는 각 컨텍스트에 대해 내 라이브러리의 여러 버전을 생성하는 것이 가장 쉽습니다.

또한 포장 및 게시에 영향을줍니다. 몇 가지 시스템이 있지만, 주요한 것은 배수관 (bower)이라고 생각합니다. 그러나 구성 요소 용으로 패키지화하려면 CommonJS 모듈이 필요합니다.

내가 알고 있어야하는 다른 관련 측면이 있습니까? 이 모든 것을 수행하기위한 훌륭한 예제 프로젝트가 있습니까?

답변

3

나는 이것에 대해 자신을 생각하고하고 난 몇 결론에 온 :

  1. 모두 글로벌과 AMD는 설정에서 사용할 수있는 프레임 워크의 한 버전을 만들기
  2. 에 필요 집착하지 마십시오 클라이언트에게 의존성을 수동으로 포함하도록 요청하십시오. 프로젝트 당 하나의 작업이므로 어쨌든을 AMD 패키지 또는 글로벌 범위 프레임 워크로 제공해야합니다 (제 3 자 의존성 배치는 어쨌든 조정되어야합니다. 내가 말하고있는 것)
  3. 나는 Grunt for pro를 사용한다. 건물/포장/시험/linting/뭐든간에, 그래서 다른 모든 포장 대안에 나는 다른 작업을했습니다.

따라서 간단히 말해 "old-school/AMD"패키지를 "new-age"패키지에 먼저 빌드하십시오.

P.

귀하의 포장 및 배달 과정/필요성이 일 때 (가능한 경우)에 귀하의 건축 및 개발 결정을 지시해서는 안됩니다.

내 선택의 패키징 패러다임을 사용하면서 가장 맞춤 설정할 수있는 모듈 식 및 유용한 코드를 작성하려고 시도한 후 대체 패키징을 고려합니다. 첫 번째 부분에서 성공한 경우 두 번째 코드는 일반적으로 단순한 코드베이스 변경 만 필요합니다 (첫 번째 단계에서는 모듈화 및 적절한 원칙 적용으로 인해).

관련 문제