“코드 생성기가 [100KB]를 초과하여 [일부 파일]의 스타일을 최적화하지 않았다”는 것은 무엇을 의미합니까?


165

프로젝트에 새 npm 패키지를 추가하고 내 모듈 중 하나에 필요합니다.

이제 웹팩에서이 메시지를받습니다.

build modulesNote: The code generator has deoptimised the styling of "D:/path/to/project/node_modules/ramda/dist/ramda.js" as it exceeds the max of "100KB".

무슨 뜻인가요? 조치를 취해야합니까?


Webpack 구성을 어딘가에 넣을 수 있습니까? 문제의 NPM 패키지는 무엇입니까?
Juho Vepsäläinen

Johan,이 문제를 해결 한 답변을 수락하십시오
Dana Woodman

답변:


151

compactBabel 컴파일러의 옵션 과 관련이 있습니다. "불필요한 공백 문자와 줄 종결자를 포함하지 않습니다. '자동'으로 설정하면 입력 크기가 100KB보다 크면 컴팩트로 설정됩니다." 기본적으로 값은 "auto"이므로 경고 메시지가 표시 될 수 있습니다. Babel 문서를 참조하십시오 .

쿼리 매개 변수를 사용하여 Webpack에서이 옵션을 변경할 수 있습니다 . 예를 들면 다음과 같습니다.

loaders: [
    { test: /\.js$/, loader: 'babel', query: {compact: false} }
]

17
로더가 여러 개인 경우 매개 변수 ?compact=false대신 사용할 수 있습니다 query. 예 :{test: /\.js$/, loaders: ['ng-annotate', 'babel?compact=false']}
kendsnyder

4
또한 .babelrc 파일에 { "compact": true} 추가와 같이 webpack.config.js 파일을 정리하기 위해 .babelrc 파일에 옵션을 추가 할 수 있습니다.
Ron

3
@Ricardo Stuven 그러나 왜 그것을 false로 바꾸겠습니까? "없는 불필요한 공백 문자와 라인 종결 자 포함"긍정적 인 것처럼 보인다
omriman12

1
@Ben은 기본적으로 개발할 때만 false로 설정합니까?
omriman12

2
@ omriman12 출력을 어떻게 사용할 지에 달려 있습니다. 축소 될 프로덕션 빌드 인 경우이 매개 변수를로 설정하는 데 아무런 가치가 없습니다 false. 출력 형식이 중요한 광산과 같은 경우 가치가 있습니다. 대부분의 경우와 마찬가지로 다릅니다. :)
Ben

48

이것은 바벨 오류 인 것 같습니다 . babel-loader를 사용하고 있으며 로더 테스트에서 외부 라이브러리를 제외하지 않는 것 같습니다. 내가 알 수있는 한, 메시지는 해롭지는 않지만 여전히 다음과 같이해야합니다.

loaders: [
    { test: /\.js$/, exclude: /node_modules/, loader: 'babel' }
]

보세요 그랬어?


1
이상하게도, 나는 같은 메시지 (람다에 대해서도)를 보았습니다 exclude: /node_modules/.
로마 포미 노프

같은 길? 외부 도서관이 다른 곳에 있습니까? 그렇지 않은 경우 Ricardo의 솔루션을 사용해 볼 수도 있습니다. 이 문제는 그리 중요하지 않습니다.
mhelvens

내 잘못이야. 잘못된 구성을 확인하고있었습니다. 실제는 없습니다 exclude.
Roman Pominov

이 답변이 더 좋았습니다. 감사합니다 @mhelvens
Mosia Thabo

22

아래 세 가지 옵션 중 하나가 메시지를 제거합니다 (그러나 다른 이유로 그리고 다른 부작용으로 가정합니다).

  1. node_modules디렉토리를 제외 하거나 include앱이있는 디렉토리를 명시 적으로 제외 합니다 (100KB를 초과하는 파일은 포함하지 않을 수 있음)
  2. 설정된 바벨 옵션 compacttrue( "자동"이외의 실제로 값)
  3. 바벨 옵션 compact을 설정 false하십시오 (위 참조)

위 목록의 # 1은 node_modules디렉토리 를 제외 하거나 앱이있는 디렉토리를 명시 적으로 포함하여 달성 할 수 있습니다.

webpack.config.js:

let path = require('path');
....
module: {
     loaders: [
          ...
          loader: 'babel',
          exclude: path.resolve(__dirname, 'node_modules/')

... include: path.resolve(__dirname, 'app/')또는를 다시 사용하여 webpack.config.js.

위 목록의 # 2와 # 3 은이 답변에서 제안한 방법으로 또는 .babelrc파일 을 편집하여 (내 선호도) 달성 할 수 있습니다 . 예 :

$ cat .babelrc 
{
    "presets": ["es2015", "react"],
    "compact" : true
}

다음 설정으로 테스트했습니다.

$ npm ls --depth 0 | grep babel
├── babel-core@6.7.4
├── babel-loader@6.2.4
├── babel-preset-es2015@6.6.0
├── babel-preset-react@6.5.0

8

Ricardo Stuven의 방식으로 시도했지만 효과가 없었습니다. 결국에는 .babelrc 파일에 "compact": false를 추가했습니다.

{
    "compact": false,
    "presets": ["latest", "react", "stage-0"]
}

1
babel 6.5.x, webpack 2를 사용하여 같은 메시지가 있지만에 대해 lodash.js문제가 해결되었습니다.
phil_lgr

이것을 찾고
정보 제공자

고마워, 나는 똑같은 것을했다
Henkie85

4

read에 대한 자세한 설명 은 불필요한 공백 문자와 줄 종결자를 포함하지 않는 명령의 THIS LINK옵션입니다 . 몇 번 전에 임계 값이 되었지만 지금은 입니다.Babel compiler100KB500KB

개발 환경 에서이 코드를 .babelrc파일로 사용 하여이 옵션을 비활성화하는 것이 좋습니다 .

{
    "env": {
      "development" : {
        "compact": false
      }
    }
}

프로덕션 환경의 Babel경우 기본 구성 인을 사용하십시오 auto.


2

react / redux / webpack / babel 빌드에서 스크립트 태그 유형 text / babel을 제거하여이 오류를 수정했습니다.

오류가 발생했습니다 :

<script type="text/babel" src="/js/bundle.js"></script>

오류가 없습니다 :

<script src="/js/bundle.js"></script>

1

여러 모듈 규칙이있는 webpack 4에서는 .js 규칙에서 다음과 같이하면됩니다.

{
     test: /\.(js)$/,
     loader: 'babel-loader',
     options: {
          presets: ['es2015'],    // or whatever
          plugins: [require('babel-plugin-transform-class-properties')], // or whatever
          compact: true    // or false during development
     }
},

1

이것은 원래 OP 질문의 경우는 아니지만 기본 최대 크기를 초과하면 다른 문제의 증상 일 수 있습니다. 내 경우에는 경고가 있었지만 마침내 치명적인 오류가 발생했습니다. MarkCompactCollector : 반 공간 복사, 이전 세대 할당의 대체 실패-JavaScript 힙 메모리 부족. 그 이유는 현재 모듈을 동적으로 가져 오기 때문에 끝없는 루프로 끝났습니다 ...


저에게는 증상이었습니다. 수입품을 제거 / 추가하기 시작했습니다. 문제의 스크립트가 동적 require ( require('../../../' + a + '/' + b))를 사용하고있었습니다 . 그것을 제거하면 문제가 해결되었습니다 (반환되지 않습니다).
프랭크

이것이 왜 다운 보트인지 확실하지 않은데 이것은 정확히 내 문제였습니다. 감사합니다 shmuel!
Aron
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.