Webpack series – giới thiệu từ cơ bản đến căng cơ

Với xu hướng lập trình mà business và phần lớn xử lý đều nằm ở tầng phía front-end với gánh nặng càng ngày càng đè lên vai chàng dũng sĩ javascript tội nghiệp, thì các công cụ hỗ trợ cho anh ấy (ahihi) như typing, task runner, test tools,… tè le tà la hết, nói chung là không thể thiếu được với 1 front-end dev. Hôm nay mình muốn giới thiệu Webpack một module loader cho javascript một cách cơ bản nhất.

Webpack hiện đang là module loader được sử dụng rộng rãi nhất hiện nay với cộng động support to lớn và những chức năng vô cùng mạnh mẽ. Phiên bản hiện tại là v2.3.3.

webpackwebpack với 26k stars

Vậy Module loader là gì?

  • Một cách đơn giản là ngày xưa chúng ta thường add những thư viện (3th parties) như jquery, moment, select2, dtpicker,sticky,... vào thẻ scriptđể khi web load lên xong thì những thư viện này sẽ được execute và xử lý. Nhưng không còn như những ngày xưa chỉ vài dòng jquery là đủ dùng, sau này do việc code dưới front-end càng ngày càng phìng to nên việc quản lý code = javascript càng ngày càng tõ rõ sự quan trọng nên từ đó khái niệm module loaderra đời.
  • Có khá nhiều thư viện từ nhỏ đến to ra đời cho việc này: Tiny Loaders (curl, LABjs, almond), RequireJS, Browserify, SystemJs, Webpack và gần đây đang nổi lên là RollupJs (mình chưa xài thằng này nhưng nghe nói Facebook sử dụng thg này cho React :D).
  • Nếu bạn nào có xài SystemJsBrowserify rồi thì thấy thật ra Webpack ra đời từ thừa hưởng những thành quả và kinh nghiệm từ những thư viện đó và phát triển lền một tầm mới tốt hơn cho công việc quản lý module.

Có ai đọc tới đây mà chưa thấy hiểu gì không? Hoặc chưa tiếp xúc với khái niệm module loadertrong javascript bao giờ, thì xem qua ví dụ này sẽ chắc dễ hiểu hơn.

Ví dụ cơ bản

Chúng ta sẽ có 2 file .js

Thì đây import xinchao from './xinchao' chính là chỗ mà Webpack sẽ làm việc cho chúng ta.

IMPORT VÀ EXPORT HIỆN TẠI CHƯA ĐƯỢC SUPPORT CHO ĐA PHẦN CÁC BROWSER. VÀ KHI BẠN VIẾT NHƯ THẾ NÀY THÌ BROWSER CŨNG ẾU HIỂU BẠN ĐANG MUỐN LÀM CÁI GÌ? VÀ ĐÓ LÀ LÚC CÁC MODULE LOADER XUẤT HIỆN.

Hỗ trợ import export của các trình duyệt

Với 2 file .js ở trên chúng ta sẽ dùng Webpack để bundle và xem kết quả như thế nào nhé?

Tạo file webpack.config.js để config cho Webpack.

– entry: là file mà chúng ta sẽ bắt đầu chạy bằng webpack. Nói chung nó là bắt nguồn của chiến tranh. Nó import từ thằng khác rồi thằng khác import từ thằng khác khác nữa từ đó sẽ kéo theo một chuỗi có hệ thống việc load các js module. Ở đây là file index.js ở trên.

– output-filename: là đầu ra của file sau khi webpack làm việc xong.

Cuối cùng một file html đơn giản để chạy script này.

Yêu cầu các bạn đã cài Nodejs và Npm rồi nhé. https://nodejs.org/en/

  1. mkdir wp-demo && cd wp-demo. Tạo 1 folder để chứa src.
  2. npm init -y. Tạo 1 file node package . -y là yes cm nó hết các bước version, decription,…
  3. npm install --save-dev webpack. Install Webpack.

Sau khi cài xongcai xong

Cấu trúc thư mụcthu muc

4.Gõ webpack để run.sau khi chay

Chúng ta sẽ thấy file bundle.js được tạo ra và sau khi chạy file index.html sẽ xuất ra dòng log xin chao Dinh.

Ok.Chúng ta cùng xem trong file bundle.js có gì và webpack đã làm gì nhé.

  • Khá loằng nhoằng nhưng chúng ta có thể hiểu webpack đang làm cái gì. Như ta thấy Module /* 0 */ là file xinchao.js và module /* 1 */ chính file index.js.
  • Đoạn này có thể thấy webpack gọi function trong module xinchao và call nó ở index.js.
  • Những function mặc định trên của webpack như ta thấy dùng để như:
    1. require module
    2. tạo module
    3. cache module
    4. execute module
    5. check export type (default hoặc chỉ định)
    6. … các bạn có thể debug ở browser để xem nó chạy

Đây là nơi start của webpack. Nó bắt đầu require từ module số 1 (nghĩa là file index.js). Tada đơn giản và dễ hiểu phải không nào.

Giờ chúng ta sẽ chạy webpack -p để build file trên mode production nhé. Và đây là file bundle.js của chúng ta.

prod mode

Nguyên bài này là những phần hết sức căn bản trong việc sử dụng Webpack – module loader được sử dụng rỗng rãi nhất hiện nay.

Các bài kế tiếp mình sẽ giới thiệu tiếp về các phần nâng cao hơn của Webpack như:

  • Code Splitting
  • Code Splitting – CSS
  • Code Splitting – Libraries
  • Code Splitting – Async

Hy vọng bài này có ích cho các bạn. Hẹn gặp lại vào các bài sao nhé ^^.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s