2-1-8-Gulp自动化构建案例

useref 文件引用及压缩处理

在html中有时会引入一些css 或者js 文件,这些文件当我们打包完成之后就会出现文件路径不对应的情况。

针对这个问题可以使用一个 useref 的插件,使用这个插件可以自动地处理html中的构建注释。

按照这些构建注释,useref 可以帮我们将文件打包到指定的目录中,并且在这个过程中还可以对文件进行压缩等操作。

yarn add gulp-useref --dev
const useref = () => {
    return src('dist/*.html, { base: 'dist })
        .pipe(plugins.useref({ searchPath: ['dist', '.'] }))
        .pipe(dest('dist'))
}

这个gulp 任务的入口文件时打包之后的dist中的html文件,出口文件也是文件的源路径,所以这个任务应该在构建任务的最后去执行。

useref会把对应的引入文件合并打包并且自动的引入到html中,但也只是对这些文件进行了简单的合并和引入操作,我们可以在这个过程中对文件进行一些其他的优化操作,例如压缩。

yarn add gulp-htmlmin gulp-uglify gulp-clean-css gulp-if --dev
const useref = () => {
    return src('dist/*.html, { base: 'dist })
        .pipe(plugins.useref({ searchPath: ['dist', '.'] }))
        // 文件流流到这一步的时候,会多种不同格式的文件,html js css
        // 所以这里需要对这三种文件分类进行不同的操作,所以这里除了安装对应文件的压缩插件之外还额外安装了一个gulp-if插件用于判断文件的类型。
        .pipe(plugins.if(/\.js$/, plugins.uglify()))
        .pipe(plugins.if(/\.css$/, plugins.cleanCss()))
        .pipe(plugins.if(/\.html$/, plugins.htmlmin()))
        .pipe(dest('dist'))
}

上面的这个useref任务每次执行之前需要再去执行一次compile任务,因为,这个任务每次的执行都依赖于html中的构建注释,每次按照构建注释执行完之后生成的新的html中会将这些注释删除掉,所以每次执行这个任务之前都需要去重新生成这些html文件。

但是,当按照上面的执行之后,还会发现有些文件并没有生成或者是,文件的内容是空的,这个是因为这个useref这个任务的读写流目标都是同一个目录,所以会出现一边往里面写文件同时还从里面读文件的情况,也就是会有文件读写冲突的问题。

解决这个问题最简单的就是直接生成一个新的目录

const useref = () => {
    return src('dist/*.html, { base: 'dist })
        .pipe(plugins.useref({ searchPath: ['dist', '.'] }))
        // 文件流流到这一步的时候,会多种不同格式的文件,html js css
        // 所以这里需要对这三种文件分类进行不同的操作,所以这里除了安装对应文件的压缩插件之外还额外安装了一个gulp-if插件用于判断文件的类型。
        .pipe(plugins.if(/\.js$/, plugins.uglify()))
        .pipe(plugins.if(/\.css$/, plugins.cleanCss()))
        .pipe(plugins.if(/\.html$/, plugins.htmlmin()))
        .pipe(dest('release'))
}

解决完这个问题之后,还会有一个问题就是,构建完成之后,html文件并没有被压缩,这个是因为,htmlmin这个插件默认只是会将html中的空白字符删除,并不会将文件代码中的换行符等删除,所以这里在使用这个插件的时候,还需要给这个任务配置一个参数 collapseWhitespace 为 true 以及其他一些类似的问题。

.pipe(plugins.if(/\.html$/, plugins.htmlmin({ 
    collapseWhitespace:true,
    // 将html中的css压缩
    minifyCSS: true,
    // 将html中的js压缩
    minifyJS: true
 })))

htmlmin中还有一些其他的可以配置的属性,比如说空属性的删除,html的注释等等,自行查询文档。

重新规划构建过程

上面由于同时读写 dist 这个目录造成的读写冲突,我们使用了一个另外的目录作为目标目录,然而这个新的目录中又没有我没项目中的图片和字体文件,所以之前的项目结构在使用useref之后就被破坏了,所以现在需要去规整一下项目的结构。

其实按照之前的构建流程,将src目录中的文件编译之后都放到了 dist 中,但是后续还是用 useref 进行文件的引入构建最终放到了 release 中,所以说像script,style,html直接放到 dist 中时不合理的,而是应该将这些个文件先放到一个临时目录中,然后使用 useref 将这个临时目录中的html进行相关的构建操作之后再放到 dist 中。

补充

  • 在将项目构建文件完成之后,可以将对外暴露出去的构建的命令,使用 scripts 在 package 中,让小伙伴们更加容易理解。

  • gitignore中得将打包生成的文件目录给添加进去。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些分析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛项目需要团队协作来完成,这促使学生学会有效地与他人合作、协调分工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和分工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛项目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖项不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值