【万字长文】通过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


写在最后


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


相关文章
|
14天前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
111 2
|
16天前
|
前端开发
深入解析React Hooks:构建高效且可维护的前端应用
本文将带你走进React Hooks的世界,探索这一革新特性如何改变我们构建React组件的方式。通过分析Hooks的核心概念、使用方法和最佳实践,文章旨在帮助你充分利用Hooks来提高开发效率,编写更简洁、更可维护的前端代码。我们将通过实际代码示例,深入了解useState、useEffect等常用Hooks的内部工作原理,并探讨如何自定义Hooks以复用逻辑。
|
21天前
|
前端开发 JavaScript 测试技术
前端工程化:构建高效、可维护的现代Web应用
【10月更文挑战第5天】前端工程化:构建高效、可维护的现代Web应用
|
7天前
|
JavaScript 前端开发 Docker
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
在使用 Deno 构建项目时,生成的可执行文件体积较大,通常接近 100 MB,而 Node.js 构建的项目体积则要小得多。这是由于 Deno 包含了完整的 V8 引擎和运行时,使其能够在目标设备上独立运行,无需额外安装依赖。尽管体积较大,但 Deno 提供了更好的安全性和部署便利性。通过裁剪功能、使用压缩工具等方法,可以优化可执行文件的体积。
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
|
19天前
|
前端开发 JavaScript 编译器
前端研发链路之构建
本文首发于微信公众号“前端徐徐”,作者徐徐探讨了前端研发链路中的构建过程。文章介绍了构建器、JavaScript编译器和CSS编译器的作用及常见工具,详细解析了它们如何协同工作,提高开发效率和项目可维护性。适合前端开发者阅读,帮助理解现代前端构建体系。
13 1
前端研发链路之构建
|
2天前
|
前端开发 API UED
深入理解微前端架构:构建灵活、高效的前端应用
【10月更文挑战第23天】微前端架构是一种将前端应用分解为多个小型、独立、可复用的服务的方法。每个服务独立开发和部署,但共同提供一致的用户体验。本文探讨了微前端架构的核心概念、优势及实施方法,包括定义服务边界、建立通信机制、共享UI组件库和版本控制等。通过实际案例和职业心得,帮助读者更好地理解和应用微前端架构。
|
8天前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
8天前
|
前端开发 API UED
拥抱微前端架构:构建灵活、高效的前端应用
【10月更文挑战第17天】微前端架构是一种将前端应用拆分为多个小型、独立、可复用的服务的方法,每个服务可以独立开发、部署和维护。本文介绍了微前端架构的核心概念、优势及实施步骤,并分享了业界应用案例和职业心得,帮助读者理解和应用这一新兴架构模式。
|
13天前
|
存储 监控 前端开发
掌握微前端架构:构建未来前端应用的基石
【10月更文挑战第12天】随着前端技术的发展,传统的单体应用架构已无法满足现代应用的需求。微前端架构通过将大型应用拆分为独立的小模块,提供了更高的灵活性、可维护性和快速迭代能力。本文介绍了微前端架构的概念、核心优势及实施步骤,并探讨了其在复杂应用中的应用及实战技巧。
|
15天前
|
前端开发 JavaScript
Vite 多种前端框架的构建
Vite 多种前端框架的构建