前端项目部署之Grunt


接下来我们完善Gruntfile.js文件中的任务
config :{
static_dest:'release/main/webapp/static/union/'
},
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"
],
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-usemin插件不同的地方是我加了一个替换方法filePrefixer,github地址:https://github.com/levincao1/grunt-contrib-levin-usemin/)
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目录下的静态资源
比较一下发布前
发布后的静态资源
动态页面中的静态资源引用发布前的


前端项目部署之Grunt的更多相关文章
- Dockerfile + Nginx.conf文件记录(用于前端项目部署)
Dockerfile + Nginx.conf文件记录(用于前端项目部署) 本教程依据个人理解并经过实际验证为正确,特此记录下来,权当笔记. 注:基于linux操作系统(敏感信息都进行了处理),默认服 ...
- 前后端分离之前端项目构建(grunt+require+angular)
前言 前段时间做了一个项目,前端开发页面,然后把代码给到后端同学,后端同学通过vm再来渲染页面.后来才发现,这种方式简直是太low了,因为前端代码在服务端同学那里,每次前端需要更改的时候都需要去到服务 ...
- 前端项目构建工具---Grunt
什么是Grunt? grunt是javascript项目构建工具,在grunt流行之前,前端项目的构建打包大多数使用ant.(ant具体使用 可以google),但ant对于前端而言,存在不友好,执行 ...
- Luffy之前端项目部署搭建
1. 搭建前端项目 1.1 创建项目目录 cd 项目目录 vue init webpack lufei 根据需要在生成项目时,我们选择对应的选项, 效果: 根据上面的提示,我们已经把vue项目构建好了 ...
- 基于sentry的前端错误监控日志系统(部署sentry服务器/前端项目部署)-让前端最快的定位到生产问题
背景 在这越来越发达的网络时代,web应用也是越来越复杂,尤其是前端的开发,也是越来越受重视. 所以在我们前端开发完成后,会有一些列的web应用的上线验证,如自测.QA测试.code review 等 ...
- 简单的利用nginx部署前端项目
网上有很多教程写的一大堆东西,新手可能会有点看不懂,现在我写这篇文章是为了更好的帮助新手,如何将自己的前端项目部署到自己的服务器上. 首先我们必须要有一台自己的ubuntu服务器,如果没有可以去阿里云 ...
- .NET Core +Angular 项目 部署到CentOS
前言: 最近公司需要开发项目能在Linux系统上运行,示例开发项目采用.Net Core + Angular开发:理论上完全支持跨平台. 但是实践才是检验真理的唯一标准:那么还是动手来验证实现下:过程 ...
- 基于SaaS平台的iHRM项目的前端项目介绍
1.下载安装node.js 访问https://nodejs.org/en/,然后下载安装即可 2. 查看是否安装成功 打开cmd命令行,输入node -v 如果出现对应的版本号,即为安装成功 3.从 ...
- 如何使用Docker构建前端项目
原文链接 Docker单独部署前端项目和Node项目是非常便捷的,在这里分享一下Docker的使用,主要聊聊它的部署实践.(我是window10专业版安装Docker) Docker Docker是一 ...
随机推荐
- Directx11学习笔记【七】 游戏定时器的实现
无论是在动画还是在一些游戏中,定时器总是必不可少的,游戏的帧数动画的播放等都离不开定时器的控制.这里以dx11龙书中提供的定时器为例,具体看看是怎么实现一个简单但精度高使用方便的定时器的. 这个定时器 ...
- c#中的属性
在C#中我们可以很自由的访问共有字段,但有时我们可能需要某字段只能读或者写,或在改变字段值得时候做一些其他事情,显然这些仅仅依靠字段是无法实现的,于是便有了属性. 1.基本用法 c#中的属性由属性作用 ...
- configure.ac:20: error: Autoconf version 2.65 or higher is required
安装thrift例如,下面的问题出现: configure.ac:20: error: Autoconf version 2.65 or higher is required wget http:// ...
- Effective C++笔记05:实现
条款26:尽可能延后变量定义式的出现时间 博客地址:http://blog.csdn.net/cv_ronny 转载请注明出处! 有些对象,你可能过早的定义它,而在代码运行的过程中发生了导常,造成了開 ...
- 什么时候PHP经验MySQL存储过程
1.MySQL存储过程 数据库语言,我们经常使用的操作SQL语句必须首先编译在运行时.然后运行,存储过程(Stored Procedure)它被设置为完成一个特定的功能SQL报表设置.编译存储在数据库 ...
- nodeJs基础
Node.js 是一个基于Chrome JavaScript 执行时建立的一个平台, 用来方便地搭建高速的 易于扩展的网络应用· Node.js 借助事件驱动, 非堵塞I/O 模型变得轻量和高效, 很 ...
- Java绘制艺术图形
本例主要是通过使用坐标轴平移,图形旋转和获得随机数等技术来绘制艺术图案.通过重写JPanel类中的paint()方法,并在该方法中使用Graphics2D类中的translate(),setColor ...
- Matlab Newton‘s method
定义函数 function y=f(x) y=f(x).%函数f(x)的表达式 end function z=h(x) z=h(x).%函数h(x)的表达式 end 主程序 x=X;%迭代初值 i=0 ...
- 你所不了解的float(滥用float的怪异现象) (转)
阅读目录 float设计初衷就是为了实现文字环绕效果 如何解决浮动造成的父容器塌陷? 兼容各浏览器清除浮动的通用方式 滥用浮动 运用浮动的一些特性 浮动与布局 浮动与单侧固定布局 浮动与智能自适应的流 ...
- apache kafka系列之-监控指标
apache kafka中国社区QQ群:162272557 1.监控目标 1.当系统可能或处于亚健康状态时及时提醒,预防故障发生 2.报警提示 a.短信方式 b.邮件 2.监控内容 2.1 机器监控 ...