Điều gì làm cho Trình tạo mã đã phát hiện ra kiểu dáng của [một số tệp] khi nó vượt quá mức tối đa của 100KB.


164

Tôi đã thêm một gói npm mới vào dự án của mình và yêu cầu nó trong một trong các mô-đun của tôi.

Bây giờ tôi nhận được tin nhắn này từ 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".

Nó có nghĩa là gì? Tôi có cần phải thực hiện một số hành động?


Bạn có thể đặt cấu hình Webpack của bạn ở đâu đó không? Gói NPM trong câu hỏi là gì?
Juho Vepsäläinen

Johan, hãy chắc chắn chấp nhận câu trả lời đã giải quyết vấn đề này cho bạn
Dana Woodman

Câu trả lời:


151

Điều này có liên quan đến compacttùy chọn của trình biên dịch Babel, lệnh này "không bao gồm các ký tự khoảng trắng thừa và dấu kết thúc dòng. Khi được đặt thành 'auto' compact được đặt thành true trên kích thước đầu vào> 100KB." Theo mặc định, giá trị của nó là "tự động", vì vậy đó có thể là lý do bạn nhận được thông báo cảnh báo. Xem tài liệu Babel .

Bạn có thể thay đổi tùy chọn này từ Webpack bằng tham số truy vấn . Ví dụ:

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

16
Và nếu bạn có nhiều bộ tải, bạn có thể sử dụng ?compact=falsethay cho querytham số. Ví dụ:{test: /\.js$/, loaders: ['ng-annotate', 'babel?compact=false']}
kendsnyder

4
ngoài ra, chúng ta có thể thêm tùy chọn vào tệp .babelrc để làm cho tệp webpack.config.js sạch hơn, như thêm {"compact": true} vào tệp .babelrc.
Ron

3
@Ricardo Stuven nhưng tại sao tôi lại đổi nó thành false? có vẻ như là một điều tích cực để "không bao gồm các ký tự khoảng trắng thừa và dấu chấm dứt dòng"
omriman12

1
@Ben vậy về cơ bản chúng ta sẽ đặt thành false chỉ khi phát triển?
omriman12

2
@ omriman12 Nó phụ thuộc vào cách bạn sẽ sử dụng đầu ra. Nếu đó là bản dựng sản xuất sắp được thu nhỏ, thì không có giá trị nào trong việc đặt tham số này thành false. Đối với các trường hợp như của tôi, nơi định dạng của đầu ra là quan trọng, có giá trị. Giống như hầu hết mọi thứ, nó phụ thuộc. :)
Ben

48

Đây dường như là một lỗi Babel . Tôi đoán bạn sử dụng trình tải babel và không loại trừ các thư viện bên ngoài khỏi bài kiểm tra trình tải của bạn. Theo như tôi có thể nói, tin nhắn không có hại, nhưng bạn vẫn nên làm một cái gì đó như thế này:

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

Có một cái nhìn. Đó là nó?


1
Thật kỳ lạ, tôi thấy tin nhắn tương tự (cũng cho ramda), mặc dù tôi làm exclude: /node_modules/.
Roman Pominov

Cùng một con đường, cũng vậy? Có lẽ thư viện bên ngoài của bạn được đặt ở nơi khác? Nếu không, bạn cũng có thể thử giải pháp của Ricardo. Vấn đề này không quá quan trọng.
mrcvens

Lỗi của tôi. Tôi đã kiểm tra cấu hình sai. Người thực tế không có exclude.
Roman Pominov

Tôi tìm thấy câu trả lời này tốt hơn. Cảm ơn @mhelvens
Mosia Thabo

22

Một trong ba tùy chọn dưới đây sẽ loại bỏ thông báo (nhưng vì những lý do khác nhau và với các tác dụng phụ khác nhau tôi cho rằng):

  1. loại trừ node_modulesthư mục hoặc rõ ràng includelà thư mục nơi ứng dụng của bạn cư trú (có lẽ không chứa các tệp vượt quá 100KB)
  2. đặt tùy chọn Babel compact thành true(thực tế là bất kỳ giá trị nào ngoài "tự động")
  3. đặt tùy chọn Babel compactthành false(xem bên trên)

# 1 trong danh sách trên có thể đạt được bằng cách loại trừ node_modulesthư mục hoặc rõ ràng bao gồm cả thư mục nơi ứng dụng của bạn cư trú.

Ví dụ webpack.config.js:

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

... hoặc bằng cách sử dụng include: path.resolve(__dirname, 'app/')(một lần nữa trong webpack.config.js).

# 2 và # 3 trong danh sách trên có thể được thực hiện bằng phương pháp được đề xuất trong câu trả lời này hoặc (sở thích của tôi) bằng cách chỉnh sửa .babelrctệp. Ví dụ:

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

Đã thử nghiệm với các thiết lập sau:

$ 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

Tôi đã thử cách của Ricardo Stuven nhưng nó không hiệu quả với tôi. Điều cuối cùng đã làm việc là thêm "compact": false vào tệp .babelrc của tôi:

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

1
Sử dụng babel 6.5.x, webpack 2, tôi có cùng một thông điệp nhưng lodash.jsvà điều này đã khắc phục vấn đề.
phil_lgr

Đã tìm kiếm điều này :)
người cung cấp thông tin

Cảm ơn, tôi đã có điều tương tự chính xác
Henkie85

4

Để đọc giải thích thêm THIS LINK, tùy chọn của Babel compilercác lệnh đó là không bao gồm các ký tự khoảng trắng thừa và dấu kết thúc dòng. một số lần trước đây ngưỡng của nó là 100KBnhưng bây giờ là 500KB.

Tôi tin rằng bạn vô hiệu hóa tùy chọn này trong môi trường phát triển của bạn, với mã này trong .babelrctệp.

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

Đối với môi trường sản xuất, Babelsử dụng cấu hình mặc định auto.


2

Trong React / redux / webpack / babel build đã sửa lỗi này bằng cách xóa loại thẻ script text / babel

gặp lỗi:

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

không có lỗi:

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

1

trong webpack 4 với nhiều quy tắc mô-đun, bạn sẽ làm một cái gì đó như thế này trong quy tắc .js của bạn:

{
     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

Đây có thể không phải là trường hợp của câu hỏi OP ban đầu, nhưng: nếu bạn vượt quá kích thước tối đa mặc định, đây có thể là triệu chứng của một số vấn đề khác mà bạn gặp phải. trong trường hợp của tôi, tôi đã có cảnh báo, nhưng cuối cùng nó đã biến thành L ERI L FATI: MarkCompactCollector: sao chép bán không gian, dự phòng trong thế hệ cũ Phân bổ thất bại - JavaScript hết bộ nhớ. Lý do là tôi đã tự động nhập mô-đun hiện tại , vì vậy điều này đã kết thúc với một vòng lặp vô tận ...


Đó là một triệu chứng đối với tôi - Tôi bắt đầu xóa / thêm các mục nhập của mình để thử và theo dõi nó. Kịch bản vi phạm đã sử dụng một yêu cầu động ( require('../../../' + a + '/' + b)). Loại bỏ nó đã giải quyết vấn đề (và nó sẽ không bao giờ trở lại).
Frank

Không chắc chắn tại sao điều này bị hạ cấp, đây chính xác là vấn đề của tôi. Cảm ơn shmuel!
Aron
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.