Знакомство с Грантом:
- Знакомство с Грантом
- Китайская домашняя страница:www.gruntjs.net/
- это передняя частьАвтоматизируйте сборкиинструмент, инструмент командной строки на основе nodeJs
- этобегун задачс его богатым и могущественнымплагин
- Общие функции:
- Объединить файлы(js/css)
- Сжатый файл(js/css)
- проверка грамматики(js)
- Предварительно скомпилированная обработка less/sass
- разное...
- Установите nodejs, проверьте версию
node -v - Создайте простое приложение grunt_test
|- build----------构建生成的文件所在的文件夹 |- src------------源码文件夹 |- js---------------js源文件夹 |- css--------------css源文件夹 |- index.html-----页面文件 |- Gruntfile.js---grunt配置文件(注意首字母大写) |- package.json---项目包配置文件 { "name": "grunt_test", "version": "1.0.0" } - Установить grunt-cli глобально
npm install -g grunt-cli - установить хрюканье
npm install grunt --save-dev - Запустите команду сборки проекта
grunt //提示 Warning: Task "default" not found - Файл конфигурации: Gruntfile.js
- Этот файл конфигурации, по сути, представляет собой модуль функционального типа узла.
- Настройка кодирования состоит из 3 шагов:
- Инициализировать конфигурацию плагина
- Загрузить задачу плагина
- Регистрация задач сборки
- Базовая кодировка:
module.exports = function(grunt){ // 1. 初始化插件配置 grunt.initConfig({ //主要编码处 }); // 2. 加载插件任务 // grunt.loadNpmTasks('grunt-contrib-concat'); // 3. 注册构建任务 grunt.registerTask('default', []); }; - Команда: grunt //быстрый успех, но безрезультатно (задача еще не определена с помощью плагина)
- Знакомство с плагином Grunt
- Страница со списком плагинов на официальном сайте gruntwww.gruntjs.net/plugins
- Категория плагина:
- Плагины, предоставленные командой grunt: имена большинства плагинов начинаются с contrib-
- Плагины, предоставленные третьими лицами: большинство из них не начинаются с вклада.
- Часто используемые плагины:
- grunt-contrib-clean — чистые файлы (сгенерированные упаковкой)
- grunt-contrib-concat — объединить код из нескольких файлов в один файл
- grunt-contrib-uglify — сжать файлы js
- grunt-contrib-jshint — проверка синтаксических ошибок javascript;
- grunt-contrib-cssmin — сжимать/объединять css-файлы
- grunt-contrib-htmlmin — сжать html файлы
- grunt-contrib-imagemin — сжимать файлы изображений (без потерь)
- grunt-contrib-copy — копировать файлы, папки
- grunt-contrib-requirejs- Объединить и сжать все файлы модулей js, управляемые requirejs.
- grunt-contrib-watch — отслеживать изменения файлов в режиме реального времени и вызывать соответствующие задачи для повторного выполнения
- Слияние js: используйте плагин concat
- Заказ:
npm install grunt-contrib-concat --save-dev - кодирование:
- src/js/test1.js
(function () { function add(num1, num2) { return num1 + num2; } console.log(add(10, 20)); })(); - src/js/test2.js
(function () { var arr = [2,3,4].map(function (item, index) { return item+1; }); console.log(arr); })();
- src/js/test1.js
- Конфигурация: Gruntfile.js
- Задачи конфигурации:
concat: { options: { //可选项配置 separator: ';' //使用;连接合并 }, build: { //此名称任意 src: ["src/js/*.js"], //合并哪些js文件 dest: "build/js/built.js" //输出的js文件 } } - Загрузите плагин:
grunt.loadNpmTasks('grunt-contrib-concat'); - Задание на регистрацию:
grunt.registerTask('default', ['concat']); - Заказ:
grunt //会在build下生成一个built.js
- Задачи конфигурации:
- Заказ:
- Сжать js: используйте плагин uglify
- скачать
npm install grunt-contrib-uglify --save-dev - Конфигурация: Gruntfile.js
- Задачи конфигурации:
pkg : grunt.file.readJSON('package.json'), uglify : { options: { //不是必须的 banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' + '<%= grunt.template.today("yyyy-mm-dd") %> */' }, build: { files: { 'build/js/built-<%=pkg.name%>-<%=pkg.version%>.min.js': ['build/js/built.js'] } } } - Загрузка задач:
grunt.loadNpmTasks('grunt-contrib-uglify'); - Задание на регистрацию:
grunt.registerTask('default', ['concat', 'uglify']); - Заказ:
grunt //会在build下生成一个压缩的js文件
- Задачи конфигурации:
- скачать
- проверка синтаксиса js: используйте плагин jshint
- Заказ:
npm install grunt-contrib-jshint --save-dev - Кодировка: .jshintrc
{ "curly": true, "eqeqeq": true, "eqnull": true, "expr" : true, "immed": true, "newcap": true, "noempty": true, "noarg": true, "regexp": true, "browser": true, "devel": true, "node": true, "boss": false, //不能使用未定义的变量 "undef": true, //语句后面必须有分号 "asi": false, //预定义不检查的全局变量 "predef": [ "define", "BMap", "angular", "BMAP_STATUS_SUCCESS"] } - Изменить src/js/test1.js
(function () { function add(num1, num2) { num1 = num1 + num3 return num1 + num2; } console.log(add(10, 20)); })(); - Конфигурация: Gruntfile.js
- Задачи конфигурации:
jshint : { options: { jshintrc : '.jshintrc' //指定配置文件 }, build : ['Gruntfile.js', 'src/js/*.js'] //指定检查的文件 } - Загрузка задач:
grunt.loadNpmTasks('grunt-contrib-jshint'); - Задание на регистрацию:
grunt.registerTask('default', ['concat', 'uglify', 'jshint']); - Заказ:
grunt //提示变量未定义和语句后未加分号 -->修改后重新编译
- Задачи конфигурации:
- Заказ:
- Используйте плагин cssmin.
- Установить:
npm install grunt-contrib-cssmin --save-dev - кодирование:
- test1.css
#box1 { width: 100px; height: 100px; background: red; } - test2.css
#box2 { width: 200px; height: 200px; background: blue; } - index.html
<link rel="stylesheet" href="build/css/output.min.css"> <div id="box1"></div> <div id="box2"></div>
- test1.css
- Конфигурация: Gruntfile.js
- Задачи конфигурации:
cssmin:{ options: { shorthandCompacting: false, roundingPrecision: -1 }, build: { files: { 'build/css/output.min.css': ['src/css/*.css'] } } } - Загрузка задач:
grunt.loadNpmTasks('grunt-contrib-cssmin'); - Задание на регистрацию:
grunt.registerTask('default', ['concat', 'uglify', 'jshint', 'cssmin']); - Заказ:
grunt //在build/css/下生成output.min.css
- Задачи конфигурации:
- Установить:
- Используйте плагин часов (чтобы действительно автоматизировать его)
-
Команда: npm install grunt-contrib-watch --save-dev
-
Конфигурация: Gruntfile.js
- Задачи конфигурации:
watch : { scripts : { files : ['src/js/*.js', 'src/css/*.css'], tasks : ['concat', 'jshint', 'uglify', 'cssmin'], options : {spawn : false} } } - Загрузка задач:
grunt.loadNpmTasks('grunt-contrib-watch'); - Задание на регистрацию:
grunt.registerTask('default', ['concat', 'uglify', 'jshint', 'watch']); 改进:grunt.registerTask('myWatch', ['default','watch']); - Заказ:
grunt //控制台提示watch已经开始监听, 修改保存后自动编译处理
- Задачи конфигурации:
-
Конфигурация файла Gruntfile.js
module.exports = function (grunt) {
// 1. 初始化插件配置。 Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
concat: {
options: {
separator: ';',
},
dist: {
src: ['src/js/*.js'],
dest: 'dist/js/build.js',
},
},
uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
build: {
files: {
'build/js/build.min.js': ['build/js/build.js']
}
}
},
jshint: {
options: {
jshintrc: '.jshintrc' //指定配置文件
},
build: ['build/js/build.min.js', 'src/js/*.js'] //指定检查的文件
},
cssmin: {
options: {
mergeIntoShorthands: false,
roundingPrecision: -1
},
build: {
files: {
'build/css/build.min.css': ['src/css/*.css']
}
}
},
watch: {
scripts: {
files: ['src/js/*.js', 'src/css/*.css'],
tasks: ['concat', 'uglify', 'jshint', 'cssmin'],
options: {
spawn: false, //变量更新。true全量更新。
},
},
},
});
// 2.加载插件任务。加载包含 "uglify" 任务的插件。
grunt.loadNpmTasks('grunt-contrib-concat');//合并
grunt.loadNpmTasks('grunt-contrib-uglify');//压缩
grunt.loadNpmTasks('grunt-contrib-jshint');//js检查
grunt.loadNpmTasks('grunt-contrib-cssmin');//压缩/合并css文件
grunt.loadNpmTasks('grunt-contrib-watch');//真正实现自动化
// 3.注册构建任务。默认被执行的任务列表。执行的任务是同步的(按顺序执行)
grunt.registerTask('default', ['concat', 'uglify', 'jshint', 'cssmin']);
grunt.registerTask('myWatch', ['default', 'watch'])
};