วิธีรับผลลัพธ์ที่ลดขนาดด้วย browserify


90

เพิ่งเริ่มใช้browserifyแต่ฉันไม่พบเอกสารเกี่ยวกับวิธีทำให้มันล้นออกมา

ดังนั้นฉันกำลังมองหาบางอย่างเช่น:

$> browserify main.js > bundle.js --minified

9
Minification อยู่นอกขอบเขตของ browserify คุณจะต้องเรียกใช้เอาต์พุตผ่าน minifier
generalhenry

คำตอบ:


126

บีบผ่าน uglifyjs:

 browserify main.js | uglifyjs > bundle.js

คุณสามารถติดตั้งโดยใช้ npm ดังนี้:

 npm install -g uglify-js

3
จะทำอย่างไรกับงาน browserify / watchify grunt?
Greg Ennis

1
หากคุณใช้คำรามฉันขอแนะนำให้ทำในสองขั้นตอน ก่อนอื่นให้คอมไพล์ด้วย browserify จากนั้นย่อขนาด ข้อดีคือคุณสามารถสร้างการพัฒนาพร้อมแผนที่ต้นทางและโครงสร้างการผลิตที่ดึงทุกอย่างออกไป
topek

ใช่นั่นคือสิ่งที่ฉันทำ จริงๆแล้ว 3 ขั้นตอนคุณต้องล้างไฟล์กลาง ขอบคุณ!
Greg Ennis

8
และถ้าฉันต้องการซอร์สแมปสำหรับไฟล์อัปเกรดของฉัน - นั่นจะชี้ไปที่โค้ดก่อน "browserification" ล่ะ
Thomas Deutsch


21

ตั้งแต่ 3.38.x คุณสามารถใช้ปลั๊กอินminifyifyของฉันเพื่อลดขนาดบันเดิลของคุณและยังมีซอร์สแมปที่ใช้งานได้ วิธีนี้ใช้ไม่ได้กับโซลูชันอื่นสิ่งที่ดีที่สุดที่คุณทำได้คือแมปกลับไปยังบันเดิลที่ไม่บีบอัด ลดขนาดแผนที่ให้เล็กลงจนสุดกลับไปยังไฟล์ต้นทางที่แยกจากกันของคุณ (ใช่แม้กระทั่งการเขียนกาแฟ!)


1
มันบอกว่ารองรับถึง browserify เวอร์ชัน 9 ขณะนี้ Browserify อยู่ที่ 11.0.1 จะรองรับสิ่งนี้หรือไม่?
cchamberlain

ดูเหมือนว่าuglifyifyจะทำงานแทนฉันได้ดี
Brett Zamir

15

หรือใช้การแปลงuglifyifyซึ่ง "ให้ประโยชน์แก่คุณในการใช้การแปลงแบบ" บีบ "ของ Uglify ก่อนที่จะประมวลผลโดย Browserify ซึ่งหมายความว่าคุณสามารถลบเส้นทางรหัสที่ตายแล้วสำหรับความต้องการตามเงื่อนไข"


ยังคงต้องใช้ท่อ uglify ที่แสดงในคำตอบด้านบน พวกเขาพูดอย่างนั้นในตอนต้นของเอกสาร
carlin.scott

11

หลังจากใช้เวลาไม่กี่ชั่วโมงในการตรวจสอบวิธีสร้างกระบวนการสร้างใหม่ฉันคิดว่าคนอื่นอาจได้รับประโยชน์จากสิ่งที่ฉันทำ ฉันกำลังตอบคำถามเก่านี้ซึ่งดูเหมือนจะเป็นที่นิยมใน Google

กรณีการใช้งานของฉันเกี่ยวข้องมากกว่าที่ OP ขอเล็กน้อย ฉันมีสถานการณ์การสร้างสามแบบ: การพัฒนาการทดสอบการผลิต เนื่องจากนักพัฒนามืออาชีพส่วนใหญ่จะมีข้อกำหนดเหมือนกันฉันคิดว่ามันเป็นเรื่องยากที่จะทำเกินขอบเขตของคำถามเดิม

ในการพัฒนาฉันใช้ watchify เพื่อสร้างบันเดิลที่ไม่มีการบีบอัดพร้อมแผนที่ต้นทางเมื่อใดก็ตามที่ไฟล์ JavaScript เปลี่ยนแปลง ฉันไม่ต้องการขั้นตอนอัปลักษณ์เนื่องจากฉันต้องการให้การสร้างเสร็จสิ้นก่อนที่ฉันจะแท็บ alt ไปที่เบราว์เซอร์เพื่อกดรีเฟรชและมันก็ไม่ได้ประโยชน์ใด ๆ ในระหว่างการพัฒนา เพื่อให้บรรลุสิ่งนี้ฉันใช้:

watchify app/index.js  --debug -o app/bundle.js -v

สำหรับการทดสอบฉันต้องการรหัสเดียวกับการผลิต (เช่นอัปลักษณ์) แต่ฉันต้องการแผนที่ต้นทางด้วย ฉันบรรลุสิ่งนี้ด้วย:

browserify app/index.js  -d | uglifyjs -cm -o app/bundle.js      --source-map "content=inline,filename='bundle.js',url='bundle.js.map'"

สำหรับการใช้งานจริงโค้ดจะถูกบีบอัดด้วย uglify และไม่มีแผนที่ต้นทาง

browserify app/index.js  | uglifyjs -cm > app/bundle.js

หมายเหตุ:

ฉันใช้คำแนะนำเหล่านี้กับ Windows 7, MacOS High Sierra และ Ubuntu 16.04

ฉันหยุดใช้ minifyify แล้วเพราะไม่มีการบำรุงรักษาอีกต่อไป

อาจมีวิธีที่ดีกว่าสิ่งที่ฉันแบ่งปัน ฉันได้อ่านแล้วเห็นได้ชัดว่าเป็นไปได้ที่จะได้รับการบีบอัดที่เหนือกว่าโดยการอัปลักษณ์ไฟล์ต้นฉบับทั้งหมดก่อนที่จะรวมกับ browserify หากคุณมีเวลาใช้จ่ายกับมันมากกว่าที่ฉันมีคุณอาจต้องการตรวจสอบสิ่งนั้น

หากคุณไม่ได้ติดตั้ง watchify, uglify-js หรือ browserify ให้ติดตั้งด้วย npm ดังนี้:

npm install -g browserify
npm install -g watchify
npm install -g uglify-js

หากคุณติดตั้งเวอร์ชันเก่าแล้วฉันขอแนะนำให้คุณอัปเกรด โดยเฉพาะอย่างยิ่ง uglify-js เมื่อพวกเขาทำการเปลี่ยนแปลงอย่างสิ้นเชิงกับอาร์กิวเมนต์บรรทัดคำสั่งซึ่งทำให้ข้อมูลจำนวนมากที่เกิดขึ้นใน Google ไม่ถูกต้อง


4

ไม่จำเป็นต้องใช้ปลั๊กอินอีกต่อไปเพื่อลดขนาดในขณะที่รักษาแผนที่ต้นทาง:

browserify main.js --debug | uglifyjs --in-source-map inline --source-map-inline > bundle.js

1

ฉันชอบterserที่รองรับ ES6 + และมีการรวบรวมที่ดีเช่นกัน

browserify main.js | terser --compress --mangle > bundle.js

ติดตั้งทั่วโลก:

 npm i -g terser
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.