在搭建开发环境的构建系统时,我们关注二点:
下面,让我们来详细了解下这两点的内容吧。
我们在第一章 基础知识时提到了包管理的一些基础知识,对于一个成熟的编程语言来说,其也搭配有对应的包管理工具。只是在这里的,包管理工具不仅仅具有包管理的功能,它还会负责对包所依赖的子依赖进行管理。如我们在安装 Vim 软件的时候,会依赖于 vim-runtime
,这里包管理工具所自带的依赖管理功能将会为我们自动安装这个依赖包。
对应的也会有相应的版本管理机制,如在上一章里,我们使用 pip install Django==1.10.2
来指定我们安装的Django包的版本,这些配置也会也在相应的配置文件里。在一些语言里,其包管理工具可以指定包依赖的子依赖的版本,如我们可以限定 vim-runtine
的版本为xx,如 Ruby 语言里的 Gemfile.lock,又或者是 Nodejs 里的 shirinkwrap。
除了在我们的依赖管理配置里写上所需要使用的库的版本,还可以在这个文件里指定包的中心。在中大型的软件公司里,由于安全性及便利性的原因,他们都会建立自己的包中心,又或者称为仓库中心。在这些仓库中心里,将会同步不同语言的仓库中心中的包。并且,也会将自己开发的软件包上传到这个中心,以方便组织里的其他开发者使用。
在早期的 Web 开发中,当我们修改完后台代码时,需要手动重启后台服务;当我们修改完前端代码时,需要手动刷新前端界面。而这些步骤事实上都可以交由自动化工具来完成的,在后台开发时,这部分需要依赖于框架来实现,又或者是构建工具。而在前端开发时,我们则可以手动创建这样的服务。当检测到本地文件里的代码修改,自动编译代码、再重新加载前端页面。
当我们开发前端项目时,可能会用到 TypeScript 或者 ES6 来开发语言。为了在浏览器上运行,我们需要将其转换为 JavaScript,因此每当我们修改代码时,我们就需要做一次转换。又或者是我们使用 SASS 或者 LESS 作为样式开发语言时,就需要在运行时将其转换为 CSS。而转换 JavaScript 和 转换为 CSS 这两点都是在自动重载时所需要做的。
当 C 还是一门新型的编程语言时,还存在一些未被原始编译器捕获的常见错误,所以程序员们开发了一个被称作 lint 的配套项目用来扫描源文件,查找问题。对应于不同的语言都会有不同的 lint 工具,在 Python 语言中有 Pylint,在 JavaScript 中就有 JSLint,在Java里有lint4j等等。我们使用这类工具,来帮助我们从基本的语法上提高代码质量,比如:
除了这些还有一些值得考虑的限制,诸如
值得注意的是,这样做的主要原因是保持团队的代码风格一致。即使我们已经做出了一套规范,如果没有对应的代码检视机制,那么我们还是需要依靠工具来帮助我们提高。
在我们准备提交代码到服务器的时候,我们就需要运行测试来保证不破坏系统原来的功能。当然,我们也需要在这时候添加对现有代码的测试。在这时候我们需要运行单元测试、功能测试、集成测试等等。
对于单元测试和功能测试而言,我们可以使用测试框架自带的测试命令来运行——只需要调用测试框架的接口即可。
对于集成测试来说则稍微复杂一些,我们需要运行起一个真实的服务器,使用基于Selenium或者类似的自动化测试工具来在浏览器上对页面进行操作。又或者是在前后端分离的项目里,运行在一起一个仿造服务器,再运行起前端项目,最后用对页面进行测试。
为了方便与第六章上线使用的技术栈结合,我们将使用使用 Fabric 来构建我们的构建系统。
~~~此处离结束,还有十万八千字~~~
节选自:《全栈应用开发:精益实践》