【万字长文】通过grunt、gulp和fit,彻底搞懂前端的自动化构建(三)

简介: 【万字长文】通过grunt、gulp和fit,彻底搞懂前端的自动化构建

FIS


fis 最新版本是 3.x,在 16 年左右非常流行,但是目前已经停止更新维护了。

学习 fis 的目的不是为了使用它,而是为了了解它的设计思想。

相比较于 grunt 和 gulp,fis 属于另一类构建系统。fis 的特点是高度集成,将前端日常开发中经常用到的构建任务和调试任务都集成到了内部,非常容易上手。

如果你的需求不高,甚至可以不需要定义任务,而是直接使用 fis 内部的任务。


基本使用


首先安装 fis,fis 的最新模块叫做 fis3,因为这个版本和之前的版本有很大的变化,所以特意起名 fis3。


npm i -D fis3

创建 src 目录,并在该目录下创建 3 个文件用于测试。

index.html


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>fis3 demo</title>
    <link rel="stylesheet" href="./style.scss" />
  </head>
  <body>
    hello,fis3!
    <script src="./app.js"></script>
  </body>
</html>

app.js


(() => {
  console.log("welcome fis3");
})();

style.scss


$bg: rgb(245, 219, 245);
$color: #982d2d;
body {
background-color: color;
}
body {
background-color: color;
}

fis 最常用的一个命令就是 release,-d 的意思是指定输出目录。


npx fis3 release -d output

这样就会在项目的根目录下生成一个 output 文件夹,里面存放了所有的文件。

但是 es6 语法和 scss 并没有编译,唯一发生变化的就是 html。


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>fis3 demo</title>
    <link rel="stylesheet" href="/src/style.scss" />
  </head>
  <body>
    hello,fis3!
    <script src="/src/app.js"></script>
  </body>
</html>

里面的路径全部会被转换为绝对路径,这就是资源定位问题。

在之前的项目开发中,前端项目开发时所使用的相对路径在上线部署时可能并不适用。这个情况下很多后端程序员需要手动去修改路径。

fis 首要解决的问题是资源定位。

如果需要在部署时调整目录结构,可以通过 fis 的配置文件来实现。

fis 的配置文件默认是在项目根目录下的 fis-conf.js。

fis-conf.js 默认会有一个 fis 对象,可以使用它的 match 方法匹配文件,并在 match 函数的第二个参数中配置 release 的目录结构,其中$0 代表文件的原始路径。


fis.match("*.{js,scss}", {
  release: "/assets/$0",
});

这之后再进行编译,就会多出一层 assets 的文件夹包裹 js 文件和 scss 文件。


编译与压缩


在构建过程如果要进行编译操作,也需要在 fis 的配置文件中进行配置。


编译 scss


编译 scss 文件需要 fis-parser-node-sass。


npm i -D fis-parser-node-sass
编写 scss 的编译配置。


// ... other code
fis.match("**/*.scss", {
  // 使用 fis-parser-node-sass 插件,省略「fis-parser-」
  parser: fis.plugin("node-sass"),
  // 重命名后缀名
  rExt: "css",
});


编译 ES6 语法


fis 官方提供了一个 fis-parser-babel-6.x 的插件,因为 fis 已经停止维护了,所以这个插件所使用的 babel 版本还是 6.x。


npm i -D fis-parser-babel-6.x

编写 js 的编译配置。


// ... other code
fis.match("**/*.js", {
  parser: fis.plugin("babel-6.x"),
});


代码压缩


压缩文件在配置对象中添加一个 optimizer 属性,来指定使用什么插件进行压缩。

fis 内部提供了代码压缩的插件,css 的是 clean-css,js 的是 uglify-js。这两个插件都是集成在 fis3 内部的,不需要单独安装。


fis.match("*.{js,scss}", {
  release: "/assets/$0",
});
fis.match("**/*.scss", {
  // 使用 fis-parser-node-sass 插件,省略「fis-parser-」
  parser: fis.plugin("node-sass"),
  // 重命名后缀名
  rExt: "css",
  optimizer: fis.plugin("clean-css"),
});
fis.match("**/*.js", {
  parser: fis.plugin("babel-6.x"),
  optimizer: fis.plugin("uglify-js"),
});


查看编译信息


使用 fis3 inspect 命令可以查看编译过程中会编译哪些文件,使用哪些配置。


npx fis3 inspect


写在最后


自动化构建是前端工程化的第二块内容,到此讲解结束,接下来会发布另外几篇关于前端工程化的文章,敬请期待。


相关文章
|
1月前
|
监控 jenkins 测试技术
自动化测试框架的构建与实践
【10月更文挑战第40天】在软件开发周期中,测试环节扮演着至关重要的角色。本文将引导你了解如何构建一个高效的自动化测试框架,并深入探讨其设计原则、实现方法及维护策略。通过实际代码示例和清晰的步骤说明,我们将一起探索如何确保软件质量,同时提升开发效率。
44 1
|
1月前
|
测试技术 开发者 Python
自动化测试之美:从零构建你的软件质量防线
【10月更文挑战第34天】在数字化时代的浪潮中,软件成为我们生活和工作不可或缺的一部分。然而,随着软件复杂性的增加,如何保证其质量和稳定性成为开发者面临的一大挑战。自动化测试,作为现代软件开发过程中的关键实践,不仅提高了测试效率,还确保了软件产品的质量。本文将深入浅出地介绍自动化测试的概念、重要性以及实施步骤,带领读者从零基础开始,一步步构建起属于自己的软件质量防线。通过具体实例,我们将探索如何有效地设计和执行自动化测试脚本,最终实现软件开发流程的优化和产品质量的提升。无论你是软件开发新手,还是希望提高项目质量的资深开发者,这篇文章都将为你提供宝贵的指导和启示。
|
20天前
|
人工智能 自然语言处理 JavaScript
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
Agent-E 是一个基于 AutoGen 代理框架构建的智能自动化系统,专注于浏览器内的自动化操作。它能够执行多种复杂任务,如填写表单、搜索和排序电商产品、定位网页内容等,从而提高在线效率,减少重复劳动。本文将详细介绍 Agent-E 的功能、技术原理以及如何运行该系统。
70 5
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
|
5天前
|
Serverless 决策智能 UED
构建全天候自动化智能导购助手:从部署者的视角审视Multi-Agent架构解决方案
在构建基于多代理系统(Multi-Agent System, MAS)的智能导购助手过程中,作为部署者,我体验到了从初步接触到深入理解再到实际应用的一系列步骤。整个部署过程得到了充分的引导和支持,文档详尽全面,使得部署顺利完成,未遇到明显的报错或异常情况。尽管初次尝试时对某些复杂配置环节需反复确认,但整体流程顺畅。
|
10天前
|
缓存 监控 安全
公司电脑监控软件的 Gradle 构建自动化优势
在数字化办公环境中,公司电脑监控软件面临代码更新频繁、依赖管理和构建复杂等挑战。Gradle 构建自动化工具以其强大的依赖管理、灵活的构建脚本定制及高效的构建缓存与增量构建特性,显著提升了软件开发效率和质量,支持软件的持续更新与优化,满足企业对员工电脑使用情况的监控与管理需求。
25 3
|
22天前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
42 9
|
20天前
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
37 5
|
1月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
43 5
|
28天前
|
JavaScript 前端开发 测试技术
构建高效可维护的前端应用
构建高效可维护的前端应用
|
1月前
|
jenkins 测试技术 持续交付
自动化测试框架的构建与优化:提升软件交付效率的关键####
本文深入探讨了自动化测试框架的核心价值,通过对比传统手工测试方法的局限性,揭示了自动化测试在现代软件开发生命周期中的重要性。不同于常规摘要仅概述内容,本部分强调了自动化测试如何显著提高测试覆盖率、缩短测试周期、降低人力成本,并促进持续集成/持续部署(CI/CD)流程的实施,最终实现软件质量和开发效率的双重飞跃。通过具体案例分析,展示了从零开始构建自动化测试框架的策略与最佳实践,包括选择合适的工具、设计高效的测试用例结构、以及如何进行性能调优等关键步骤。此外,还讨论了在实施过程中可能遇到的挑战及应对策略,为读者提供了一套可操作的优化指南。 ####