babel

前端精准测试探索:覆盖率实时统计工具

戏子无情 提交于 2019-11-30 09:37:50
背景 随着业务增长, 随之而来的前端需求激增, 如何在有限的时间内保证前端代码的质量. 通过测试同学单方面的保障, 还是免不了前端线上问题, 存在回归不到位或者测试遗漏的地方, 同时测试质量的高低没有客观数据可量化.<br> 通过单测方法补充, 可以提前发现一部分问题, 减少问题解决的成本, 但是由于业务形态的原因, 需求变更频繁, 功能迭代快, 补充和维护单测的成本比较高, 在业务方的大部分前端工程中暂时没有单测方法, 因此开发在自测时, 感知比较薄弱, 无量化数据, 在项目提测前也没有统一指标可以把关, 测试对开发的自测状况也不了解;<br> 同时前端缺少像jacoco这样的集成测试覆盖率统计框架, 无法通过集成测试收集覆盖率, 对于测试阶段的质量仍然没有数据量化 结合上面说的几点, 我们提出了前端集成测试覆盖率统计工具的需要, 以此来提升开发自测质量以及项目提测质量, 同时帮助补充回归不到位或测试遗漏的场景, 提升上线质量. 技术选型 首先, 覆盖率收集的前提, 需要完成代码插桩工作, 插桩方法来自于两个开源覆盖率统计框架, istanbul.js以及istanbul-middleware (以下称im) , 提供了若干个插桩方法, 而im其实也是在istanbul.js的基础上做了封装, 能力来自于istanbul-lib-instrument 所有的插桩方法,

面试官: 聊一聊Babel

为君一笑 提交于 2019-11-30 09:35:00
点击关注本 公众号 获取文档最新更新,并可以领取配套于本指南的 《前端面试手册》 以及 最标准的简历模板 . 前言 Babel 是现代 JavaScript 语法转换器,几乎在任何现代前端项目中都能看到他的身影,其背后的原理对于大部分开发者还属于黑盒,不过 Babel 作为一个工具真的有了解背后原理的必要吗? 如果只是 Babel 可能真没有必要,问题是其背后的原理在我们开发中应用过于广泛了,包括不限于: eslint jshint stylelint css-in-js prettier jsx vue-template uglify-js postcss less 等等等等,从模板到代码检测,从混淆压缩到代码转换,甚至编辑器的代码高亮都与之息息相关. 如果有兴趣就可以搞一些黑魔法: 前端工程师可以用编译原理做什么? 前置 Babel 大概分为三大部分: 解析: 将代码(其实就是字符串)转换成 AST( 抽象语法树) 转换: 访问 AST 的节点进行变换操作生成新的 AST 生成: 以新的 AST 为基础生成代码 我们主要通过打造一个微型 babel 来了解 babel 的基本原理,这个微型 babel 的功能很单一也很鸡肋,但是依然有400行代码,其实现细节与 babel 并不相同,因为我们省去了很多额外的验证和信息解析,因为单单一个兼容现代 JavaScript 语法的

面试官: 聊一聊Babel

你。 提交于 2019-11-30 09:34:09
点击关注本 公众号 获取文档最新更新,并可以领取配套于本指南的 《前端面试手册》 以及 最标准的简历模板 . 前言 Babel 是现代 JavaScript 语法转换器,几乎在任何现代前端项目中都能看到他的身影,其背后的原理对于大部分开发者还属于黑盒,不过 Babel 作为一个工具真的有了解背后原理的必要吗? 如果只是 Babel 可能真没有必要,问题是其背后的原理在我们开发中应用过于广泛了,包括不限于: eslint jshint stylelint css-in-js prettier jsx vue-template uglify-js postcss less 等等等等,从模板到代码检测,从混淆压缩到代码转换,甚至编辑器的代码高亮都与之息息相关. 如果有兴趣就可以搞一些黑魔法: 前端工程师可以用编译原理做什么? 前置 Babel 大概分为三大部分: 解析: 将代码(其实就是字符串)转换成 AST( 抽象语法树) 转换: 访问 AST 的节点进行变换操作生成新的 AST 生成: 以新的 AST 为基础生成代码 我们主要通过打造一个微型 babel 来了解 babel 的基本原理,这个微型 babel 的功能很单一也很鸡肋,但是依然有400行代码,其实现细节与 babel 并不相同,因为我们省去了很多额外的验证和信息解析,因为单单一个兼容现代 JavaScript 语法的

一个后端er想进前端娱乐圈

☆樱花仙子☆ 提交于 2019-11-30 08:37:10
经过几天的折腾,总算是略微明白前端娱乐圈的一堆工具。 模块化 为什么要折腾这些? 因为我想用js的模块化,不想再jquery一把梭。 第一个想到的是typescript,过了一遍文档,把现有项目的部分功能用ts改写后没问题,学习内容包括: 了解Node.js,会用其运行脚本; 了解包管理工具npm,据~说yarn更好,遂采用后者,会用其安装、卸载包; 学习typescript语法,并改写现有项目的几个函数。 随后准备编译,合并进项目master,接下来问题来了,浏览器不能运行。 报错信息为: exports is not defined ,这个信息让我走上了瞎折腾的道路。 规范 得知现代浏览器不支持 exports 关键词,那 exports 又是什么?它是 CommonJs 中的一个语法,我想起ts配置文件中有个编译选项就是 "module": "commonjs" 。 这个 CommonJs 又是什么?它是一种规范,就是希望大家都能按这个标准来,同类规范还有: AMD (Asynchronous Module Definition) CMD (Common Module Definition) ES6 (ECMAScript 6) 这里引用 《前端模块化详解(完整版)》 中的一张图,关于模块化的发展进程和相关介绍,大家可以看看这篇文章,写的很好。 转换器

3月前端知识集锦

[亡魂溺海] 提交于 2019-11-30 08:14:26
目前自己组建的一个团队正在写一份面试图谱,将会在七月中旬开源。内容十分丰富,第一版会开源前端方面知识和程序员必备知识,后期会逐步写入后端方面知识。因为工程所涉及内容太多(目前已经写了一个半月),并且还需翻译成英文,所以所需时间较长。有兴趣的同学可以 Follow 我的 Github 得到最快的更新消息。 JS 相关 深入理解javascript原型和闭包 Event Loop 必知必会(六道题) 网络现状:性能提升指南 【网络协议】Web协议未来优化指南 不要混淆nodejs和浏览器中的event loop JavaScript ES7 Function Bind Syntax 前端回忆录 promise规范实现 Babel 手册 JavaScript练习网站收集 WebViewJavascriptBridge原理解析 一道让我懵逼的Promise执行顺序的题目 字面量创建对象和 new Object 创建对象性能差别 CSS 30 Seconds of CSS 怎么画一条0.5px的边 CSS 属性相关 CSS 自定义属性 — 基础篇 CSS 自定义属性 :使用篇 CSS 自定义属性:API 化 React React源码解析(一):组件的实现与挂载 React源码解析(二):组件的类型与生命周期 React源码解析(三):详解事务与更新队列 React源码解析(四):事件系统

Babel

杀马特。学长 韩版系。学妹 提交于 2019-11-30 07:46:14
  Babel是一个ES6转码器,可以让你在现有的环境下写代码,而又不用担心环境是否支持。   Babel的配置文件是.babelrc,存放在项目的根目录下。 { "presets": [ "@babel/preset-env" ], "plugins":[] }   @babel/cli:命令行转码工具.。   @babel/core:使用babel api时调用。*   @babel/node:命令行执行工具/   @babel/register:改写require命令,每当使用require加载.js,.jsx等文件时,都会先使用babel转码(实时转码,适合开发环境)。   @babel/polyfill:为新API环境提供垫片。 *       来源: https://www.cnblogs.com/lh-zq/p/11573128.html

入门React到React Native APP

不打扰是莪最后的温柔 提交于 2019-11-30 07:05:47
入门级 ( Mac) 一、React开发工程化( 使用 Webpack 4 和 Babel 7 从头开始创建 React 应用程序) 配置 Webpack 配置 React 和 Babel 配置 webpack-dev-server 配置 CSS 配置 Webpack 1.创建一个新项目并进入: mkdir react_project && cd react_project 2.创建 package.json 文件 npm init -y 3.安装 webpack 和 webpack-cli 作为 dev 依赖项 npm i webpack@4 webpack-cli@3 -D i:install -D:- save-dev 注:在 webpack 3 中,webpack 和它的 CLI 都是在同一个包中,但在第4版中,他们已经将两者分开来更好地管理它们。所以安装时,最好是 webpack 和 webpack-cli 同时安装 4.更新 package.json 文件 { "name": "react_project", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "webpack --mode development", "build": "webpack -

ES6/Babel Class constructor cannot be invoked without 'new'

99封情书 提交于 2019-11-30 05:10:01
问题 I'm trying to create a custom Quill theme, extending the bubble one. I'm facing a strange ES6 inheritance problem, where it seems I cannot call super() in my constructor. Here is my code: import BubbleTheme, { BubbleTooltip } from 'quill/themes/bubble' class LoopTheme extends BubbleTheme { constructor (quill, options) { super(quill, options) } extendToolbar (toolbar) { super.extendToolbar(toolbar) this.tooltip = new LoopTooltip(this.quill, this.options.bounds); this.tooltip.root.appendChild

常用的webpack优化方法

北战南征 提交于 2019-11-30 04:39:02
1. 前言 关于 webpack ,相信现在的前端开发人员一定不会陌生,因为它已经成为前端开发人员必不可少的一项技能,它的官方介绍如下: webpack 是一个模块打包器。webpack的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使用,但它也能够胜任转换(transform)、打包(bundle)或包裹(package)任何资源(resource or asset)。 在日常开发工作中,我们除了会使用 webpack 以及会编写它的配置文件之外,我们还需要了解一些关于 webpack 性能优化的方法,这样在实际工作就能够如虎添翼,增强自身的竞争力。 关于 webpack 优化的方法我将其分为两大类,如下: 可以提高 webpack 打包速度,减少打包时间的优化方法 可以让 Webpack 打出来的包体积更小的优化方法 OK,废话不多说,接下来我们就来分别了解一下优化方法。 2. 提高 Webpack 打包速度 2.1 优化Loader搜索范围 对于 Loader 来说,影响打包效率首当其冲必属 Babel 了。因为 Babel 会将代码转为字符串生成 AST ,然后对 AST 继续进行转变最后再生成新的代码,项目越大, 转换代码越多,效率就越低 。当然了,我们是有办法优化的。 首先我们可以 优化 Loader 的文件搜索范围 ,在使用

weboack 入门二

谁说我不能喝 提交于 2019-11-30 01:17:13
Webpack中必须掌握的配置 loader主要用于把模块原内容按照需求转换成新内容,可以加载非 JS 模块! 通过使用不同的Loader,Webpack可以把不同的文件都转成JS文件,比如CSS、ES6/7、JSX等。 我们来看看这些我们必须掌握的loader! 1.loader的编写 1.1 loader的使用 test:匹配处理文件的扩展名的正则表达式 use:loader名称,就是你要使用模块的名称 include/exclude:手动指定必须处理的文件夹或屏蔽不需要处理的文件夹 options:为loaders提供额外的设置选项 默认 loader 的顺序是 从下到上 、 从右向左 执行,当然执行顺序也可以手动定义的,接下来我们依次介绍常见的loader,来感受 loader 的魅力! 我们基于这个基础配置来继续编写: const path = require("path"); const dev = require("./webpack.dev"); const prod = require("./webpack.prod"); const merge = require("webpack-merge"); const HtmlWebpackPlugin = require("html-webpack-plugin"); const {