「コードジェネレーターが[一部のファイル]のスタイル設定を最適化解除したため、「100KB」の最大値を超えたのはなぜですか?


164

プロジェクトに新しいnpmパッケージを追加し、モジュールの1つにそれを必要としました。

今、私はこのメッセージをwebpackから受け取ります、

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パッケージは何ですか?
JuhoVepsäläinen2015

ヨハン、あなたのためにこれを解決した答えを受け入れるようにしてください
ダナ・ウッドマン

回答:


151

これはcompactBabelコンパイラーのオプションに関連しており、「余分な空白文字と行末記号を含めないようにコマンドします。「自動」に設定すると、コンパクトは、> 100KBの入力サイズでtrueに設定されます。デフォルトでは、その値は「auto」であるため、おそらく警告メッセージが表示されます。Babelのドキュメントを参照してください。

このオプションは、クエリパラメータを使用してWebpackから変更できます。例えば:

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

16
また、複数のローダーがある場合?compact=falseは、queryパラメーターの代わりに使用できます。例:{test: /\.js$/, loaders: ['ng-annotate', 'babel?compact=false']}
kendsnyder

4
また、.babelrcファイルにオプション{{compact ":true}を.babelrcファイルに追加するように、オプションを.babelrcファイルに追加して、webpack.config.jsファイルをクリーンにすることができます。
Ron

3
@Ricardo Stuvenですが、なぜfalseに変更するのですか?「余計な空白文字や行末
記号を

1
@Benでは、基本的に、開発時にのみfalseに設定しますか?
omriman12

2
@ omriman12出力をどのように使用するかによって異なります。縮小されるプロダクションビルドの場合、このパラメーターをに設定しても意味がありませんfalse。私のように、出力のフォーマットが重要な場合、それは価値があります。ほとんどの場合と同様に、状況によって異なります。:)
ベン

48

これはBabelエラーのようです。バベルローダーを使用していると思いますが、ローダーテストから外部ライブラリを除外していません。私の知る限り、メッセージは有害ではありませんが、次のようなことを行う必要があります。

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

見てください。それでしたか?


1
奇妙なことに、同じメッセージが表示されます(ラムダの場合も同様)exclude: /node_modules/
Roman Pominov、2015年

同じ道、また?多分あなたの外部ライブラリは他の場所にありますか?そうでない場合は、リカルドのソリューションを試すこともできます。この問題はそれほど重大ではありません。
mhelvens、2015年

私の悪い。間違った設定をチェックしていました。実際のものは持っていませんでしたexclude
Roman Pominov、2015年

私はこの答えをよりよく見つけました。ありがとう@mhelvens
Thabo

22

以下の3つのオプションのいずれかがメッセージを取り除きます(ただし、さまざまな理由により、さまざまな副作用があると思います)。

  1. node_modulesディレクトリを除外するかinclude、アプリが存在するディレクトリを明示的に除外します(おそらく100KBを超えるファイルは含まれていません)。
  2. 設定バベルオプションが compacttrue(「自動」以外の実際の任意の値)
  3. Babelオプションcompactfalse(上記参照)に設定します。

上記のリストの#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 2017年

これを探しに来た:)
情報提供者

おかげで、私はまったく同じことがありました
Henkie85

4

詳細な説明を読むために、余計な空白文字や行末記号を含めないTHIS LINKことは、Babel compilerそのコマンドのオプションです以前はそのしきい値でした100KBが、現在はしきい値です500KB

このコードを.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!
アロン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.