简单的构建工具:npm scripts vs Makefile vs runjs

基于命令行的构建工具最近在 JavaScript 世界中获得了很多关注。与冗长的 Grunt.js/Gulp.js 文件和工作流相比,它们简单、灵活且易于管理。这与敏捷和适应性的方式相一致,这在快速变化的JavaScript世界中变得越来越重要。但是选择哪个基于命令行的构建工具呢?它们之间有什么区别?

快速总结复杂的构建系统

主要缺点:

  • 依赖插件及其文档。它们并不总是最新的,以后可能会中断并导致调试痛苦。文档分布在不同的项目中,找到您正在寻找的东西可能非常困难。
  • 膨胀。以具有数百行代码的 Gruntfile 或 Gulpfile 结尾是很常见的。代码难以理解、维护和尝试自定义解决方案非常具有挑战性。它需要大量有关建筑系统的知识。整个方法似乎是过度设计和不必要的复杂。

进一步阅读:

为什么我们应该停止使用 Grunt & Gulp _如果你正在构建一个现代 JavaScript 应用程序或网站,你很有可能已经看过 JavaScript Build…_www.keithcirkel.co.uk

为什么我离开 Gulp 和 Grunt 使用 npm 脚本_我知道你在想什么。哇?!Gulp 不是刚刚杀死了 Grunt 吗?为什么我们不能在……_medium.freecodecamp.com 上满足几分钟

简单的构建工具

我们有 3 个候选者:npm scriptsMakefilerunjs。所有这些都基于命令行脚本。您不需要太多关于这些工具的知识。它们的构造和工作流程非常简单。重要的是如何有效地管理命令行脚本。

主要优点

  • 浅学习曲线
  • 易于定制,灵活性
  • 不需要插件,cli命令足够强大

npm 脚本

npm 包管理器的内置功能。每个任务的内容都保存在“脚本”部分下的package.json中。每个任务都可以通过npm run [task-name]命令调用。[更多]。

优点:

  • 你不需要安装额外的工具,npm 脚本是 npm 的一部分所以你可以马上开始
  • 挂钩脚本,可以在特定情况下运行,例如prepublishpostinstallpretest

缺点:

  • 当脚本变得复杂时,它们很难阅读
  • 引入更复杂的逻辑(如条件检查、错误或参数处理)可能难以实现和维护
  • 除非将 JavaScript 代码导出到单独的脚本文件,否则无法使用
  • 很难记录任务

显然,您可以通过从脚本部分提取命令到单独的文件(bash/node 脚本)并在 npm 脚本中调用它们来减少这些缺点。最后,这并不方便,因为您将构建代码分布在多个文件中。对于高达 15/20 行代码且非常频繁的任务,它可能感觉太多了。此外,如果你想使用 ES6/7,在你的 node.js 构建脚本中导入 ES6,你需要编译它们。这使过程变得不必要地复杂化。

npm 脚本使用示例:

调用任务示例:

npm 运行观察:测试

生成文件

由Stuart Feldman创建的构建自动化工具,最初于 1977 年发布。主要用于 C/C++ 代码编译。然而,由于它的灵活性,它开始获得更普遍的使用。它允许在“Makefile”文件中定义任务。可以在终端中通过make命令调用任务。[更多]。

优点:

  • 实现更复杂的逻辑不是问题
  • 良好的可读性
  • 你不需要安装额外的工具(除非你是 Windows 用户),make应该已经存在于 unix 环境中

缺点:

  • 你被绑定到 shell 代码,你不能使用你已经知道的 JavaScript
  • 这意味着有时 shell 代码可能很难处理。复杂逻辑的额外学习曲线。

Makefile 示例:

调用任务示例:

做测试

运行js

用 JavaScript 编写。简约的构建工具。可以通过 npm 安装。允许在“runfile.js”文件中定义任务。可以通过终端中的run(或npx run )命令调用任务。[更多]。

优点:

  • 您可以在任务中使用 JavaScript(使用 ES6/7)并导入其他 npm 模块。runfile.js只是一个 JavaScript 模块。这允许极大的灵活性
  • 你也可以通过运行函数进行命令行调用
  • 良好的可读性
  • 它很容易处理任务参数

缺点:

  • 需要通过npm -g runjs-cli安装的全局运行命令。这可以在 node ≥ 8.2 中避免,您可以通过 npx 调用runjs任务,例如“npx run dev_”。_更多关于 npx

runfile.js 示例

调用任务示例:

运行 testrun lint components/App.js –fixrun build:clean

结论

我想说,考虑到简单的构建工具,这三个工具都非常好。主要区别在于灵活性和可读性之间的关系。在这方面,runjs似乎是最强的。

为了进一步的实验,我给你几个有趣的例子,它们在runjs中很容易做到,但在npm 脚本Makefile中很难管理。

记录任务:

$运行构建–帮助

将任务共享到 npm 包:

$运行共享

接受参数和条件检查:

$ 运行测试侧边栏/button.js 浏览器

错误处理和回退:

$运行构建

处理异步调用:

$运行开始

runjs_极简建筑系统_www.npmjs.com

simple-build-tools-npm-scripts-vs-makefile-vs-runjs-31e578278162