「构建程序/系统 」制作的概念基础

最近觉得React编程技术学得有一定操作能力,开始转向实操阶段,转向开发环境的学习。第一个任务,是学习和定制构建工具,或构建系统。
然而,名不正,言不顺,在尝试制作一个东西之前,必须对这个东西有一定深度的认识。构建程序,或构建系统 是什么,有什么用,相信有过一定项目经验都不陌生,但并不一定精确;如果你还不能为一个特殊的项目定制 构建系统,直接使用现成的脚手架, 也是你不精通的例证之一。

Table of Contents

构建系统的实质和及其技术基础

「构建系统」是什么?

这里的构建系统,与常识build tool相通,是指协助开发者对大型软件项目执行的 开发构建、运行测试、发布部署 等日常任务的工具。

「构建系统」的工具特征?

构建系统的使用特征是提供了 像 start run test build常用的命令入口,你可以在项目的命令行,或集成的IDE上「使用」此工具;

有通用的「构建系统」的吗?

由于项目特性,没用完全适用于某个特定项目的 构建系统,但是有相当多的通用模板或脚手架,可供使用;例如:

「构建系统」怎么制作?

除非项目非常的简单,否则大多数的构建系统都是从现有的脚手架之上微调得到,像CRA。当然,能调整一个现成的 构建系统也就有了定制的能力前提了,因为我们需要掌握 制作构建系统的基础技术;

「构建系统」使用什么技术制作?

软件 构建系统 有一个自动化任务的传统,所谓的脚本script本质上也是一个“程序”,一个自动化脚本任务可以看成一个“子程序”。在Web开发领域,编写自动化脚本的技术目前最流行的要数gulp和npm script。
接下来主要讲,使用npm script制作Web开发项目的构建系统,不是gulp技术,也不是非Web项目,像桌面项目;

Web项目构建系统技术特征

Web项目的构建系统无一不使用nodejs作为基础技术,这有历史和其它多种原因。要定制和使用Web项目构建系统,必先厘清一下nodejs相关的必要知识。

为什么Web项目或开发前端应用(WGP)需要安装Nodejs?

这个问题对刚进入前端领域的开发者来比较常见问。Web应用程序(WGP)是基于浏览器的,的确运行不需要Node,开发工具也不必一定需要Node,只是人为和趋势所致而已,主要有以下一些原因:

  • 第一,Web应用 和 Node 应用都是JS应用,它们有共通的代码库可共享,所以 大型Web应用 对Node的全球代码库有一定的依赖;
  • 第二,大部分Web应用 有 服务端,Web应用 不但前端,后端也会依赖Node;选择已有第三方技术,例如PHP作用后端不一定是明智;
  • 第三,开发工具完全可以使用现有的工具,例如使用传统的Make作构建技术,但是如果可以直接用自己熟悉的JS来开发辅助工具不是灵活自由吗?

npm 和 package.json是什么

使用 nodejs 作为基础技术的另一个让新手困惑是关于 NPM和它的配置文件 package.json。NPM是nodejs平台自带的 全球代码库的客户端管理工具,对NPM的困惑主要源它被赋于了多重角色的原因,请看以来的我对NPM的不满:

! 我对 NPM的不满
NPM 这个工具(为了方便“老手”) 违反了 专职工具 的规则,给初学者带来困惑;
NPM字面上就是个管理 NODEJS平台软件包 的工具(包括给本机安装、删除包,和将开发好包发布到服务器等),例如:
$ npm install xxxx
$ npm publish xxxx
但是,它也亦可用来 配置NODE 项目的开发环境——为项目安装依赖包,和开发工具包(理由:既然我管理着大量源码库,直接提供开发接口不是更方便),例如:
$ npm init
$ npm install xxxx –save
$ npm install xxxx -D
还可以,执行 构建任务,用作构建工具(注:这个是对npm管理功能定制接口的混用,原script对象接口只是用来管理包使用),例如:
$ npm start
$ npm run build
一具多职,让新手很迷惑,完成没有这个必要,分为三个工具就很简单了。

复制代码由于多重角色,导致 配置文件 package.json混入多重涵义的数据。