前端工程化
前言
前端工程化必须要了解的东西有:
- (1)JavaScript背后的规范,学习ES2015/2016
- (2)学习Node.js基础。
- (3)学会使用和配置babel。
- (4)学习webpack,掌握搭配使用babel。
目前分一步一步来学习。前端的生态系统太庞大了,新的规范和特性、新的框架、各种技术方案层出不穷。不具备很强的学习能力根本hold不住的。
JavaScript规范。
2015年6月,ECMAScript 6正式发布,并且更名为“ECMAScript 2015”,简称ES6。这是因为TC39委员会计划,以后每年发布一个ECMAScirpt的版本,下一个版本在2016年发布,为“ECMAScript 2016”。参考JavaScript语言的历史
ES2015/2016的学习是一个累积的过程,不断需要通过编程去提高,之后会在github上给一些自己学习的DEMO。
- let & const
- destructuring 解构赋值
- Proxies
- Promises 对象
- Symbols
- arrows
- classes
- enhanced object literals
- template strings
- default & rest & spread
- iterators & for..of
- generator 构造器
- unicode
- modules
- module loaders
- map & set & weakmap + weakset
- subclassable built-ins
- math & number & string & array & objectAPIs
- binary & octal Literals
- reflect api
- tail calls
Node.js学习
[null]
Babel使用及配置
Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行。也就是说你现在可以使用ES6语法编写代码而不需要担心执行环境是否支持。
在升级到了Babel6.x之后,所有的插件都是可插拔的。这也意味着你安装了Babel之后,是不能工作的,需要配置对应的.babelrc文件才能发挥完整的作用。下面就参考Git上的中文翻译。对.babelrc做一个简单解析。
.babelrc文件的基本格式如下:
{
"presets": [],
"plugins": []
}
尽管也可以用其他方式给 Babel 传递选项,但 .babelrc 文件是约定也是最好的方式。
预设(presets)
presets字段设定转码规则,官方提供以下的规则集,你可以根据需要安装。
# ES2015转码规则
$ npm install --save-dev babel-preset-es2015
# react转码规则
$ npm install --save-dev babel-preset-react
# ES7不同阶段语法提案的转码规则(共有4个阶段),选装一个
$ npm install --save-dev babel-preset-stage-0
$ npm install --save-dev babel-preset-stage-1
$ npm install --save-dev babel-preset-stage-2
$ npm install --save-dev babel-preset-stage-3
然后将这些规则安装需要加入.babelrc文件中
{
"presets": [
"es2015",
"react",
"stage-2"
],
"plugins": []
}
env
{
"presets": ["env", options]
}
env是最近新增的一个选项,有以下options选择。
targets:{[string]:number},默认{} 需要支持的环境,可选例如:chrome, edge, firefox, safari, ie, ios, node,甚至可以制定版本,如node: 6.5。也使用node: current代表使用当前的版本。
browsers: Array | string,默认[] 浏览器列表,使用的是browserslist,可选例如:last 2 versions, > 5%。
loose: boolean,默认false 是否使用宽松模式,如果设置为true,plugins里的插件如果允许,都会采用宽松模式。
debug: boolean,默认false 编译是否会去掉console.log。
whitelist: Array,默认[] 设置一直引入的plugins列表。
插件(plugins)
其实presets,也就是一堆plugins的预设,起到方便的作用。如果你不采用presets,完全可以单独引入某个功能,比如以下的设置就会引入编译箭头函数的功能。
{
"plugins": ["transform-es2015-arrow-functions"]
}
那么,还有一些方法是presets中不提供的,这时候就需要单独引入了,下面介绍几个常见的插件。
1、transform-runtime
{
"plugins": ["transform-runtime", options]
}
特点:解决编译中产生的重复的工具函数,减小代码体积;非实例方法的poly-fill,如Object.assign,但是实例方法不支持,如”foobar”.includes(“foo”),这时候需要单独引入babel-polyfill
2、transform-remove-console
{
"plugins":["transform-remove-console"]
}
使用这个插件,编译后的代码都会移除console.*。
Webpack学习
为什么要使用Webpack
我的这个只要理解webpack的核心就可以——[一切皆模块]。webpack就是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其他浏览器不能直接运行的扩展语言(Scss,TypeScript等),并将其转换和打包为浏览器可理解的格式。
通过配置文件来使用webpack
webpack拥有很多比较高级的功能(比如说本文后面会介绍的loaders 和 plugins),这些功能都可以通过命令行模式实现,但是这样不方便且容易出错,更好的办法是定义一个配置文件webpack.config.js,这个配置文件其实也是一个简单的JavaScript模块,将配置文件其置于跟目录下。
我们可以把所有与打包相关的信息放在里面。
module.exports = {
entry: __dirname + "/app/main.js",//已多次提及的唯一入口文件
output: {
path: __dirname + "/public",//打包后的文件存放的地方
filename: "bundle.js"//打包后输出文件的文件名
}
}
注:“__dirname”是node.js中的一个全局变量,它指向当前执行脚本所在的目录。
有了这个配置之后,再打包文件,只需在终端里运行webpack(非全局安装需使用node_modules.bin\webpack)命令就可以了,这条命令会自动引用webpack.config.js文件中的配置选项。
参考官网