目前线上系统利用Seajs做模板化,但是没有对js和css进行打包,在这次简历搜索优化项目里我尝试对gulp插件对Seajs模块打包。

安装gulp和相关插件

  1. npm install -g gulp
  2. npm install —-save-dev gulp

cmd打包的插件:gulp-cmd

gulp-cmd可以解析seajs.config中的alias,vars,paths 只有在有seajs.use的时候才有用

  1. npm install --save-dev gulp-cmd

css压缩插件gulp-clean-css ,这个插件代替之前一直使用的gulp-minify-css

  1. npm install --save-dev gulp-clean-css

js压缩合并插件

  1. npm install --save-dev gulp-uglify gulp-concat

入口文件配置

gulp-cmd支持seajs的配置文件,入口文件可以这样配置:

  1. seajs.config({
  2. // 基础路径
  3. // base: window.seajsBase,
  4. // 路径配置
  5. paths: {
  6. 'js': '../js',
  7. 'css': '../css',
  8. 'dist' : './dist'
  9. },
  10. // 别名配置
  11. alias: {
  12. 'jquery': 'js/jquery',
  13. 'index': 'js/index',
  14. 'citys-pc':'js/citys-pc',
  15. 'citys':'js/citys',
  16. 'industry':'js/industry',
  17. 'jobs':'js/jobs',
  18. 'bigcity':'js/bigcitys',
  19. 'js/selector':'js/selector-v1'
  20. },
  21. // 文件编码
  22. charset: 'utf-8'
  23. })
  24. seajs.use("./js/search-v1")

在解析模块过程中先解析alias,然后在匹配paths

Js处理流程

  1. gulp.task('search-js', function () {
  2.  
  3. return gulp.src('js/search-main.js')
  4. .pipe(cmd({
  5. ignore: ['jquery']
  6. }))
  7. .pipe(uglify()) //压缩
  8. .pipe(gulp.dest('build/js')); //输出
  9.  
  10. });

ignore配置忽略jquery组件,把jquery组件和业务组件分离开。

打包后的文件格式如下:

define函数的第一个参数是该模块的模块id

css处理流程

  1. gulp.task('search-css', function () {
  2.  
  3. return gulp.src([
  4. 'css/main.css',
  5. 'css/selector.css',
  6. 'css/search-v1.css',
  7. ])
  8. .pipe(minifycss({ compatibility: 'ie7' }))//兼容ie7的配置
  9. .pipe(concat('search-main.css'))
  10. .pipe(gulp.dest('build/css/'));
  11.  
  12. });

注意:如果css有兼容ie7的hack代码,如果去除compatibility配置,压缩过程会剔除这些hack代码。

js的引用链接

如果没有其他模块,使用一下的引用方式,不过版本号的问题还是要手动改Velocity模板,版本号的问题要等一会前端接管模板以后的构建流程来做了

  1. <script src="js/sea.js"></script>
  2. <script src="build/js/jquery.js"></script>
  3. <script src="build/js/search-main.js?v=20160803"></script>

目前的引用方式,因为页脚里seajs.use加载了其他模块,引用方式要改下,还需要引入seajs.config.js文件,比较奇怪的是,即使已经定义的模块,seajs.use也会重复去加载,比如jquery,之前如果定义过,模块id是jquery,下面的seajs.use还是会请求加载一次jquery模块。

  1. <script src="http://st01.chrstatic.com/themes/bchinahr/js/sea.js"></script>
  2. <script src="http://st01.chrstatic.com/themes/bchinahr/js/sea-config.js?v=20160803"></script>
  3. <script src="http://st01.chrstatic.com/themes/bchinahr/build/js/search-main.js?v=20160803"></script>
  4. <script>
  5. seajs.use("http://st01.chrstatic.com/themes/bchinahr/js/hf",function(hf) {
  6. hf.hObj.init();
  7. })
  8. </script>

css的压缩合并后大小有40k,js有69k,css和js的请求数减少了50%以上,

CMD模块打包部署总结的更多相关文章

  1. spring boot maven多模块打包部署到tomcat

    @SpringBootApplication(scanBasePackages = {"com.xxx.*"}) public class ApiApplication exten ...

  2. vue-multi-module【多模块集成的vue项目,多项目共用一份配置,可以互相依赖,也可以独立打包部署】

    基于 vue-cli 2 实现,vue 多模块.vue多项目集成工程 Github项目地址 : https://github.com/BothEyes1993/vue-multi-module 目标: ...

  3. seajs打包部署工具spm的使用总结

    相信使用seajs的好处大家都是知道的,接触seajs好像是在半年前,当时还不知道页面阻塞问题,这里不带多余的话了. seajs实现了模块化的开发,一个网站如果分了很多很多模块的话,等开发完成了,发现 ...

  4. 构建服务端的AMD/CMD模块加载器

    本文原文地址:http://trock.lofter.com/post/117023_1208040 . 引言:  在前端开发领域,相信大家对AMD/CMD规范一定不会陌生,尤其对requireJS. ...

  5. 【基于WinForm+Access局域网共享数据库的项目总结】之篇三:Access远程连接数据库和窗体打包部署

    篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

  6. 使用IntelliJ IDEA和Maven构建Java web项目并打包部署

    爱编程爱分享,原创文章,转载请注明出处,谢谢! http://www.cnblogs.com/fozero/p/6120375.html 一.背景 现在越来越多的人使用IntelliJ IDEA工具进 ...

  7. C# Winform打包部署时添加注册表信息实现开机启动

    使用VS自带的打包模块可以很方便的对项目进行打包部署,同时我们也可以在安装部署时操作注册表实现开机启动软件.具体实现如下: 1.添加安装部署项目后,鼠标右键安装项目->视图->注册表,HK ...

  8. 【转】VS2012程序打包部署详解

    上篇博客把收费系统的总体设计进行了一遍讲解,讲解的同时掺杂了些有关.NET编译机制的总结.程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的是没有了打包工具.不知道出于什么原因 ...

  9. 【转】C# Winform打包部署时添加注册表信息实现开机启动

    使用VS自带的打包模块可以很方便的对项目进行打包部署,同时我们也可以在安装部署时操作注册表实现开机启动软件.具体实现如下: 1.添加安装部署项目后,鼠标右键安装项目->视图->注册表,HK ...

随机推荐

  1. 搜索专题: HDU1258Sum It Up

    Sum It Up Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  2. 根据日志来源的不同生成不同的index索引

    使用filebeat收集系统日志,不同应用的日志,然后把这些日志传输给Logstash,再然后交由elasticsearch处理,那么如何区分不同的日志来源呢? filebeat.yml配置文件中不启 ...

  3. 转载 PowerDesigner导出mysql数据结构

    转自:https://blog.csdn.net/dkingyaoyao/article/details/84586146 好久没有使用PowerDesigner,突然想用它导出数据结构,居然忘记了. ...

  4. 2019-10-31-VisualStudio-2019-新特性

    title author date CreateTime categories VisualStudio 2019 新特性 lindexi 2019-10-31 08:48:27 +0800 2019 ...

  5. 互联网技术笔试总通不过?leetcode刷对了么

    https://36kr.com/p/5084645 Leetcode,绕都绕不过去的程序员刷题神器 编者按:本文来自逆行求职(ID:nixingjihua). 对所有求职技术岗位的童鞋来说,有这么一 ...

  6. RK3288之kernel目录结构以及功能

    :~/RK3288/kernel$ ls android include MAINTAINERS security arch init Makefile sound backported-featur ...

  7. IP电话的配置

    内容描述:IP电话配置 问题描述: IP电话站点为8203,IP地址为10.11.6.3,电话状态为空心(不正常). 处理过程: 1.在浏览器中打开输入原先已经配置正常的IP话机的IP地址访问其配置, ...

  8. qt04 中文显示问题

    sockettools识别GB2312,接收qt server 数据时 QByteArray ba = str.toLocal8Bit(); char *ss = ba.data(); obj-> ...

  9. java Byte源码分析

    源码: public static int toUnsignedInt(byte x) { return ((int) x) & 0xff; } 原理: -128(byte) 原码:10000 ...

  10. 并行操作多个序列map

    >>> def add1(a): return a + 1 >>> def add2(a,b): return a + b >>> def add ...