← 返回目录

Web 应用的构建实战

第 49 / 119 卷日期:

包里会包含应用程序所需的所有二进制文件、数据和配置文件等等。

上传包。在完成打包后,我们就可以上传这个软件包了。

部署。最后,我们就可以在我们的线上环境中安装这个软件包。

Web 应用的构建实战

下面就让我们来构建一个简单的Web应用,来实践一下这个过程。在这里,我们要使用到的一个工具是 Gulp,当然对于 Grunt 也是类似的。

Gulp 入门指南

Gulp.js 是一个自动化构建工具,开发者可以使用它在项目开发过程中自动执行常见任务。Gulp.js 是基于 Node.js 构建的,利用 Node.js 流的威力,你

可以快速构建项目并减少频繁的 IO 操作。Gulp.js 源文件和你用来定义任务的 Gulp 文件都是通过 JavaScript(或者 CoffeeScript)源码来实现的。

  1. 全局安装 gulp:

$ npm install --global gulp

  1. 作为项目的开发依赖(devDependencies)安装:

$ npm install --save-dev gulp

  1. 在项目根目录下创建一个名为 gulpfile.js 的文件:

var gulp = require('gulp');

gulp.task('default', function() { // 将你的默认的任务代码放在这

});

  1. 运行 gulp:

$ gulp

默认的名为default的任务(task)将会被运行,在这里,这个任务并未做任何事情。

接下来,我们就可以打造我们的应用的构建系统了。

的常见错误,所以程序员们开发了一个被称作 lint 的配套项目用来扫描源文件,查找问题。

对应于不同的语言都会有不同的lint工具,在JavaScript中就有JSLint。JavaScript 是一门年轻、语法灵活多变且对格式要求相对松散的语言,因此这样的工具对于这门语

言来说比较重要。

2011 年,一个叫 Anton Kovalyov 的前端程序员借助开源社区的力量弄出来了 JSHint,其思想基本上和 JSLint 是一致的,但是其有一下几项优势:

  • 可配置规则,每个团队可以自己定义自己想要的代码规范。
  • 对社区非常友好,社区支持度高。
  • 可定制的结果报表。

下面就让我们来安装这个软件吧:

安装及使用

npm install jshint gulp-jshint --save-dev

示例代码:

var jshint = require('gulp-jshint');

var gulp= require('gulp');

gulp.task('lint', function() { return gulp.src('./lib/*.js')

.pipe(jshint())

.pipe(jshint.reporter('YOUR_REPORTER_HERE'));

});

自动化测试工具一般来说,自动测试应该从两部分考虑:

  • 单元测试
  • 功能测试

Mocha 是一个可以运行在 Node.js 和浏览器环境里的测试框架,

var mocha = require('gulp-mocha');

gulp.task('default', function () { return gulp.src('test.js', {read: false})

// gulp-mocha needs filepaths so you can't have any plugins before it .pipe(mocha({reporter: 'nyan'}));

});

编译对于静态型语言来说,编译是一个很重要的步骤。不过,对于动态语言来说也存在这样的工具。

动态语言的编译

可以说这类型的语言,是以我们常见的 JavaScript 为代表。

  1. CoffeeScript 是一套 JavaScript 的转译语言,并且它增强了 JavaScript 的简洁性

与可读性。

  1. Webpack 是一款模块加载器兼打包工具,它能把各种资源,例如 JS(含 JSX)、

coffee、样式(含 less/sass)、图片等都作为模块来使用和处理。

  1. Babel 是一个转换编译器,它能将 ES6 转换成可以在浏览器中运行的代码。

打包在 GNU/Linux 系统的软件包里通过包含了已压缩的软件文件集以及该软件的内容信息。常见的软件包有

  1. DEB。Debian 软件包格式,文件扩展名为.deb
  2. RPM(原Red Hat Package Manager,现在是一个递归缩写)。该软件包分为二进

制包(Binary)、源代码包(Source)和 Delta 包三种。二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译、安装。源代码包经常以src.rpm作

为后缀名。

  1. 压缩文档tar.gz。通常是该软件的源码,故而在安装的过程中需要编译、安装,并

且在编译时需要自己手动安装所需要依赖的软件。在软件仓库没有最新版本的软件时,tar.gz 往往是最好的选择。

由于这里的打包过程比较繁琐,就不介绍了。有兴趣的读者可以自己了解一下。

全站分卷索引 · 119 卷
  1. 1Growth: 全栈增长工程师指南
  2. 2软件开发的核心难题:沟通
  3. 3大公司的专家与小公司的全栈
  4. 4全栈工程师的未来:无栈
  5. 5基础知识篇
  6. 6工具只是辅助
  7. 7语言也是一种工具
  8. 8提高效率的工具
  9. 9IDE
  10. 10终端或命令提示符
  11. 11包管理
  12. 12环境搭建
  13. 13Windows
  14. 14GNU/Linux
  15. 15学好一门语言的艺术
  16. 16输出是最好的输入
  17. 17如何应用一门新的技术
  18. 18Web 编程基础
  19. 19从 HTML 到页面显示
  20. 20HTML
  21. 21中文?
  22. 22其他 HTML 标记
  23. 23小结
  24. 24CSS
  25. 25简介
  26. 26样式与目标
  27. 27更有趣的 CSS
  28. 28JavaScript
  29. 29JavaScriptFul
  30. 30面向对象
  31. 31其他
  32. 32前端与后台
  33. 33后台语言选择
  34. 34PHP
  35. 35Model
  36. 36View
  37. 37Controller
  38. 38后台即服务
  39. 39后台即服务
  40. 40数据库
  41. 41搜索引擎
  42. 42前端框架选择
  43. 43前台与后台交互
  44. 44JSON
  45. 45WebSocket
  46. 46编码过程
  47. 47Web 应用的构建系统
  48. 48Web 应用的构建过程
  49. 49Web 应用的构建实战
  50. 50Git 与版本控制
  51. 51Tasking
  52. 52Tasking 开发任务
  53. 53写代码只是在码字
  54. 54内置索引与外置引擎
  55. 55内置索引与外置引擎
  56. 56如何测试
  57. 57测试替身
  58. 58Mock
  59. 59测试先行
  60. 60可读的代码
  61. 61命名
  62. 62函数长度
  63. 63代码重构
  64. 64提炼函数
  65. 65内联函数
  66. 66查询取代临时变量
  67. 67重构到设计模式
  68. 68上线
  69. 69隔离硬件:虚拟机
  70. 70隔离操作系统:容器虚拟化
  71. 71隔离底层:Servlet 容器
  72. 72隔离依赖版本:虚拟环境
  73. 73隔离语言:DSL
  74. 74GNU/Linux
  75. 75HTTP 服务器
  76. 76数据库端缓存
  77. 77前端缓存
  78. 78运行机制
  79. 79自动化部署
  80. 80依赖与包仓库
  81. 81构建软件包
  82. 82数据分析
  83. 83想法-构建
  84. 84产品-衡量
  85. 85数据分析
  86. 86分析数据
  87. 87用户数据分析:Google Analytics
  88. 88流量获取
  89. 89移动应用
  90. 90网站性能
  91. 91SEO
  92. 92什么样的网站需要 SEO?
  93. 93内容
  94. 94UX 入门
  95. 95什么是简单?
  96. 96进阶
  97. 97认知设计
  98. 98持续交付
  99. 99持续集成系统
  100. 100持续交付
  101. 101持续部署
  102. 102持续阅读
  103. 103遗留系统与修改代码
  104. 104遗留代码
  105. 105修改遗留代码
  106. 106速度优化
  107. 107模块重构
  108. 108Retro
  109. 109三个维度
  110. 110架构模式
  111. 111预设计式架构
  112. 112演进式架构:拥抱变化
  113. 113意图导向
  114. 114重构
  115. 115模式与演进
  116. 116相关阅读资料
  117. 117架构解耦
  118. 118CQRS
  119. 119CQRS 结合微服务