一、使用新语言来开发项目
通常峩们需要将采用ES6编写的代码转换成目前已经支持良好的ES5代码包含如下:
- 为新的API注入polyfill,例如使用新的fetch API时在注入对应的polyfill后才能让低端浏览器囸常运行
-
Babel() 可以方便地完成以上两件事。Babel是一个JavaScript编译器能将ES6代码转为ES5代码转为ES5代码,让我们使用最新的语言特性而不用担心兼容性问题并且可以通过插件机制根据需求灵活地扩展。在Babel执行编译的过程中会从项目根目录下的 .babelrc 文件中读取配置。 .babelrc是一个JSON格式文件内容大致洳下:
extent语法时会在转换后的ES5代码里注入_extent
辅助函数用于实现继承:
-
在了解Babel后,下一步就需要知道如何在Webpack中使用它由于Babel所做的事情是转换代碼,所以应该通过Loader去接入BabelWebpack的配置如下:
以上配置命中了项目目录下的所有JavaScript文件,并通过babel-loader调用Babel完成转换工作在重新执行构建前,需要先咹装新引入的依赖:
TypeScript是JavaScript的一个超集主要提供了类型检查系统和对ES6语法的支持,但不支持新的API目前没有任何环境支持运行原生的TypeScript代码,必须通过构建将它转换成JavaScript代码后才能运行
// 为show函数增加类型检查
TypeScript官方提供了能将TypeScript转换成JavaScript的编译器。我们需要在当前项目的根目录下新建一個用于配置编译选项的tsconfig.json文件编译器默认会读取和使用这个文件,配置文件的内容大致如下:
TypeScript编译器会有与3.1节中Babel同样的问题:在将ES6语法转換成ES5语法时需要注入辅助函数为了不让同样的辅助函数重复出现在多个文件中,可以开启TypeScript编译器的importHelpers选项需要修改tsconfig.json文件如下:
这会导致編译出的代码依赖tslib这个迷你库,但避免了代码冗余
- Webpack在寻找模块对应的文件时需要尝试ts后缀。
相关的Webpack配置如下:
在运行构建前需要安装上媔用到的依赖:
Flow是Facebook开源的一个JavaScript静态类型检查器它是JavaScript语言的超集。我们所需要做的就是在需要的地方加上类型检查例如在两个由不同的囚开发的模块对接的接口处加上静态类型检查,就能在编译阶段指出部分模块使用不当的问题同时,Flow能通过类型推断检查出在JavaScript代码中潜茬的Bug
Flow的使用效果如下: 需要注意的是,该段代码的第一行//@flow告诉Flow检查器这个文件需要被检查 以上只是让我们了解Flow的功能,下面讲解如何運行Flow来检查代码Flow检测器由高性能且跨平台的OCaml()语言编写,它的可执行文件可以通过npm i -D flow-bin
安装安装完成后可先配置Npm Script: 再通过npm
run flow
去调用Flow执行代碼检查。
除此之外我们还可以通过npm i -g flow-bin
将Flow安装到全局,再直接通过flow命令执行代码检查
安装成功后,在项目根目录下执行Flow Flow会遍历出所有需偠检查的文件并对其进行检查,输出错误结果到控制台例如: 采用了Flow静态类型语法的JavaScript,是无法直接在目前已有的JavaScript引擎中运行的要让代碼可以运行,需要将这些静态类型的语法去掉例如: // 去掉静态类型语法后输出代码 有两种方式可以做到这一点。
由于使用了Flow项目一般都會使用ES6语法所以将Flow集成到使用Webpack构建的项目里的最方便方法是借助Babel。下面修改3.1节中的代码为其加入Flow代码检查,改动如下
"presets": [ ...[], "flow" ]
向源码里加入靜态类型后重新构建项目,我们会发现采用了Flow的源码还是能在浏览器中正常运行的
要明确构建的目的只是去除源码中的Flow静态类型语法,洏代码检查和构建无关许多编辑器已经整合了Flow,可以实时在代码中高亮显示Flow检查出的问题
SCSS()可以让我们用更灵活的方式写CSS。它是一种CSS预處理器语法和CSS相似,但加入了变量、逻辑等编程元素代码类似这样: SCSS又叫作SASS,区别在于SASS语法类似于Ruby而SCSS语法类似于CSS,熟悉CSS的前端工程師会更喜欢SCSS
采用SCSS去写CSS的好处在于,可以方便的管理代码抽离公共的部分,通过逻辑写出更灵活的代码和SCSS类似的CSS预处理器还有LESS()等。
使鼡SCSS可以提升编码的效率但是必须将SCSS源代码编译成可以直接在浏览器环境下运行的CSS代码。SCSS官方提供了以多种语言实现的编译器由于本书哽倾向于前端工程师使用的技术栈,所以主要介绍node-sass()
node-sass的核心模块是用C++编写的,再用Node.js封装了一层以提供给其他Node.js调用。node-sass还支持通过命令进行調用先将它安装到全局: 就能在源码同目录下看到编译后的main.css文件。 以上配置通过正则/.scss/匹配所有以.scss为后缀的SCSS文件再分别使用3个Loader去处理。具体处理流程如下
由于接入sass-loader,所以项目需要安装这些新的依赖:
本文为学习笔记:来源《深入浅出Webpack》
}
这节课以 SCSS 为例讲解如何在webpack
中编譯这种 CSS 预处理语言,并配合CSS
的 LOADER 来进行组合处理一些更复杂的应用,请翻看《webpack
处理 CSS》这篇文章
为了方便叙述,这次代码目录的样式文件呮有一个scss
文件以帮助我们了解核心 LOADER 的使用。
下图展示了这次的目录代码结构:
首先在入口文件app.js
中引入我们的 scss 样式文件:
因为 scss 是 css 预处理語言,所以我们要检查下打包后的结果打开控制台,如下图所示:
同时对于其他的 css 预处理语言,处理方式一样首先应该编译成 css,然後交给 css 的相关 loader 进行处理
}