Chủ Nhật, 15 tháng 4, 2018

Lưu ý khi sử dụng arrow function trong JavaScript
Nếu bạn nào đã biết về ES6 thì có lẽ arrow function là một cái gì đó rất quen thuộc. Nó giúp code của ta trở nên ngắn gọn, sáng sủa hơn. Nhưng ngoài sự khác nhau về cú pháp so với function truyền thống thì nó cũng có một số điểm khác biệt bạn cần biết để control code mình được tốt hơn.
Lưu ý khi sử dụng arrow function trong JavaScript
Lưu ý khi sử dụng arrow function trong JavaScript
Điều khác biệt bạn cần lưu ý là con trỏ this trong arrow function hoàn toàn khác so với function truyền thống.

Như các bạn thấy thì 2 kết quả log hoàn toàn khác nhau: 1 cho đúng như ta dự đoán cái còn lại (arrow function) thì lại cho ra sản phầm là 2 cái undefined và cho dù bạn có sử dụng call, apply hay bind thì cũng không thể nào thay đổi được giá trị this trong arrow function.

Thứ Năm, 4 tháng 5, 2017

Tìm hiểu về nodemon và webpack cơ bản
1. Vấn đề 1: Nodemon là gì?
Ở bài trước giới thiệu về Babel chúng ta đã cùng nhau dựng 1 con server NodeJS bằng express rồi đúng không bực nỗi là mỗi lần bạn thay đồi code ở IDE và lưu lại thì khi ra trình duyệt F5 mỏi tay vẫn thấy nó trơ trơ cái mặt không thay đổi tý nào đúng không nào? Cách giải quyết là chúng lại phải F5 hẳn con server đó bằng cách Ctrl + C 2 lần ở cmd mà con server đó đang chạy. Việc này rất mất time phải không nào. Chính vì lý do đó chúng ta cần một module nữa giúp chúng ta làm công việc "refresh" lại server nhanh hơn, mạnh hơn. Ok đó chính là module nodemon mình muốn giới thiệu cho các bạn ngày hôm nay.

Các bạn đã hiểu công dụng của nodemon rồi chứ. Giờ chúng ta bắt đầu install thông qua npm bằng câu lệnh npm i -g nodemon ( các bạn chú ý là mình để nó -g có nghĩa là global nhé ). Ok giờ chúng ta option một chút trong file package.json một chút để nhét nodemon vào npm start khi khởi chạy project. Đây là nội dung chúng ta cần chỉnh sửa.


Ok. Giờ bạn start con server bằng npm start như bình thường nhé.

2. Vấn đề 2: Cái gì là webpack.
Ngày nay các website đang theo hướng web app với những đặc tính như:

  • Sử dụng JS ngày càng nhiều khi mà sức mạnh của nó cả bên server lẫn client là không phải bàn cãi.
  • Những browser ngày càng hỗ trợ những công nghệ mới khi mà tốc độ phát triển của công nghệ là nhanh chóng mặt.
  • Những tran full-page-reload ít đi thay vào đó là những trang SPA ( single page app ) được sử dụng ngày càng nhiều.

Chính vì những xu hướng trên đã tạo tiền đề cho một công cụ quản lí file một cách hiệu quả. Một trong số đó chính là Webpack - một công cụ rất mạnh để làm việc đó, mặc dù nó là một module bundler rất mới nhưng đã thực sự gây sốt gần đây. Ok giờ chúng ta đi tìm hiều về việc sử dụng nó ra sao nhé.

Để bắt đầu, chúng ta sẽ cài webpack bằng lệnh sau:
npm install webpack -g
Sau đó, tạo ra 2 file: index.html và app.js
app.js:
document.write('welcome to my app');
console.log('app loaded');
index.html
<html>
  <body>
    <script src="bundle.js"></script>
  </body>
</html>
Trong terminal, chúng ta chạy lệnh sau:
webpack ./app.js bundle.js
Lệnh trên webpack sẽ đọc vào file app.js và xuất ra file bundle.js cho chúng ta. Khá dễ dàng phải ko ?

Config

Config file trong webpack là nơi chưa tất cả các thiết lập, loader, plugin và các thông số khác về build mà bạn muốn xây dựng. Bạn hãy tạo file webpack.config.js trong thư mục gốc và thêm những dòng lệnh sau:
module.exports = {
  entry: "./app.js",
  output: {
    filename: "bundle.js"
  }
}
entry - tên của file hoặc một mảng những file mà chúng ta muốn include. Trong ví dụ này, chúng ta dùng 1 file duy nhất là app.js.
output - là một object chứa những thiết lập output. Trong ví dụ này, chúng ta chỉ ra filename là bundle.js là file mà chúng ta muốn Webpack build ra.
Bây giờ chúng ta hãy quay trở lại Terminal và gõ lệnh sau:
webpack
Khi tồn tại file webpack.config.js, webpack sẽ build dựa vào file config đó, mà không cần chúng ta phải chỉ rõ ra file input và file output mỗi khi gõ lệnh như ví dụ trước đó.

Watchmode

Hẳn mỗi lần bạn sửa file, bạn không muốn lại phải vào Terminal và chạy lại webpack để build ra file kết quả bạn mong muốn. Watchmode sẽ giúp bạn theo dõi files, và khi chúng có bất kì thay đổi nào, nó sẽ ngay lập tức build và xuất ra file output.
Có 2 cách để chạy watchmode.
  1. Từ command line:
webpack --watch
  1. Vào trong file config, thêm một key là watch và đặt nó là true
module.exports = {
  entry: "./app.js",
  output: {
    filename: "bundle.js"
  },
  watch: true
}
Sau khi đặt watch thành true, mỗi khi bạn chạy webpack, nó sẽ tự động rebuild file bulde mỗi khi có thay đổi.

Webpack loader và preloader

Loader cho phép bạn tiền xử lí một file khi bạn require hoặc load nó. Loader co1 thể transform file từ nhiều ngôn ngữ khác nhau như CoffeeScript sang Javascript. Loader thậm chí còn cho phép bạn require css file ngay trong Javascript.
Sau đây, chúng ta sẽ cài đặt và sử dụng loader babel. Trước khi có thể dùng được, chúng ta cần phải cài một số npm module trước.
npm install babel-core babel-loader babel-preset-es2015 babel-preset-react webpack  --save-dev
  • babel-core là package babel của npm
  • babel-loader là loader của babel cho webpack
  • babel-preset-es2015 là babel preset cho tất cả plugin của ES2015
  • babel-preset-react giúp transform code JSX của React thành Js
  • --save-dev lưu tất cả các module thành development dependencies.
Bây giờ để cài dặt babel transform code ES6, chúng ta cần chỉnh sửa webpack.config.js một chút. Đầu tiên là thêm một key là module,trong đó thêm mảng loaders, mỗi phần tử của mảng là config cho một loader. Sau đây chúng ta sẽ config cho babel-loader.
module.exports = {
 entry: "./app.js",
 output: {
   filename: "bundle.js"
 },
 module: {
   loaders: [
     {
       test: /\.js$/,
       exclude: /node_modules/,
       loader: 'babel-loader',
       query: {
         presets: ['react', 'es2015']
       }
     }
   ]
 },
 resolve: {
   extensions: ['', '.js']
 },
}
Như các bạn có thể thấy ở trên, chúng ta thêm 3 key vào trong loader đầu tiên
  1. test - là một regular expression dùng để kiểm tra những file nào sẽ được chạy loader. Trong ví dụ này, tất cả những file có extension là .js sẽ được chạy babel-loader.
  2. exclude - những file mà loader sẽ loại bỏ (ignore). Chúng ta thêm node_modules vào đây.
  3. loader - tên của loader chúng ta dủng (babel-loader)
  4. query - Bạn có thể truyền options cho loader bằng cách viết chúng như những query string.
  5. cacheDirectory - mặt định false. Khi được đặt, thư mục được chọn sẽ được sử dụng để cache kết quả từ loader.
  6. presets chúng ta sẽ sử dụng react và es2015 đã được cài đặt
Chúng ta còn thêm key resolve dùng để chỉ ra những file nào có thể được xử lí mà không cần phải chỉ ra file extension. Giúp chúng ta có thể viết như này:
require('./logger');
thay vì
require('./logger.js');
Giờ dự án của bạn đã sẵn sàng để viết code ES6 và React, Webpack sẽ làm phần việc còn lại.
Hi vọng với bài hướng dẫn này các bạn sẽ có một bước khởi đầu tốt với công cụ rất mạnh như Webpack.
Tham khảo:
Nguồn: Viblo.asia

Thứ Tư, 3 tháng 5, 2017

Giới thiệu về Babel
Ở bài đầu tiên về series ES6 này mình xin giới thiệu về sơ lược về Babel. Theo như mình được biết thì nó là một công cụ giúp bạn transpiler code ES6 sang chuẩn ES5 ( và các chuẩn khác ) vì lý do ES6 đã ra đời từ năm 2015 nhưng vì nó vẫn chưa hoàn toàn được hỗ trợ trên tất cả trình duyệt nên chúng ta cần một cái gì đó để biên dịch code ES6 sang ES5 cho nó chuẩn không cần chỉnh =)). Tất cả chúng ta cần chính là Babel, các bạn có thể tham khảo thêm về nó tại Babeljs.io


Nội dung bài hôm này mình sẽ demo một ví dụ nho nhỏ về sử dụng Babel + express

Trước tiên các bạn cần cài nodejsnpm cho máy của mình nhé. Ok. Let's go!!!

1. Các bạn mở cmd và gõ lệnh npm init -y để tạo file package.json


2. Tiếp theo bạn tạo một thư mục server trong thư mục server bạn tiếp tục tạo file index.js và dựng 1 con server bằng express nhé. (  các bạn cần cài module express nhé )


3. Bạn chạy con server vừa dựng bằng dòng lệnh node server/index.js và sẽ gặp lỗi này.


Ok. Suốt từ đầu đến giờ mình chưa đụng chạm gì đến thằng babel đúng không nào? Giờ thì chính là lúc nó ra tay để xử lý cái lỗi này. Đơn giản vì import là key của ES6 do vậy chúng ta cần một thức transpiler nó về chuẩn ES5 => Babel chứ còn gì nữa. hehe.

Để sử dụng babel bạn cần:
Bước 1: Cài module babel-clibabel-preser-es2015.
Các bạn vào cmd gõ lệnh npm i --save-dev babel-cli babel-preset-es2015 
Bước 2: Tạo file .babelrc và thêm đoạn code

{
  "presets": ["es2015"]
}

Tiếp theo bạn thêm "start": "babel-node server/index.js" vào file package.json nhé.


Ok. cmd bạn vẫn bật chứ? Gõ dòng lệnh npm start đợi server khởi tạo rồi mở localhost:3000 lên xem bạn đã làm được gì nhé.
Bài tiếp theo mình sẽ cùng nhau tìm hiều về module nodemonwebpack nhưng chỉ là mức cơ bản đủ dùng thui nhé vì kiến thức mình có hạn ^^
Ok. Let's go!!!