“ ตัวสร้างรหัสได้ทำให้รูปแบบของไฟล์ [บางไฟล์] ช้าลงเนื่องจากเกินขนาดสูงสุด” 100KB“” หมายความว่าอย่างไร


165

ฉันเพิ่มแพ็กเกจ npm ใหม่ให้กับโครงการของฉันและต้องการมันในหนึ่งในโมดูลของฉัน

ตอนนี้ฉันได้รับข้อความนี้จาก 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 ที่เป็นปัญหาคืออะไร
Juho Vepsäläinen

โจฮานตรวจสอบให้แน่ใจว่าได้รับคำตอบที่ได้รับการแก้ไขให้กับคุณแล้ว
Dana Woodman

คำตอบ:


151

สิ่งนี้เกี่ยวข้องกับcompactตัวเลือกของ Babel compiler ซึ่งคำสั่ง"ไม่รวมอักขระช่องว่างและฟุ่มเฟือยบรรทัดที่ไม่จำเป็นเมื่อตั้งค่าเป็น 'auto' คอมแพคจะถูกตั้งค่าเป็นจริงในขนาดอินพุต> 100KB" โดยค่าเริ่มต้นค่าของมันคือ "อัตโนมัติ" ดังนั้นนั่นอาจเป็นเหตุผลที่คุณได้รับข้อความเตือน โปรดดูเอกสารบาเบล

คุณสามารถเปลี่ยนตัวเลือกนี้จาก Webpack ใช้พารามิเตอร์การค้นหา ตัวอย่างเช่น:

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

17
และถ้าคุณมีโหลดเดอร์หลายตัวคุณสามารถใช้?compact=falseแทนqueryพารามิเตอร์ได้ ตัวอย่างเช่น:{test: /\.js$/, loaders: ['ng-annotate', 'babel?compact=false']}
kendsnyder

4
นอกจากนี้เรายังสามารถเพิ่มตัวเลือกในไฟล์. babelrc เพื่อทำให้ไฟล์ webpack.config.js สะอาดเหมือนเพิ่ม {"compact": true} ลงในไฟล์. babelrc
Ron

3
@Ricardo Stuven แต่ทำไมฉันจะเปลี่ยนเป็นเท็จ? ดูเหมือนว่าเป็นสิ่งที่ดีในการ "ไม่รวมตัวละครช่องว่างที่ฟุ่มเฟือยและสิ้นสุดบรรทัด"
omriman12

1
@Ben ดังนั้นโดยทั่วไปเราจะตั้งค่าเป็นเท็จเฉพาะเมื่อมีการพัฒนา?
omriman12

2
@ omriman12 ขึ้นอยู่กับว่าคุณจะใช้เอาต์พุตอย่างไร falseถ้ามันสร้างการผลิตซึ่งจะถูกลดขนาดลงแล้วมีค่าในการตั้งค่าพารามิเตอร์นี้ไม่มี สำหรับกรณีเช่นของฉันที่รูปแบบของผลลัพธ์เป็นสิ่งสำคัญที่มีค่า เช่นเดียวกับสิ่งส่วนใหญ่มันขึ้นอยู่กับ :)
Ben

48

นี้น่าจะเป็นข้อผิดพลาดของบาเบล ฉันเดาว่าคุณใช้ babel-loader และไม่รวมไลบรารี่ภายนอกจากการทดสอบโหลดเดอร์ของคุณ เท่าที่ฉันสามารถบอกได้ข้อความนั้นไม่เป็นอันตราย แต่คุณควรทำสิ่งนี้:

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

ได้ดู นั่นมัน


1
แปลกผมเห็นข้อความเดียวกัน (ยัง ramda) exclude: /node_modules/แม้ว่าฉันทำ
Roman Pominov

เส้นทางเดียวกันหรือไม่ บางทีห้องสมุดภายนอกของคุณตั้งอยู่ที่อื่น? ถ้าไม่คุณสามารถลองใช้โซลูชันของ Ricardo ได้เช่นกัน ปัญหานี้ไม่สำคัญมาก
mhelvens

ความผิดฉันเอง. ฉันตรวจสอบการกำหนดค่าผิด excludeที่เกิดขึ้นจริงอย่างใดอย่างหนึ่งไม่ได้มี
Roman Pominov

ฉันพบคำตอบนี้ดีกว่า ขอบคุณ @mhelvens
Mosia Thabo

22

ตัวเลือกข้อใดข้อหนึ่งจากสามข้อด้านล่างนี้จะกำจัดข้อความ (แต่ด้วยเหตุผลที่ต่างกันและด้วยผลข้างเคียงที่แตกต่างกันฉันว่า):

  1. ยกเว้นnode_modulesไดเรกทอรีหรืออย่างชัดเจนincludeไดเรกทอรีที่แอพของคุณอยู่ (ซึ่งสันนิษฐานว่าไม่มีไฟล์เกิน 100KB)
  2. ตั้งค่าตัวเลือกบาเบล compactเป็นtrue(จริง ๆ แล้วค่าอื่น ๆ นอกเหนือจาก "อัตโนมัติ")
  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 แต่ไม่ได้ผลสำหรับฉัน สิ่งที่ได้ผลในท้ายที่สุดคือการเพิ่ม "กะทัดรัด": false ไปยังไฟล์. babelrc ของฉัน:

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

1
ใช้ Babel 6.5.x, webpack 2 ฉันมีข้อความเดียวกัน แต่สำหรับlodash.jsและสิ่งนี้แก้ไขปัญหาได้
phil_lgr

มาหาสิ่งนี้ :)
ผู้แจ้งข้อมูล

ขอบคุณฉันมีสิ่งเดียวกันแน่นอน
Henkie85

4

สำหรับคำอธิบายเพิ่มเติมอ่านTHIS LINKมันเป็นตัวเลือกของBabel compilerคำสั่งที่จะไม่รวมถึงตัวอักษรช่องว่างที่ฟุ่มเฟือยและสิ้นสุดบรรทัด บางครั้งที่ผ่านมาเกณฑ์ของมันแต่ในขณะนี้คือ100KB500KB

ฉันแนะนำให้คุณปิดการใช้งานตัวเลือกนี้ในสภาพแวดล้อมการพัฒนาของคุณด้วยรหัสนี้ใน.babelrcไฟล์

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

สำหรับสภาพแวดล้อมการผลิตการใช้การตั้งค่าเริ่มต้นซึ่งเป็นBabelauto


2

In react / redux / webpack / babel build แก้ไขข้อผิดพลาดนี้โดยการลบ 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 ดั้งเดิม แต่: หากคุณเกินขนาดสูงสุดเริ่มต้นนี่อาจเป็นอาการของปัญหาอื่นที่คุณมี ในกรณีของฉันฉันมีสงคราม แต่ในที่สุดมันก็กลายเป็นข้อผิดพลาด FATAL: MarkCompactCollector: สำเนากึ่งพื้นที่การสำรองในการจัดสรร Gen เก่าล้มเหลว - JavaScript กองออกจากหน่วยความจำ เหตุผลก็คือฉันนำเข้าโมดูลปัจจุบันแบบไดนามิกดังนั้นจึงจบลงด้วยการวนซ้ำไม่รู้จบ ...


มันเป็นอาการสำหรับฉัน - ฉันเริ่มลบ / เพิ่มการนำเข้าของฉันเพื่อลองและติดตาม สคริปต์ที่ละเมิดใช้ความต้องการไดนามิก ( require('../../../' + a + '/' + b)) การลบการแก้ไขปัญหา (และจะไม่ส่งคืน)
แฟรงค์

ไม่แน่ใจว่าทำไมสิ่งนี้จึงถูกลงคะแนนนี่เป็นปัญหาของฉันอย่างแน่นอน ขอบคุณ shmuel!
Aron
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.