Grunt: 拼接代码,js丑化(压缩),css压缩,html压缩,观察文件,拷贝文件,删除文件,压缩文件

时间:2023-02-25 13:54:57

准备工作

grunt 基于nodeJs所以 nodeJs需要的基础配置都需要安装

1.Grunt 安装

npm install -g grunt-cli 这是全局安装

2.在当前文件下npm init

配置package.json文件

3.安装了grunt,这个只是一个框架,里面会用很多插件,具体可以去官网查看,这里记录了8种简单的用法。

3.1 把指定的文件全部拼接变为一个文件,插件名称:grunt-contrib-concat。
3.2 把js丑化也就是压缩,函数名称普遍变成a,b,c,d,e,f等一般情况是无法再看懂的。 插件名称 grunt-contrib-uglify。
3.3 css压缩,把css统一压缩在一行。插件名称 grunt-contrib-cssmin。
3.4 html压缩,同上和css差不多。插件名称 grunt-contrib-htmlmin。
3.5 观察指定的文件,当这个文件内部发生变化的时候,执行某些操作。插件名称 grunt-contrib-watch。
3.6 拷贝文件,把一个指定文件拷贝指定的位置。插件名称 grunt-contrib-copy。
3.7 删除一个指定文件。插件名称 grunt-contrib-clean。
3.8 压缩文件,指定的文件压缩。相当于右键压缩插件名称 grunt-contrib-compress。

这些都是nodeJs包。

安装之前需要安装 grunt ,安装: npm install grunt --save ,如果全局安装过了 就不需要安装

安装某个插件: npm install (某个插件名称) --save 来进行安装,需要哪些安装哪些,此处安装上面说到的8个插件。

安装完成之后,准备工作就差不多了。接下来需要进行配置

4.配置文件,配置文件名称为:Gruntfile.js 。

5.在这个 Gruntfile.js 文件里面进行配置,需要在module.exports = function(grunt){在这个函数里面进行配置,总体分三步}。

第一步 导入也就是加载插件  grunt.loadNpmTasks('grunt-contrib-concat');

第二步 进行配置任务,需要在grunt.initConfig({这个里面来进行配置}),配置内容根据需求,配置不同

第三步 指定任务调取代码 grunt.registerTask('指定调取命令', ["配置名称"]);  可以单独执行一个任务,也可以组合执行任务 grunt.registerTask('指定调取命令', ["配置名称","配置名称","配置名称"]);

至此配置完成。

6.调取: grunt 指定调取命令

Gruntfile.js 文件中具体代码如下:这里进行了一次性配置这个八个插件

module.exports = function (grunt) {Grunt: 拼接代码,js丑化(压缩),css压缩,html压缩,观察文件,拷贝文件,删除文件,压缩文件
    // 使用的插件导入进来加载插件
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-clean');
    grunt.loadNpmTasks('grunt-contrib-copy');
    grunt.loadNpmTasks('grunt-contrib-cssmin');
    grunt.loadNpmTasks('grunt-contrib-htmlmin');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-compress');
    // 配置任务
    grunt.initConfig({
        // 读取package.json的内容,下面用到时候可以进行调用
        pkg: grunt.file.readJSON('package.json'),

// 连接文件 concat配置名称
        concat: {
            // 连接文件的选项
            options: {
                // 分割符会插入到每一个文件和下一个文件之间,自定义
                separator: "/*<===========>*/"
                // 一般会插入到拼接后文件的起始位置,类似于一个标题,这个符号可以书写变量<%=变量%>,也可以直接写字符串。自定义
                banner: '/*!<%=pkg.description%> - - <%=grunt.template.today("yyyy-mm-dd")%> */'
            },
            // 列出
            dist: {
                // 要连接的文件,是个数组根据自己的文件位置以及文件来进行书写
                src: [
                    "js/jquery.js",
                    "js/jquery.fullscreen.js",
                    "js/FullScreen.js",
                    "js/SecondManager.js"
                ],
                // 连接后生成的文件,文件名称自定义。
                dest: 'game.js'
            }
        },

// 压缩js
        uglify: {
            options: {
                banner: '/*这里可以自己定义文字 也可以穿参数*/'
            },
            game: {
                files: {
                    // 压缩后产生的文件以及位置(文件地址名称自定义) : 待压缩文件,可以多个
                    "dist/game.js": ["game.js"]
                }
            }
        },

// 监视文件
        watch: {
            // 一个具体的监视
            game: {
                // 要监视的文件 当下面的文件中内容发生改变时候调用tasks里面的任务,一个*表示这个文件不包括文件夹的所有文件,两个**表示全部文件
                files: ['js/*.js', "Gruntfile.js"],
                // 当文件发生变化的时候要执行的任务
                tasks: [
                    'concat',
                    'uglify'
                ]
            }
        },

// 压缩css
        cssmin: {
            index: {
                // 压缩文件
                files: {
                    // 压缩后生成文件以及地址 (自定义):等待压缩文件,数组类型,可书写多个
                    'dist/index.css': ["index.css"]
                }
            }
        },

// 压缩html
        htmlmin: {
            options: {
                // 是否清楚注释
                removeComments: true,
                // 是否清楚空白行
                collapseWhitespace: true
            },
            index: {
                files: {

// 压缩后生成文件以及地址 (自定义):等待压缩文件,数组类型,可书写多个
                    'dist/index.html': "index.html"
                }
            }
        },

// copy
        copy: {
            dist: {
                // 要复制的文件列表
                files: [
                    {
                        // 扩展,扩展了什么也不是很清楚
                        expand: true,
                        // 要拷贝的文件地址 一个*表示当前文件下直属的 内部若还有文件不进行拷贝,两个**表示全部拷贝
                        src: ["images/*", "mp3/**"],
                        // 要拷贝到的地址
                        dest: "dist/",
                        // 过滤对拷贝内容进行筛选
                        filter: "isFile"
                    },
                ]
            }
        },

// 删除文件
        clean: {
            // 先去进行查找,指定文件夹下的指定文件
            dist: ["dist/", "Grunt.zip"],
            // 然后再进行删除
            clear: ["dist/", "Grunt.zip"]
        },

// 压缩文件 compress配置名称
        compress: {
            dist: {
                options: {
                    // 名称
                    archive: "Grunt.zip"
                },
                files: [

// expend扩展,扩展了什么也不是很清楚。

// 把dist/下的所有文件压缩,src 两个* 代表所有文件。
                    { expand: true, cwd: "dist/", src: ['**'] }
                ]
            }
        }

});

// 以上为配置,都是些简单配置,还有丰富配置,例如增加标题等等,这里没有书写。可以去查这些插件的文档可以搜索到。

// 指定任务
 // 可以组合任务 也可以单独执行一个

// 单独指定一个任务,("调取名称",["配置名称"]),根据需求可以自定指定

// 指定一个拼接任务

grunt.registerTask('cle', ["concat"]);

// 指定一个压缩任务
    grunt.registerTask('com', ["compress"]);

// 指定一个删除任务
    grunt.registerTask('cle', ["clean"]);

// 组合任务 ,("调取名称",["配置名称","配置名称","配置名称","配置名称"]) 中括号为数组,可以配置多个名称,当调用之后逐个执行。

grunt.registerTask('all', ["concat", "uglify", "cssmin", "htmlmin", "copy"]);

grunt.registerTask('build', ["concat", "uglify", "cssmin", "htmlmin"]);

// 多重组合 ("调取名称",["之前定义的调取名称","配置名称"])可以添加之前定义的调取名称,当到执行调用名称时候,进入之前定义的这个名称的任务进行执行,当执行完成之后,回到当前任务继续执行下去。

grunt.registerTask('default', ["build", "watch"]);  先去执行build这个任务,然后再执行watch监视任务。

grunt.registerTask('dist', ["clean", "build", "copy", "compress"]); 先执行删除任务,在执行build任务,然后拷贝,然后压缩。

// 根据需求组合可以多样组合

调用 :grunt 调取名称

例如 :grunt dist

grunt all 等等就可以进行你指定的操作

当你觉得一次配置8个插件,里面有些你不需要的 那个你就可以单独进行配置 配置你需要的 然后进行调取,总体步骤和上面一样,只是导入插件只需要你需求的插件,配置只需配置你需求的配置就可以了。例如:

module.exports = function (grunt) {
    // 使用的插件导入进来 加载插件
    grunt.loadNpmTasks('grunt-contrib-cssmin');
    // 配置任务
    grunt.initConfig({
        // 读取package.json的内容,这里调取就可有可无。
        pkg: grunt.file.readJSON('package.json'),
        // 压缩css
        cssmin: {
            index: {
                // 压缩文件
                files: {
                    // 压缩后生成文件以及地址 :等待压缩文件
                    'dist/index.css': ["index.css"]
                }
            }
        },
    });
    // 指定任务
    grunt.registerTask('css', ["cssmin"])
}

调用 :grunt 调取名称

grunt css 就可以压缩指定css

错误归类:

当出现错误时候,一般都会提示,根据提示可以查看进行修改,一般常见的一些错误如:

1.使用插件是否进行了下载安装,grunt在全局安装后,在当前文件可能未安装需要重新安装等。

2.package.json 依赖设置。

3.插件是否引入,引入是否正确。

4.配置任务关键词是否错误。

5.存储位置设置是否合理,命名是否冲突

6.是否指定任务,指定任务顺序是否合理。

当然还有一些其他的,根据错误提示来进行相应的更改。

以上是自己写的一些总结~有什么不足之处,还望补充,谢谢各位看官~~

Grunt: 拼接代码,js丑化(压缩),css压缩,html压缩,观察文件,拷贝文件,删除文件,压缩文件的更多相关文章

  1. 使用c&num;将多个文件放入文件夹中,并压缩下载

    ZipClass.cs  这个是一个压缩文件的类,可直接复制使用,使用到的命名空间是 using System.IO;using ICSharpCode.SharpZipLib;using ICSha ...

  2. grunt自定义任务——合并压缩css和js

    npm文档:www.npmjs.com grunt基础教程:http://www.gruntjs.net/docs/getting-started/ http://www.w3cplus.com/to ...

  3. gulp压缩css文件跟js文件

    越到最后啊 就越发现,真的很理解那句话 就是自己多学一点一点知识,就少一句问别人的东西 这是多么痛苦的领悟 今天需要压缩css跟js文件 然后不懂啊 就问别人啊 就问啊问啊 然后再上网了解啊了解啊 用 ...

  4. 前端自动化&lpar;三&rpar; 合并压缩css、压缩js、添加时间戳、打包上线操作

    前端自动化(三)   合并压缩css.压缩js.添加时间戳.打包上线操作 此文在前两篇基础上对比参考,会很方便理解 gulp.task("delete",function(){ r ...

  5. uglifyjs 合并压缩 js&comma; clean-css 合并压缩css

    本文主要介绍如何通过CLI命令行(也就是终端或者cmd打开的那个shell窗口)实现 js和 css 的合并压缩. uglifyjs 合并压缩 js: 1.安装node 这一步就不多说了,下载node ...

  6. 批量压缩 css js 文件 包含多个文件 自动识别

    注意事项  css 注释压缩不会造成影响      因为是块注释     当然也可以选择去注释压缩 js 带注释压缩  要注意注意 注意  //行注释会造成 压缩后的代码在一行 导致注释后的代码都失效 ...

  7. 【转载】Yui&period;Compressor高性能ASP&period;NET开发:自动压缩CSS、JS

    在开发中编写的js.css发布的时候,往往需要进行压缩,以减少文件大小,减轻服务器的负担.这就得每次发版本的时候,对js.js进行压缩,然后再发布.有没有什么办法,让代码到了服务器上边,它自己进行压缩 ...

  8. requireJS中如何用r&period;js对js进行合并和压缩css文件

    我运行的环境是windows+node.js,首先是用npm安装requirejs(全局安装,即使用 'npm install requirejs -g',这样方便在各个目录调用),接着就是下载r.j ...

  9. gulp压缩css和js

    压缩 css 代码可降低 css 文件大小,提高页面打开速度. 规律转换为 gulp 代码 找到 css/ 目录下的所有 css 文件,压缩它们,将压缩后的文件存放在 dist/css/ 目录下.一. ...

随机推荐

  1. Shell判断字符串包含关系的几种方法

    现在每次分析网站日志的时候都需要判断百度蜘蛛是不是真实的蜘蛛,nslookup之后需要判断结果中是否包含“baidu”字符串 以下给出一些shell中判断字符串包含的方法,来源程序员问答网站 stac ...

  2. 简例 一次执行多条mysql insert语句

    package com.demo.kafka;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Prep ...

  3. Tarjan算法---强联通分量

    1.基础知识 在有向图G,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的极大强连通子 ...

  4. 【C语言】C语言数据类型

    目录: [数据类型图] [基本数据类型]   · 整型   · 实型   · 字符型   · 布尔类型 1.数据类型图 2.基本数据类型 · 整型 用于准确表示整数,根据表示范围的不同分为三种:短整型 ...

  5. Unity手机平台播放影片

    播放视频方法 截止到目前的Unity4.2版本,要在手机平台上播放影片,有两种方法: 使用Unity自带的Move Texture http://docs.unity3d.com/Documentat ...

  6. WP8 调用特定API权限不足

    1.在解决方案中依次打开  Properties -> WMAppManifest.xml 2.点击功能 3.在左侧功能列表中勾选想要的功能权限.完毕

  7. 【Android学习】自定义Android样式checkbox

    下面简单介绍下在Androdi中如何更改Checkbox的背景图片,可以自定义样式 1.首先res/drawable中定义编写如下样式的XML,命名为:checkbox_style: <?xml ...

  8. linux中服务器定时程序设定

    服务器不重启的情况下定时自动重启apache及mysql服务,其实也大同小异.具体步骤如下:  一.每天的12点及16点重启apache及mysql服务 [root@www bin]# cd /opt ...

  9. 浅谈websocket和c&num; socket(新手篇)

    周末放假没带电脑所以今天分享质量不高,手机没有那些样式看起来可能没有那么方便,今天主要分享一下websocket. (赶紧拿小本本记下来) websocket 你发现是一个组合单词web socket ...

  10. jdk1&period;6的配置

    执行下列命令安装jdk1.7 /usr/lib/jvm$ sudo apt-get install openjdk-7-jdk openjdk-7-jre 会得到下面这两个文件: 查看当前jdk版本: ...