前端工程化(工具)
前端组件化(生态)
npm
- NPM的全称是Node Package Manager,Nodejs的包管理器
- 从API对用户友好这一个角度来说,Node.js的模块机制是非常优秀的。
package.json
必备字段
- main指定了加载的入口文件,对于require,只需要main属性即可
- name : 包名,需要在NPM上是唯一的。不能带有空格。
- description : 包简介。通常会显示在一些列表中。
- version : 版本号。一个语义化的版本号(http://semver.org/ ),通常为x.y.z。该版本号十分重要,常常用于一些版本控制的场合。
- keywords : 关键字数组。用于NPM中的分类搜索。
- maintainers : 包维护者的数组。数组元素是一个包含name、email、web三个属性的JSON对象。
- contributors : 包贡献者的数组。第一个就是包的作者本人。在开源社区,如果提交的patch被merge进master分支的话,就应当加上这个贡献patch的人。格式包含name和email。
- bugs : 一个可以提交bug的URL地址。可以是邮件地址(mailto:mailxx@domain),也可以是网页地址(http://url)。
- licenses : 包所使用的许可证。
- repositories : 托管源代码的地址数组。
- dependencies : 当前包需要的依赖。这个属性十分重要,NPM会通过这个属性,帮你自动加载依赖的包。
额外字段
- bin : 指定各个内部命令对应的可执行文件的位置
- scripts : 包管理器(NPM)在对包进行安装或者卸载的时候需要进行一些编译或者清除的工作,scripts字段的对象指明了在进行操作时运行哪个文件,或者执行拿条命令。
- engines
- devDependencies : 指定项目开发所需要的模块
- author
- peerDependencies字段,就是用来供插件指定其所需要的主工具的版本。
- config字段用于向环境变量输出值
- browser指定该模板供浏览器使用的版本
- engines指明了该项目所需要的node.js版本
- man用来指定当前模块的man文档的位置
- style指定供浏览器使用时,样式文件所在的位置
dependencies & devDependencies format
- 指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
- 波浪号(tilde)+指定版本:比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。
- 插入号(caret)+指定版本:比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。
- latest:安装最新版本。
webpack
- webpack以一种非常优雅的方式解决了前端资源依赖管理的问题,它在内部已经集成了许多资源依赖处理的细节,但是对于使用者而言只需要做少量的配置,再结合构建工具,很容易搭建一套前端工程解决方案。
- 基于webpack的前端自动化工具,可以自由组合各种开源技术栈(Koa/Express/其他web框架、webpack、Sass/Less/Stylus、Gulp/Grunt等),没有复杂的资源依赖配置,工程结构也相对简单和灵活。
- 根据webpack的设计理念,所有资源都是“模块”,webpack内部实现了一套资源加载机制,除了借助插件体系加载不同类型的资源文件之外,webpack还对输出结果提供了非常精细的控制能力,开发者只需要根据需要调整参数即可
- test项表示匹配的资源类型,loader或loaders项表示用来加载这种类型的资源的loader
对于css文件,默认情况下webpack会把css content内嵌到js里边,运行时会使用style标签内联。如果希望将css使用link标签引入,可以使用ExtractTextPlugin插件进行提取。 - 图片资源的loader配置:意思是,图片资源在加载时先压缩,然后当内容size小于~10KB时,会自动转成base64的方式内嵌进去,这样可以减少一个HTTP的请求。当图片大于10KB时,则会在img/下生成压缩后的图片,命名是[hash:8].[name].[ext]的形式。hash:8的意思是取图片内容hushsum值的前8位,这样做能够保证引用的是图片资源的最新修改版本,保证浏览器端能够即时更新。
1 | { |
- 多个入口文件之间可能公用一个模块,可以使用CommonsChunkPlugin插件对指定的chunks进行公共模块的提取,下面代码示例演示提取所有入口文件公用的模块,将其独立打包:
1 | var chunks = Object.keys(entries); |
- webpack提供了强大的热更新支持,即HMR(hot module replace)。HMR简单说就是webpack启动一个本地webserver(webpack-dev-server),负责处理由webpack生成的静态资源请求。注意webpack-dev-server是把所有资源存储在内存的,所以你会发现在本地没有生成对应的chunk访问却正常。
ref
ES6
ECMAScript 6, ECMAScript 2015
- 受欢迎的语法糖,例如箭头函数(arrow functions)和简单的字符串插值(string interpolation)
- 代理(proxies)和生成器(generators)
Responsive Web design
- 灵活的基于网格的布局:在移动设备上查看页面时,如果设备的朝向从横向改为竖向时,页面布局会自动地调整并在新布局中展开内容进行显示,这就是灵活的基于网格的布局。在Twitter Bootstrap中,可以使用如下的CSS标签(tag)来实现:
- 灵活的图像:动态调整图像的尺寸
- Media Queries(媒介查询):这个是CSS3的特性,该特性可以通过查询媒介设备将适当的CSS返回给浏览器。Media queries are at the heart of a recent design trend called responsive web design.
Glosarry
- MVVM (Model-View-ViewModel)
- SPA (single-page-application)
- Responsive Web design