Webpack 로더 대 플러그인; 차이점이 뭐야?


104

Webpack의 로더와 플러그인의 차이점은 무엇입니까?

플러그인에 대한 문서 는 다음과 같습니다.

플러그인을 사용하여 일반적으로 웹팩의 번들과 관련된 기능을 추가합니다.

babel이 jsx / es2015 변환에 로더를 사용한다는 것을 알고 있지만 다른 일반적인 작업 (예 : copy-webpack-plugin) 대신 플러그인을 사용하는 것처럼 보입니다.


2
로더는 파일을 js 인식 가능한 파일로 변환하고 (변환 중에 일부 작업을 수행), 플러그인은 로더 출력에서 ​​필요한 모든 작업을 수행 할 수 있습니다.
David Guan

답변:


61

로더는 require("my-loader!./my-awesome-module")코드에서 sth를 사용할 때 거의 모든 파일 형식의 전처리 변환을 수행합니다 . 플러그인에 비해 (a) 웹팩에 하나의 단일 기능 만 노출하고 (b) 실제 빌드 프로세스에 영향을 줄 수 없기 때문에 매우 간단합니다.

반면 플러그인은 웹팩 빌드 시스템 내에서 후크를 등록하고 컴파일러에 액세스 (및 수정) 할 수 있기 때문에 웹팩에 깊이 통합 될 수 있으며 컴파일뿐만 아니라 작동 방식도 가능합니다. 따라서 그들은 더 강력하지만 유지하기가 더 어렵습니다.


로더가 webpack과 깊이 통합 할 수없는 이유는 무엇입니까?
Nitin.

@NitinTyagi 플러그인의 일이기 때문입니다. 로더의 목적은 간단합니다.
helt

152

보완적이고 간단한 답변 추가.

로더 :

로더 는 번들 이 생성 되는 동안 또는 생성 되기 전에 개별 파일 수준에서 작동합니다 .

플러그인 :

플러그인은 번들 또는 청크 수준에서 작동하며 일반적으로 번들 생성 프로세스 가 끝날 때 작동 합니다. 플러그인은 번들 자체가 생성되는 방식을 수정할 수도 있습니다. 플러그인은 로더보다 더 강력한 제어 기능을 가지고 있습니다.

예를 들어 아래 이미지에서 로더가 작동하는 위치와 플러그인이 작동하는 위치를 명확하게 볼 수 있습니다.

여기에 이미지 설명 입력 참조 : 기사이미지


34
잘 했어! 두 개의 간단한 문장과 나는 이제 그 차이를 이해합니다. 완전히 이해할 수없는 횡설수설이므로 이제 ENTIRE 웹 팩 문서 라이브러리를 다시 작성하십시오.
rism

15

핵심에서 webpack은 파일 번 들러입니다. 매우 간단한 시나리오 (코드 분할 없음)를 고려할 때 이는 다음 작업 (높은 수준에서)만을 의미 할 수 있습니다.

  1. 엔트리 파일을 찾아 그 내용을 메모리에로드
  2. 콘텐츠 내의 특정 텍스트와 일치하고이를 평가합니다 (예 : @import).
  3. 이전 평가를 기반으로 종속성을 찾고 동일한 작업을 수행합니다.
  4. 그것들을 모두 메모리의 번들로 꿰매십시오.
  5. 결과를 파일 시스템에 기록

위의 단계를 자세히 살펴보면 Java 컴파일러 (또는 모든 컴파일러)가 수행하는 작업과 공감합니다. 물론 차이점이 있지만 로더와 플러그인을 이해하는 데는 중요하지 않습니다.


로더 :

webpack은 모든 파일 유형을 함께 묶을 것을 약속하기 때문에 여기에 있습니다.

핵심에있는 webpack은 js 파일을 번들링 할 수있을만큼만 가능하기 때문에이 약속은 webpack 핵심 팀이 외부 코드가 웹팩이 소비 할 수있는 방식으로 특정 파일 유형을 변환 할 수 있도록하는 빌드 흐름을 통합해야 함을 의미합니다.

이러한 외부 코드를 로더라고하며 일반적으로 위의 1 단계와 3 단계에서 실행됩니다. 따라서 이러한 로더를 실행해야하는 단계가 분명하기 때문에 후크가 필요하지 않으며 빌드 프로세스에도 영향을주지 않습니다 (빌드 또는 번들은 4 단계에서만 발생하기 때문에).

따라서 로더는 컴파일 단계를 준비하고 웹팩 컴파일러의 유연성을 확장합니다.


플러그인 :

웹팩이 변수 출력을 직접 약속하지는 않지만 세상이 원하고 웹팩이 허용하기 때문입니다.

핵심에있는 웹팩은 번들 러일 뿐이지 만 여러 단계와 하위 단계를 거치기 때문에 이러한 단계를 활용하여 추가 기능을 구축 할 수 있습니다.

예를 들어 웹팩 컴파일러의 기본 기능인 프로덕션 빌드 프로세스 (축소 및 파일 시스템에 쓰기)는 핵심 기능 (단지 번들링)의 확장으로 취급 될 수 있으며 기본 플러그인처럼 취급 될 수 있습니다. 그들이 그것을 제공하지 않았다면 다른 누군가가 그것을했을 것입니다.

위의 기본 플러그인을 보면 웹팩 번들링 또는 컴파일이 핵심 번들링 프로세스와 함께 끄거나 사용자 정의하거나 확장 할 수있는 많은 기본 플러그인 프로세스로 나눌 수있는 것처럼 보입니다. 이는 외부 코드가 선택할 수있는 특정 지점 (후크라고 함)에서 번들링 프로세스에 참여할 수 있음을 의미했습니다.

따라서 플러그인은 출력에 영향을 미치고 웹팩 컴파일러의 기능을 확장합니다.


1
멋진 대답은 정말 생생한 그림 물감
Robotron

이 답변이 정말 마음에 듭니다. 추론 할 수있는 몇 가지 설명을 제공합니다. 정의뿐만 아니라 그 뒤에 숨은 통찰력.
Dazag

1

로더는 파일 수준 에서 작동 합니다 . 템플릿을 작성하고 사용자의 편의에 따라 코드를 변환하여 변환 할 수 있습니다.

플러그인은 시스템 수준 에서 작동 합니다 . 패턴, 파일 시스템 처리 (이름, 경로) 등에 대해 작업 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.