Webpack의 로더 순서는 무엇입니까?


87

파일과 일치하는 여러 테스트가있는 로더 구성이있는 경우 첫 번째 일치하는 로더 만 사용되기를 기대하지만 그렇지 않은 것 같습니다.

나는 소스를 읽으려고 시도했지만 내가 로딩을 구현한다고 생각하는 비트를 찾았을 때도 그것이 어떻게 작동하는지 이해할 수 없습니다.

문서 는 상황이 어떻게 작동해야하는지 언급하지 않습니다.

답변:


110
{
    test: /\.css$/,
    loaders: ['style'],
},
{
    test: /\.css$/,
    loaders: ['css'],
},

{
    test: /\.css$/,
    loaders: ['style', 'css'],
},

동일하게 보입니다. 기능 측면에서 이것은 style(css(file))(Miguel에게 감사드립니다) 와 동일 합니다.

그 안에서는 오른쪽에서 왼쪽으로loaders 평가됩니다 .


2
흠, 그다지 유용한 행동은 아닙니다 :-/ 나는 그 행동을 위해 preLoaders를 차라리 사용하고 싶습니다 ...
w00t

20
로더는 기능처럼 작동하므로 오른쪽에서 왼쪽으로 진행됩니다. this를 사용할 때 "style!css"함수처럼 상상해보십시오 : style( css( file ) )...이 경우 css먼저 호출됩니다.
Miguel Angelo

13
오른쪽에서 왼쪽으로 평가하는 것은 저를 한동안 힘들게했습니다. @ miguel-angelo 당신의 style( css( file ) )설명은 나에게 안도감입니다.
Evi Song

1
오른쪽에서 왼쪽으로 가장 가능성이 본질적으로 가기 BOTTOM을 의미한다, 우리는 웹팩 3 구문 대부분의 바닥을 볼 때 : 첫 번째 일명 안쪽 기능 ...
프랭크 Nocke

1
이것이 언제 추가되었는지 모르겠지만 마지막으로 주문에 대한 문서가 있습니다 . webpack.js.org/concepts/loaders/#loader-features 로더를 연결할 수 있습니다. 체인의 각 로더는 처리 된 리소스에 변환을 적용합니다. 체인은 역순으로 실행됩니다. 첫 번째 로더는 결과 (변환이 적용된 리소스)를 다음 로더로 전달합니다. 마지막으로 웹팩은 체인의 마지막 로더가 JavaScript를 반환 할 것으로 예상합니다.
Eric Majerus

61

공식 문서는 정말 잘 설명합니다. 불행히도 필요한 모든 정보는 문서의 다른 섹션에 분산되어 있습니다. 당신이 알아야 할 모든 것을 정리하겠습니다.

1.

순서가 올바른지 확인하십시오 (아래에서 위로).

2.

리소스 파일의 소스를 매개 변수로 사용하고 새 소스를 반환하는 함수입니다.

삼.

로더를 연결할 수 있습니다. 리소스에 대한 파이프 라인에서 적용됩니다. 최종 로더는 JavaScript를 반환 할 것으로 예상됩니다. 서로 다른 로더는 다음 로더에 전달되는 임의의 형식으로 소스를 반환 할 수 있습니다.

그래서...

가지고 somefile.css있고 통과하는 loaderOne경우 loaderTwo, loaderThree은 일반 체인 함수처럼 작동합니다.

{
    test: /\.css$/,
    loaders: ['loaderOne', 'loaderTwo', 'loaderThree']
}

정확히 같은 의미 ...

loaderOne(loaderTwo(loaderThree(somefile.css)))

그런트에서 온다면 || 꿀꺽 꿀꺽 세계는 혼란 스럽습니다. 로더 순서를 오른쪽에서 왼쪽으로 읽으십시오.


1
이 module.loader 배열이 있는데, 어떤 순서로 실행됩니까?
Saras Arya 2017 년

45
왜 그들은 아래에서 위로로드! ??
light24bulbs

문서의 "최종 로더"가 loaderOne귀하의 예 에 있음을 지정하기 위해 답변을 수정할 수 있습니다.
aaaaaa

1
@ light24bulbs .push를 사용하면 규칙에 간단한 추가 로더를 추가 할 수 있으며 앞에 추가하는 것에 대해 걱정할 필요가 없습니다.
Sarke 19

3

이 답변은 나에게 도움이되었지만 로더 순서에 영향을 미치는 또 다른 요점, 즉 로더 이름으로 보완하고 싶습니다 ! 접근하다.

url-loader우선 순위가 더 높은 설정이 file-loader있고 후자와 함께 이미지 경로가져오고 싶다고 가정 해 보겠습니다 . 아무것도하지 않으면 url-loader(인코딩 된 데이터 URL을 생성하는) 파일을 가져옵니다 .

가져 오기에 접두사를 붙이면 file-loader!가져 오기가 해당 로더로 전달됩니다.

import image from 'file-loader!./my-img.png'

3
예, 파일이 링크인지 포함되어야하는지 빌드 할 때 결정할 수 없기 때문에 피하고 싶습니다. !!다른 로더를 건너 뛰기 위해 시작할 수도 있습니다. BTW…
w00t
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.