初探grunt.js

package.js

{
  "name": "ttd_v3",
  "version": "0.1.0",
  "author": "liujin",
  "devDependencies": {
    "connect-livereload": "^0.5.2",
    "grunt": "~0.4.2",
    "grunt-contrib-concat": "~0.3.0",
    "grunt-contrib-connect": "^0.7.1",
    "grunt-contrib-cssmin": "^0.11.0",
    "grunt-contrib-jshint": "~0.6.0",
    "grunt-contrib-sass": "~0.3.0",
    "grunt-contrib-uglify": "~0.3.2",
    "grunt-contrib-watch": "^0.6.1",
    "grunt-css": "~0.5.4",
    "grunt-sass": "0.6.1"
  }
}

gruntfile.js

module.exports = function(grunt) {
 
    // LiveReload的默认端口号,你也可以改成你想要的端口号
    var lrPort = 35729;
    // 使用connect-livereload模块,生成一个与LiveReload脚本
    // <script src="http://127.0.0.1:35729/livereload.js?snipver=1" type="text/javascript"></script>
    var lrSnippet = require(‘connect-livereload‘)({ port: lrPort });
    // 使用 middleware(中间件),就必须关闭 LiveReload 的浏览器插件
    var lrMiddleware = function(connect, options) {
        return [
            // 把脚本,注入到静态文件中
            lrSnippet,
            // 静态文件服务器的路径
            connect.static(options.base),
            // 启用目录浏览(相当于IIS中的目录浏览)
            connect.directory(options.base)
        ];
    };
 
    // 项目配置(任务配置)
    grunt.initConfig({
        // 读取我们的项目配置并存储到pkg属性中
        pkg: grunt.file.readJSON(‘package.json‘),
        // 通过connect任务,创建一个静态服务器
        connect: {
            options: {
                // 服务器端口号
                port: 8000,
                // 服务器地址(可以使用主机名localhost,也能使用IP)
                hostname: ‘localhost‘,
                // 物理路径(默认为. 即根目录) 注:使用‘.‘或‘..‘为路径的时,可能会返回403 Forbidden. 此时将该值改为相对路径 如:/grunt/reloard。
                base: ‘.‘
            },
            livereload: {
                options: {
                    // 通过LiveReload脚本,让页面重新加载。
                    middleware: lrMiddleware
                }
            }
        },
        // 通过watch任务,来监听文件是否有更改
        watch: {
            client: {
                // 我们不需要配置额外的任务,watch任务已经内建LiveReload浏览器刷新的代码片段。
                options: {
                    livereload: lrPort
                },
                // ‘**‘ 表示包含所有的子目录
                // ‘*‘ 表示包含所有的文件
                files: [‘html/*.html‘, ‘css/*.css‘, ‘js/*.js‘, ‘images/**/*‘]
            },
            sass: {
                files: [‘sass/*.{scss,sass}‘,‘sass/*.{scss,sass}‘],
                tasks: [‘sass:dist‘]
            }
        },
        concat : {
            webqq : {
                files : {
                     ‘dist/js/test.js‘ : [‘js/a.js‘,‘js/b.js‘]
                }
            }
         },
         uglify : { 
            options: {
                banner: ‘/** \n * <%= pkg.name %> \n * author:<%= pkg.author %> \n * update:<%= new Date() %> \n**/\n‘
            },
            webqq : {
                files : {
                     ‘dist/js/test.min.js‘ : [‘dist/js/test.js‘]
                }
            }
        },
        cssmin: {
            options: {
                    banner: ‘/** \n * <%= pkg.name %> \n * author:<%= pkg.author %> \n * update:<%= new Date() %> \n**/‘
            },
            cssmini: {
                files: {
                  ‘dist/css/test.min.css‘: [‘css/test.css‘]    // 压缩 test.css文件
                }
            }
        },
        sass: {
          dist: {
            files: {
              ‘dist/css/test.css‘: ‘sass/test.scss‘
            }
          }
        }

    }); // grunt.initConfig配置完毕
 
    // 监控html js css
    grunt.loadNpmTasks(‘grunt-contrib-connect‘);
    grunt.loadNpmTasks(‘grunt-contrib-watch‘);
    grunt.registerTask(‘live‘, [‘connect‘, ‘watch‘,‘concat‘,‘uglify‘]);

    //合并压缩js
    grunt.loadNpmTasks(‘grunt-contrib-concat‘);  //合并任务
    grunt.loadNpmTasks(‘grunt-contrib-uglify‘);  //js压缩
    grunt.registerTask(‘jsmini‘, [‘cssmin‘]);

    //压缩css
    grunt.loadNpmTasks(‘grunt-css‘);
    grunt.registerTask(‘cssmini‘, [‘cssmin‘]);

    //编译sass
    grunt.registerTask(‘sassmini‘, [‘sass:dist‘, ‘watch‘]);
    grunt.loadNpmTasks(‘grunt-sass‘);
    grunt.loadNpmTasks(‘grunt-contrib-watch‘);
};

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。