【万字长文】通过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月前
|
敏捷开发 测试技术 API
测试金字塔:构建高效自动化测试策略的基石
测试金字塔:构建高效自动化测试策略的基石
228 116
|
1月前
|
测试技术 API 数据库
测试金字塔:构建高效自动化测试策略的基石
测试金字塔:构建高效自动化测试策略的基石
249 114
|
1月前
|
设计模式 前端开发 测试技术
告别脆弱:构建稳定UI自动化测试的3个核心策略
告别脆弱:构建稳定UI自动化测试的3个核心策略
277 113
|
1月前
|
JSON 监控 API
n8n错误处理全攻略:构建稳定可靠的自动化工作流
在n8n自动化工作流中,错误是提升系统可靠性的关键。本文详解常见错误类型、节点级与全局处理机制,结合重试、熔断、补偿事务等高级模式,助您构建稳定、可维护的生产级自动化流程。
|
1月前
|
Java 项目管理 Maven
Maven项目管理与构建自动化完全指南
Maven彻底改变了Java项目管理方式,通过POM模型、依赖管理和标准化构建流程,大幅提升开发效率。本文深入解析其核心概念、多模块管理、私服搭建及与Spring Boot、Docker等现代技术栈的集成实践,助力开发者实现高效、规范的项目构建与团队协作。
Maven项目管理与构建自动化完全指南
数据采集 Web App开发 人工智能
170 0
|
3月前
|
人工智能 自然语言处理 安全
Milvus x n8n :自动化拆解Github文档,零代码构建领域知识智能问答
本文介绍了在构建特定技术领域问答机器人时面临的四大挑战:知识滞后性、信息幻觉、领域术语理解不足和知识库维护成本高。通过结合Milvus向量数据库和n8n低代码平台,提出了一种高效的解决方案。该方案利用Milvus的高性能向量检索和n8n的工作流编排能力,构建了一个可自动更新、精准回答技术问题的智能问答系统,并介绍了部署过程中的可观测性和安全性实现方法。
|
3月前
|
机器学习/深度学习 存储 算法
Trinity-RFT:构建智能体持续学习的自动化强化微调工厂
大型语言模型作为智能体在真实环境中持续交互学习面临诸多挑战。 Trinity-RFT 是通义实验室推出的强化微调框架,旨在实现智能体的持续进化。它通过探索、训练与经验池的解耦设计,支持多样化训练模式,提升资源利用率和学习稳定性。同时,Trinity-RFT 提供灵活的数据处理与算法模块化功能,降低应用与研究门槛,助力迈向终身学习与自主进化的智能体时代。
315 2
|
4月前
|
XML Java 数据库连接
MyBatis Generator插件使用详解:自动化构建效率提升
总体来说,MyBatis Generator的使用可以显著提高数据访问层代码的编写效率,减少出错概率,并为团队统一代码风格提供便捷。在面对要求快速发展和迭代的软件项目时,MBG的自动化代码生成功能成了不可或缺的辅助工具。
194 0
|
5月前
|
存储 人工智能 运维
企业级MLOps落地:基于PAI-Studio构建自动化模型迭代流水线
本文深入解析MLOps落地的核心挑战与解决方案,涵盖技术断层分析、PAI-Studio平台选型、自动化流水线设计及实战构建,全面提升模型迭代效率与稳定性。
224 6
下一篇
oss云网关配置