Làm thế nào để có được đầu ra được thu nhỏ với Browserify?


90

Chỉ mới bắt đầu sử dụng Browserify , nhưng tôi không thể tìm thấy tài liệu về cách làm cho nó tràn ra đầu ra được rút gọn.

Vì vậy, tôi đang tìm một cái gì đó như:

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

9
Minification nằm ngoài phạm vi của Browserify, bạn sẽ cần chạy đầu ra của nó thông qua một trình thu nhỏ.
generalhenry

Câu trả lời:


126

Đưa nó qua uglifyjs:

 browserify main.js | uglifyjs > bundle.js

Bạn có thể cài đặt nó bằng npm như sau:

 npm install -g uglify-js

3
Làm cách nào để thực hiện điều này với tác vụ grunt Browserify / watchify?
Greg Ennis

1
Nếu bạn sử dụng grunt, tôi khuyên bạn nên thực hiện theo hai bước. Đầu tiên biên dịch với Browserify và sau đó thu nhỏ. Ưu điểm là bạn có thể có một bản dựng phát triển với bản đồ nguồn và một bản dựng sản xuất tách rời mọi thứ.
topek

Vâng, đó là những gì tôi đã làm. Thực tế của nó là 3 bước, bạn phải dọn dẹp tệp trung gian. Cảm ơn!
Greg Ennis,

8
và điều gì sẽ xảy ra nếu tôi muốn một bản đồ nguồn cho các tệp chưa được xác minh của mình - bản đồ đó sẽ trỏ đến mã trước khi "duyệt qua"?
Thomas Deutsch


21

Kể từ 3.38.x, bạn có thể sử dụng plugin minifyify của tôi để thu nhỏ gói của bạn và vẫn có các bản đồ nguồn có thể sử dụng. Điều này là không thể với các giải pháp khác - tốt nhất bạn có thể làm là ánh xạ trở lại gói không nén. Thu nhỏ bản đồ tất cả các cách quay trở lại các tệp nguồn riêng biệt của bạn (có, ngay cả với coffeescript!)


1
Nó cho biết nó hỗ trợ tới phiên bản Browserify 9. Browserify hiện đang ở phiên bản 11.0.1. Nó sẽ hỗ trợ điều này?
cchamberlain

uglifyify dường như được làm việc đối với tôi như một sự thay thế tốt
Brett Zamir

15

Hoặc sử dụng chuyển đổi uglifyify "mang lại cho bạn lợi ích khi áp dụng biến đổi" bóp "của Uglify trước khi được Browserify xử lý, nghĩa là bạn có thể xóa các đường dẫn mã chết đối với các yêu cầu có điều kiện."


Nó vẫn yêu cầu sử dụng đường ống uglify được hiển thị trong câu trả lời trên cùng. Họ nói như vậy ngay trong đầu tài liệu của họ.
carlin.scott

11

Sau khi dành vài giờ để tìm hiểu cách xây dựng các quy trình xây dựng mới, tôi nghĩ rằng những người khác có thể hưởng lợi từ những gì tôi đã làm. Tôi đang trả lời câu hỏi cũ này vì nó xuất hiện cao trên Google.

Trường hợp sử dụng của tôi có liên quan nhiều hơn một chút so với OP yêu cầu. Tôi có ba kịch bản xây dựng: phát triển, thử nghiệm, sản xuất. Vì hầu hết các nhà phát triển chuyên nghiệp sẽ có các yêu cầu giống nhau, tôi nghĩ rằng có thể vượt ra ngoài phạm vi của câu hỏi ban đầu.

Trong quá trình phát triển , tôi sử dụng watchify để tạo một gói không nén với bản đồ nguồn bất cứ khi nào tệp JavaScript thay đổi. Tôi không muốn bước xấu xí vì tôi muốn quá trình xây dựng hoàn thành trước khi tôi gắn thẻ thay thế vào trình duyệt để nhấn làm mới và dù sao thì nó cũng không mang lại lợi ích gì trong quá trình phát triển. Để đạt được điều này, tôi sử dụng:

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

Để thử nghiệm , tôi muốn mã chính xác giống như sản xuất (ví dụ: chưa được xác minh) nhưng tôi cũng muốn có một bản đồ nguồn. Tôi đạt được điều này với:

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

Đối với sản xuất , mã được nén bằng uglify và không có bản đồ nguồn.

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

Ghi chú:

Tôi đã sử dụng các hướng dẫn này trên Windows 7, MacOS High Sierra và Ubuntu 16.04.

Tôi đã ngừng sử dụng minifyify vì nó không còn được duy trì.

Có thể có những cách tốt hơn những gì tôi đang chia sẻ. Tôi đã đọc, rõ ràng là có thể có được khả năng nén vượt trội bằng cách xác định tất cả các tệp nguồn trước khi kết hợp với Browserify. Nếu bạn có nhiều thời gian để dành cho nó hơn tôi có, bạn có thể muốn điều tra điều đó.

Nếu bạn chưa cài đặt watchify, uglify-js hoặc Browserify, hãy cài đặt chúng bằng npm do đó:

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

Nếu bạn đã cài đặt các phiên bản cũ, tôi khuyên bạn nên nâng cấp. Đặc biệt uglify-js khi họ thực hiện một thay đổi đột ngột đối với các đối số dòng lệnh, làm mất hiệu lực nhiều thông tin xuất hiện trong Google.


4

Không cần phải sử dụng các plugin nữa để thu nhỏ trong khi duy trì bản đồ nguồn:

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

1

Tôi thích terser có hỗ trợ cho ES6 + và một số tính năng nén tốt.

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

Cài đặt Globallly:

 npm i -g terser
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.