一、准备工作
二、安装依赖
yarn global add grunt-cli
yarn add grunt --dev
yarn add grunt-sass sass -dev
yarn add grunt-babel @babel/core @babel/preset-env --dev
yarn add load-grunt-tasks --dev
yarn add grunt-contrib-watch --dev
yarn add grunt-contrib-clean --dev
yarn add browser-sync --dev
yarn add grunt-web-swig --dev
三、编写gruntfile.js
const sass = require('sass')
const loadGruntTaskes = require('load-grunt-tasks')
const browserSync = require('browser-sync')
const bs = browserSync.create()
module.exports = grunt => {
grunt.initConfig({ // 多任务
// 编译scss grunt-sass sass
sass: {
options: {
sourceMap: true,
implementation: sass // 指定sass模块编译 sass
},
dist: {
files: [
{
expand: true,
cwd: 'src/',
src: '**/*.scss',
dest: 'dist/',
ext: '.css'
}
]
}
// 这种不能使用通配符
// main: {
// files: {
// 'dist/assets/styles/main.css': 'src/assets/styles/main.scss' // key 是输出目录,值是输入目录
// }
// }
},
// 编译js
babel: { // grunt-babel @babel/core @babel/preset-env
options: {
sourceMap: true,
presets: [ '@babel/preset-env' ] // 最新标准
},
dist: {
files: {
// {
// expand: true,
// cmd: 'src/',
// src: ['**/*.js', '!node_modules/**/*.js'],
// dest: 'dist/',
// ext: '.js'
// }
// 这种不能使用通配符
'dist/assets/scripts/app.js': 'src/assets/scripts/*.js'
}
}
},
web_swig: {
options: {
swigOptions: {
//缓存设置为false
cache: false
},
getData: function (tpl) {
return { myGruntTitle: 'hello,grunt-swig' };
}
},
main: {
expand: true,
cwd: 'src/',
src: "**/*.html",
dest: "dist/"
},
},
watch: {
js: {
files: ['src/assets/scripts/*.js'],
tasks: ['babel']
},
css: {
files: ['src/assets/styles/*.scss'],
tasks: ['sass']
},
html: {
files: ['src/*.html'],
tasks: ['swig']
}
},
clean: {
files: 'dist/*'
}
})
loadGruntTaskes(grunt)
grunt.registerTask('default', [ 'sass', 'babel', 'watch' ])
grunt.registerTask('serve', 'miaoshu', function () {
bs.init({
notify: false,
port: 2080, // 端口
open: true, // 启动服务器就打开浏览器
server: {
baseDir: [ 'dist', 'src', 'public' ], // 依次按照目录顺序查找文件
routes: {
'/node_modules': 'node_modules'
}
}
})
})
grunt.registerTask('compile', [ 'clean', 'sass', 'babel', 'swig' ])
grunt.registerTask('develop', ['compile', 'watch', 'serve'])
}
四、配置package.json的scripts
"scripts": {
"clean": "grunt clean",
"compile": "grunt compile",
"develop": "grunt develop"
},