maven集成gulp压缩js,css方案


title: maven集成gulp压缩js,css方案 tags:

  • maven
  • gulp
  • 前端
  • js压缩 categories: 工作日志 date: 2017-02-25 18:18:54

背景

略  网站优化之——高性能网站建设指南

方案

关于maven的使用想必大家都比较熟悉了,本次在项目中使用基于gulp的方案压缩js,css。

看到这如果大家问到为啥不使用YUI Compressor的想必都是好同学~~~使用yui方案使劲戳使用YUI Compressor Maven插件压缩 js,css 输出war包

至于为啥不使用yui方案欢迎同学拍砖留言备注。

实施

  1. 使用maven的前端插件,下载安装node npm等依赖
       <plugin>
           <groupId>com.github.eirslett</groupId>
           <artifactId>frontend-maven-plugin</artifactId>
           <!-- Use the latest released version:
           https://repo1.maven.org/maven2/com/github/eirslett/frontend-maven-plugin/ -->
           <version>1.3</version>
           <executions>
               <execution>
                   <id>install node and npm</id>
                   <goals>
                       <goal>install-node-and-npm</goal>
                   </goals>
                   <phase>generate-resources</phase>
                   <configuration>
                       <nodeVersion>${project.build.node.version}</nodeVersion>
                       <npmVersion>${project.build.npm.version}</npmVersion>
                       <nodeDownloadRoot>https://npm.taobao.org/mirrors/node/</nodeDownloadRoot>
                       <npmDownloadRoot>https://registry.npm.taobao.org/npm/-/</npmDownloadRoot>
                   </configuration>
               </execution>
               <execution>
                   <id>npm install</id>
                   <phase>generate-resources</phase>
                   <goals>
                       <goal>npm</goal>
                   </goals>
                   <configuration>
                       <arguments>install</arguments>
                   </configuration>
               </execution>
               <execution>
                   <id>gulp build</id>
                   <phase>generate-resources</phase>
                   <goals>
                       <goal>gulp</goal>
                   </goals>
                   <configuration>
                       <arguments>${gulp.build}</arguments>
                   </configuration>
               </execution>
           </executions>
       </plugin>
复制代码
关注到此处可以指定node&npm的version,方便不同的环境,同时指定了淘宝的npm源,比官网快许多。工作原理很简单该插件会将node npm下载到maven的本地仓库中(通常为~/.m2),同时将依赖安装到pom同级目录下
复制代码
  1. 添加依赖文件
       {
         "name": "f6-erp",
         "version": "1.0.0",
         "description": "F6养车连锁就是diao!!!",
         "main": "index.js",
         "scripts": {
           "test": "echo \"Error: no test specified\" && exit 1"
         },
         "homepage": "http://m.f6car.com",
         "repository": {
           "type": "svn",
           "url": "http://192.168.1.250/svn/f6car/src/f6-erp"
         },
         "author": "qixiaobo",
         "license": "ISC",
         "dependencies": {
           "gulp": "latest",
           "gulp-less": "latest",
           "gulp-rev": "latest",
           "gulp-clean-css": "latest",
           "gulp-uglify": "latest",
           "gulp-concat": "latest",
           "gulp-sourcemaps": "latest",
           "del": "latest",
           "gulp-rev-replace": "latest",
           "gulp-replace": "latest"
         }
       }
``` plain
    
3.  添加gulp任务
```javascript
       var gulp = require('gulp'),
           rev = require('gulp-rev'),
           cleanCss = require('gulp-clean-css'),
           uglify = require('gulp-uglify'),
           concat = require('gulp-concat'),
           sourcemaps = require('gulp-sourcemaps'),
           del = require('del'),
           revreplace = require('gulp-rev-replace'),
           replace = require('gulp-replace'),
           less = require('gulp-less');
       var path = {
           css: 'src/main/webapp/css',
           js: 'src/main/webapp/js',
           jsp: 'src/main/webapp/page',
           less: 'src/main/webapp/less'
       };
       var destPath = {
           css: 'src/main/webapp/dist/css',
           js: 'src/main/webapp/dist/js',
           jsp: 'src/main/webapp/dist/page',
           less: 'src/main/webapp/dist/css'
       };
        
       gulp.task('del', function () {
           return del([
               'rev-manifest.json',
               destPath.css + '/**/*.css',
               destPath.js + '/**/*.js',
               destPath.jsp + '/**/*.jsp'], function (err, deletedFiles) {
               console.log('Files deleted:\n', deletedFiles.join('\n'));
           });
       });
        
       gulp.task('css-min', ['del'], function () {
           return gulp.src(path.css + '/**/*.css')
               .pipe(cleanCss())
               .pipe(rev())
               .pipe(gulp.dest(destPath.css))
               .pipe(rev.manifest())
               .pipe(gulp.dest(''));
       });
       gulp.task('less', ['css-min'], function () {
          return gulp.src(path.less + '/**/*.less')
               .pipe(sourcemaps.init())
               .pipe(less())
               .pipe(cleanCss())
               .pipe(rev())
               .pipe(sourcemaps.write())
               .pipe(gulp.dest(destPath.less))
               .pipe(rev.manifest({base: '', merge: true}))
               .pipe(gulp.dest(''));
       });
       gulp.task('js-min', ['css-min'], function () {
           return gulp.src(path.js + '/**/*.js')
               .pipe(sourcemaps.init())
               .pipe(uglify())
               .pipe(rev())
               .pipe(sourcemaps.write('.'))
               .pipe(gulp.dest(destPath.js))
               .pipe(rev.manifest({base: '', merge: true}))
               .pipe(gulp.dest(''));
       });
        
       gulp.task('page', ['css-min', 'less', 'js-min'], function () {
           var manifest = gulp.src("rev-manifest.json");
           return gulp.src(path.jsp + '/**/*.jsp')
               .pipe(revreplace({replaceInExtensions: ['.jsp'], manifest: manifest}))
               .pipe(replace(/\/(.*)(-.*)\.jsp/g, '/$1.jsp'))
               .pipe(gulp.dest(destPath.jsp))
       });
        
        
       gulp.task('default', ['page'], function () {
       // place code for your default task here
       });
``` plain
   此处有个陷阱,各位可以考虑一下(replace(/\\/(.*)(-.*).jsp/g, ‘/$1.jsp’))
   
    的目的是为啥?
   
    通过gulp任务运行之后将会根据js的文件内容生成对应的版本号,同时将代码中对应引用该js的地方进行替换
   
    生成的rev对应关系默认将会存储在rev-manifest.json文件中,形如
```json
       {
         "adjust/adjust.js": "adjust/adjust-61f499975b.js",
         "adjust/adjustList.js": "adjust/adjustList-17a7ed5e56.js"
       }
复制代码
 
复制代码
  1. 打war包
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <configuration>
                <warName>${project.build.name}</warName>
                <warSourceExcludes>
                    js/**,css/**,page/**,dist/**
                </warSourceExcludes>
                <webResources>
                    <resource>
                        <directory>${war.generate.dir}</directory>
         
                        <filtering>false</filtering>
         
                    </resource>
                </webResources>
            </configuration>
        </plugin>
复制代码
此处通过打包的时候排除掉对应的js,css,page文件夹,将gulp生成的文件夹丢进即将打成的包中,完成生产与开发的隔离。

此处也有陷阱 <filtering>false</filtering>

该选项会关闭maven war插件的autoconfig选项,autoconfig将会进行变量替换 参考此处[注意maven打包的filter][maven_filter]    至此 完成了js,css的文件压缩&替换
复制代码
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值