前端项目部署之Grunt

如果你的前端项目很小或都者项目不需要通过专门的运维同学走流水线上线部署的话,那么可以略过以下的繁文。

ok,Let‘s go! 我们看看如何使用grunt来部署上线项目?

前端项目一般分为两种类型:The first,纯静态页面,都是html,类似WebApp(当然也有很多动态页面的WEBAPP); The second,包含一些动态页面,如jsp、php、 asp.net 或者是一些别的web服务语言。

由于第二种类型的前端的项目居多,那么我们先从第二种类型的项目上入手,使用grunt来操作项目的部署:

首先我们的目录假设为

有两个目录,一个src,用来放置我们源码,(使用GIT或SVN等版本管理器只需要维护src这个目录和项目根目录中的其它文件,如Gruntfile.js、package.json)。另外一个目录是release目录,用来存放针对src目录中的代码合并、压缩、添加指纹、发布的最终输出代码。(也就是线上代码)

Gruntfile任务操作

我们在这里先介绍最基本的任务:合并、JS混淆压缩、CSS压缩、清除、添加指纹、替换页面中的静态资源引用。

step 1:

安装grunt包和任务插件;

grunt包安装 : npm install grunt --save-dev

合并插件:npm install grunt-contrib-concat --save-dev

按照上面的插件的安装方式继续安装其它插件

JS混淆压缩 :grunt-contrib-uglify

CSS压缩:grunt-contrib-cssmin

清除:grunt-contrib-clean

   添加指纹:grunt-rev

   替换页面中的静态资源引用 :grunt-contrib-levin-usemin

 

   或者根据已有的package.json文件中的devDependencies依赖项进行一次安装

  npm install

step 2:

完成step1后,会在项目的根目录中生成一个node_modules的包,所有的插件还有grunt都在这个包下。

接下来我们完善Gruntfile.js文件中的任务

先定义一个配置变量,可在后续的任务中直接使用

config :{
                static_dest:‘release/main/webapp/static/union/‘
},

合并任务,将release/js/文件夹下的两个js文件合并为build.js

    concat:{
                lib:{
                    files:{
                        ‘<%= config.static_dest %>js/build.js‘:[
                            ‘<%= config.static_dest %>js/zepto.min.js‘,
                            ‘<%= config.static_dest %>js/slip-min.js‘
                        ]
                    }
                }
     },

混淆压缩任务,将release/js/文件夹下的所有js文件进行混淆压缩

     uglify:{
                options:{
                    banner:‘/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n‘
                },
                my_target:{
                    files:[
                        {
                            expand:true,
                            cwd:‘<%= config.static_dest %>js/‘,
                            src:‘*.js‘,
                            dest:‘<%= config.static_dest %>js/‘
                        }
                    ]
                }

      },

css压缩任务,将release/css/文件夹下的所有css文件进行压缩

     cssmin:{
                options:{
                    banner:‘/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n‘,
                    beautify:{
                        ascii_only:true
                    }
                },
                my_target:{
                    files:[{
                        expand:true,
                        cwd:‘<%= config.static_dest %>css/‘,
                        src:‘*.css‘,
                        dest:‘<%= config.static_dest %>css/‘
                    }]
                }
            },

消除任务,将release/js/文件夹下不合并之前的js文件清除

     clean:[
                "<%= config.static_dest %>js/zepto.min.js",
                "<%= config.static_dest %>js/slip-min.js"
     ],

添加指纹任务,将release/目录下的静态资源添加指纹(添加指纹是根据静态文件的内容生成md5其中的8位字符,所以同学们不用担心更新某一个静态文件,会导致别的静态文件的指纹发生变化

   rev: {
                options: {
                    encoding: ‘utf8‘,
                    algorithm: ‘md5‘,
                    length: 8
                },
                assets: {
                    files: [{
                        src: [
                            ‘<%= config.static_dest %>img/**/*.{jpg,jpeg,gif,png}‘,
                            ‘<%= config.static_dest %>css/*.css‘,
                            ‘<%= config.static_dest %>js/**/*.js‘
                        ]
                    }]
                }
            },

替换动态页面中的静态文件引用任务(针对静态资源引用的地址进行替换,如果有同学需要使用CDN前缀地址的话,那么大家可以使用我发布的一个grunt插件grunt-contrib-levin-usemin,这个插件大家可以用其它插件的安装方法去安装,与grunt-contrib-usemin插件不同的地方是我加了一个替换方法filePrefixer)

            usemin:{
                css:{
                    files:{
                        src:[‘<%= config.static_dest %>css/*.css‘]
                    }
                },
                js:[‘<%= config.static_dest %>js/**/*.js‘],
                html:[‘<%= config.views_dest %>**/*.jsp‘,‘<%= config.views_dest %>*.jsp‘],
                options:{                    //替换静态文件引地址前缀
                    filePrefixer:function(url){
                        if(!url){
                            return ‘‘;
                        }
                        return url.replace(‘../..‘,‘<%=request.getContextPath()%>‘);
                    },
                    patterns: {
                        js: [
                            [/(img\.png)/, ‘Replacing reference to image.png‘]
                        ]
                    }
                }
            }

声明一个发布的task

grunt.registerTask(‘release‘,[‘concat‘,‘uglify‘,‘clean‘,‘cssmin‘,‘rev‘,‘usemin‘]);

运维同学添加的编译脚本build.sh

#!/bin/bash

/bin/rm -rf release  &&mkdir release && cp -r src/* release/ &&\#执行grunt发布的release任务
grunt release

发布结果

通过运维的发布脚本会生成一个release目录(也就是我们上面指到的release目录)再执行grunt发布命令操作release目录下的静态资源

比较一下发布前

发布后的静态资源

动态页面中的静态资源引用发布前的

发布后的

时间: 2024-11-14 12:42:16

前端项目部署之Grunt的相关文章

基于sentry的前端错误监控日志系统(部署sentry服务器/前端项目部署)-让前端最快的定位到生产问题

背景 在这越来越发达的网络时代,web应用也是越来越复杂,尤其是前端的开发,也是越来越受重视. 所以在我们前端开发完成后,会有一些列的web应用的上线验证,如自测.QA测试.code review 等,以确保 应用能在生产上没有事故. 但是事以愿违,很多时候我们都会接受的客户的一些线上问题,这些问题有时候可能你是自己开发的原因本身存 在的问题,这样的问题一般能够在测试环境重现,我们很快的能定位到问题关键位置.但是,很多时候有一些问题, 我们在测试中并未发现,可是在线上却有部分人出现了,问题确确实

项目部署 nginx + uwsgi

1.项目部署的相关概念 关于部署流程,主要包含以下两个方面:部署方案.部署环境: 1.1部署方案 1. 分析项目的产品需求文档,定好部署方案的方向 2. 分析项目开发文档,按照功能边界,设计部署的结点 3. 分析项目功能软件,合理的取舍,选符合当前业务场景的 4. 梳理项目部署涉及到的部署软件实现方案,根据上面第2点确定的结点,确定初版部署方案 5. 根据项目实际情况,调整优化并确定项目部署方案 1.2部署环境 1.2.1个人开发环境: 工作人员:自己 工作平台:个人笔记本.公司配的电脑 平台特

使用jenkins进行前端项目自动部署

前面的话 后端的nodeJS项目可以使用pm2进行自动部署,由于前端项目打包后是静态资源,不需要进程守护.一般地,前端项目使用jenkins来进行自动部署,包括打包.测试等一系列流程.本文将详细介绍jenkins的使用 安装 Jenkins 是一款业界流行的开源持续集成工具,广泛用于项目开发,具有自动化构建.测试和部署等功能.由于 jenkins是基于java环境运行的,所以首先需要安装java环境 1.安装依赖包,使得add-apt-repository命令可以进行 apt-get insta

部署基于Gitlab+Docker+Rancher+Harbor的前端项目这一篇就够了

部署基于Gitlab+Docker+Rancher+Harbor的前端项目这一篇就够了 安大虎 ? momenta 中台开发工程师 6 人赞同了该文章 就目前的形势看,一家公司的运维体系不承载在 Docker+Harbor(或 Pouch 等同类平台)之上都不好意思说自己的互联网公司.当然这些技术也不适用于全部公司,技术在迭代,平台也一样,把我使用的工具和大家分享下,一起成长(文章中扩展可按需Google). Docker docker的架构图如下: 从图中可以看出几个组成部分 docker c

如何在前端项目中引用bootstrap less?

在基于bootstrap css框架的前端项目开发中,如果有grunt build系统,那么工作流是:客制化less,在less中定义自己的 CSS,同时可以随意引用bootstrap中预定义好的css类,一旦保存文件,grunt则开始重新构建,生成最后的生产文件.问题是: 如何能够在自己的客制less文件中引入bootstrap的less变量或者mixin呢? 比如:我如何能够实现在屏幕尺寸在@screen-md时,将所有的图片隐藏呢? 对于这个场景,假设项目目录结构如下: > bower_c

用gulp构建你的前端项目

前言 前端技术发展日新月异,随着模块化.组件化的提出,前端变得越来越复杂,静态资源越来越多,那么对静态资源的处理,如压缩,合并,去掉调试信息.. 如果还是人工去处理,效率非常之低且还容易出错,于是自动化的处理工具也就必然出现了.就像后端我们一般用maven管理项目,那么前端gulp是个不错的选择. 什么是gulp 是一个基于 Node.js 流.Javascript语法的快速构建前端项目并减少频繁的 IO 操作的自动化工具. Gulp有什么好处 易于学习使用 通过最少的API(核心.src().

前端工作流程自动化——Grunt/Gulp 自动化

前端工作流程自动化--Grunt/Gulp 自动化 Grunt/Gulp 都是node.js下的模块,简单来说是自动化任务运行器,两者都有社区及大量的插件支撑,在所有的自动化工具领域里,这两者是最好的前端自动化构建工具. 那么问题来了,Grunt和Gulp到底哪家强?在回答这个问题前,先给大家看一组下面的数据: 再看看实现同样功能的配置代码: 作者本人之前一直使用Grunt来做自动化构建的,在Gulp出来后,经过一段时间的试用感觉配置比Grunt方便多了,如果你两者还没接触过,本人推荐直接使用G

从一个前端项目实践 Git flow 的流程与参考

Git flow 出自 A successful Git branching model,这里使用了一个前端项目配合本文稿实施了 git flow 并记录流程作出示例和参考,对 hotfix 与持续部署略有提及,本意是用作公司内部的技术安利.所用源码及文档本身见于 github jusfr/HelloGitflow 前言 Gitflow 是一种 git 分支管理工具——说是思想也不为过,它使用既定策略区分和管理开发.测试.生产环境的代码版本,对测试与持续集成友好,与敏捷.迭代的思路一致. 1 准

Webstorm6.0.2 将项目部署到Tomcat目录

最近在使用Webstorm开发项目中前端相关的内容,但是涉及到使用ajax技术,不能够跨域访问相关json文件和服务,需要将前端代码部署到tomcat服务器上.但是,如果通过手动拷贝的方式,太过于复杂,大大降低了开发的效率,但实在无法割舍Webstorm,只好查阅了一些资料,解决部署的问题. 具体的步骤如下: (1)打开设置setting面板 (2)找到Project Settting中的Deployment选项. 右侧会出现+号,点击填写名称tomcat,type选择Local or--.然后