Tác vụ watch
Package grunt-contrib-watch
nó cung cấp tác vụ có tên là watch
, cho phép bạn giám sát các file bạn chỉ ra, mỗi khi nội dung file
đó thay đổi thì tác vụ này tự động chạy một vài tác vụ khác.
Để cài đặt package grunt-contrib-watch
cho thêm vào package.json
dòng:
"grunt-contrib-watch": "1.0.1"
{ "name": "my_project", "version": "0.1.0", "devDependencies": { "@babel/core": "^7.1.6", "@babel/preset-env": "^7.1.6", "grunt": "~0.4.5", "grunt-babel": "^8.0.0", "grunt-contrib-concat": "~1.0.1", "grunt-contrib-uglify": "~0.5.0", "grunt-contrib-jshint": "2.0.0", "grunt-contrib-clean": "2.0.0", "grunt-contrib-watch": "1.0.1" } }
Sau đó chạy lệnh để cài
npm install
Sử dụng watch
khai báo tác vụ cơ bản trong Gruntfile.js
như sau:
watch: { src: { files: ['các file giám sát'], tasks: ['tác vụ chạy'], }, },
File nào cần giám sát thì bạn chỉ ra trong mảng, ví dụ sẽ giám sát tất cả các file js
trong
thư mục src
thì là: files: ['src/*.js']
Khi thấy file giám sát thay đổi chạy tác vụ nào thì liệt kê ra trong mảng tasks, tác vụ là tên những tác
vụ khai báo trong grunt.initConfig
, ở ví dụ trước có các tác vụ như uglify
, concat:build
...
Đồng thời bạn cũng được phép chỉ ra tác vụ đăng ký bởi grunt.registerTask
ví dụ default
Áp dụng watch
Trở lại ví dụ trước
(Chạy nhiều tác vụ),
ở đó khi gõ lệnh grunt
sẽ chạy 5 tác vụ đã đăng ký default, để cuối cùng có file hello.min.js
.
Bây giờ ta sẽ áp dụng watch
, để mỗi khi file nguồn js thay thay đổi nó tự động thi hành 5 tác vụ trên.
Sửa lại Gruntfile.js
như sau:
module.exports = function(grunt) { grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), watch: { src: { files: ['src/*.js'], tasks: ['default'], }, }, uglify: { options: { banner: '/*! <%= grunt.template.today("yyyy-mm-dd") %> */\n' }, build: { files: { 'build/hello.min.js' : ['tmp/all_back.js'] } }, }, concat: { build: { files: { 'tmp/all.js' : ['src/hello.js', 'src/ab.js'] } } }, babel: { options: { presets: ['@babel/preset-env'] }, build: { files: { 'tmp/all_back.js': 'tmp/all.js' } } }, jshint: { options: { '-W015': true, "esversion": 6 }, build: { src: ['tmp/all.js'] }, }, clean: { build: { src: ['tmp/*'] }, } }); grunt.loadNpmTasks('grunt-babel'); grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-clean'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.registerTask('runwatch', [ 'watch' ]); grunt.registerTask('default', [ 'concat:build', 'jshint:build', 'babel:build', 'uglify:build', 'clean' ]); }
Trong đó ta đã sử dụng tác vụ watch
ở đoạn mã:
watch: { src: { files: ['src/*.js'], //Giám sát các file src/*.js tasks: ['default'], //Thi hành tác vụ 'default' }, },
Ta cũng đăng ký thêm task bởi grunt.registerTask
đặt tên là runwatch
, mục đích
là khi gõ lệnh grunt runwatch
sẽ chạy tác vụ watch
Giờ bắt đầu giám sát, hãy gõ lệnh:
grunt runwatch
Running "watch" task
Waiting...
Lập tức tác vụ watch
chạy, nó cứ chờ như vậy, mỗi khi bạn sửa đổi nội dung .js thì lập tức nó kích
hoạt chạy default
(tương đương 5 tác vụ), chạy xong lại quay lại chờ giám sát ...
Như vậy việc của bạn giờ là chỉ việc sửa mã nguồn js, biên dịch thông báo lỗi ... grunt là tự động làm cho bạn mỗi khi thay đổi code.
Tải code ví dụ dự án trên về bằng git
git clone git@github.com:xuanthulabnet/grunt-example.git cd grunt-example git checkout vd3 npm install