
由于 Babel,WebPack, React 技术的流行, 小明同学已经开始在前端代码里面用上了 ECMAScript 2015 (以下称 ES6 ) 的众多特性。import, export, class, arrow function, let const 等等关键词甚至都已经开始变成小明的肌肉记忆。
但是等等,对于小明这样既写 React 又写 Node.js 的的人来说,又有点分裂了。经常性的在 Node.js 里面写 import xxx from 'xxx'; 然后被 Node.js 的解析器无情的拒绝;
另外对于一致性有点追求的人肯定受不了同一个仓库, 同一类脚本, 同一个人维护却有两种风格。

恩, 不能忍!
Node.js 对 ES6 的支持
其实 Node.js 对 ES6 的很多特性都已经开始支持了。 在 Node.js 使用的 JS 引擎 V8 里面将不同状态 ES6 特性分成了 3 个等级:
shipping (已经分发并默认开启的特性)
staged (已经分发, 但需要使用 –harmony 参数开启的特性)
in progress (开发中, 还不稳定或者未实现的特性, 不推荐使用)
『shipping』 已经开启的 ES6 特性
本文使用的 Node.js 版本号:
稳定版本:4.2.4
对应 V8 引擎的版本:4.5.103.35
最新版本:5.3.0
对应 V8 引擎版本:4.6.85.31
目前默认开启的 ES6 特性如下:
Block scoping
let (strict mode only)
const
function-in-blocks (strict mode only [1])
Classes (strict mode only)
Collections
Map
WeakMap
Set
WeakSet
Typed arrays
Generators
Binary and Octal literals
Object literal extensions (shorthand properties and methods)
Promises
New String methods
Symbols
Template strings
Arrow Functions
new.target [2]
Object.assign
Spread operator [2]
对于这些官方引擎的特性,由于在底层实现,在性能与稳定性都有更高保障,在任何时候我们都应该优先使用。
『staged』 需要使用 --harmony 参数开启的 ES6 特性
Symbol.toStringTag
Array.prototype.includes (可以直接使用 polyfill 支持, 5.x 版本)
Rest Parameters (可以直接用 transform-es2015-parameters 转换,支持更全面, 5.x 版本)
『in progress』 开发中的 ES 特性
--harmony_modules (enable "harmony modules") |
『in progress』特性是那些将要支持(但具体时间未知)的特性。
开启模块的 ES6 模式
Babel 是一个插件式的 JavaScript 编译器, 能将一些当前 JS 引擎中不支持的特性和语法, 通过一个个特定插件,转换成当前引擎可以理解的 JS 脚本。 我们可以使用 Babel 来转换我们的 Node.js 脚本。
接下来, 我们就可以去 Babel 插件列表去选择对应的转换插件来为我们的 Node.js 插上隐形的翅膀了。
首先, 我们需要确认我们需要 Babel 添加哪些特性支持。
选择 ES 转换的原则
优先使用原生特性
优先选择那些稳定实现的特性。 由于一些 ES 特性需要引擎的底层支持才能完美支持, 通过代码转换可能很难完美支持, 对于这种特性只能不用或少用
基于这个原则, 小明筛选出如下插件。
transform-strict-mode (由于很多 ES 特性需要 严格模式才能打开, 添加这个插件就会自动在所有文件上添加
'use strict';)transform-es2015-modules-commonjs (将 ES6 模块标准 转换成 Node.js 用的 CMD 模块标准)
transform-es2015-spread (支持 ES6 的 spread 操作符)
transform-es2015-destructuring (支持 赋值解构)
transform-es2015-parameters (支持默认参数, 参数解构, 以及其他参数)
转换示例: import
from
import Mod from './mod'; |
to
; |
转换示例: export
from:
export default class Mod { |
to:
; |
上面这些选择的插件可以根据个人口味以及 Node.js 版本 进行添加或删除。选好模块, 我们就可以安装插件以及创建对应得babel配置文件去处理
-
vue ant design中关于给select设置初始默认值的问题(initialValue无效、用defaultValue则报`defaultValue` is invalid错误)(已解决)
当我们在用vue ant design给select设置默认值时,如果采用v-decorator的方式去注册控件,且要对表单内容进行校验,那么这个时候无论是如下边错误1一样使用defaultValue=“2”这样来设置默认值,还是如同错误2一样使用initialValue: 2来进行设置,还是如同错误3一样使用:value="2"这样设置了值却无法注册typeId,都会设置无效或者报错等等,这个时候,如果采用setFieldsValue来对其进行赋值,就可以完好的解决该问题了。
-
修改laravel分页的样式
首先获取到数据,paginate方法 能够自动判定当前页面正确的数量限制和偏移数。默认情况下,当前页数由HTTP 请求所带的 ?page 参数来决定。当然,该值由 Laravel 自动检测,并自动插入由分页器生成的链接。
-
修改larave分页地址,不带分号,seo
Laravel 中通过自定义分页器分页方法实现伪静态分页链接以利于 SEO
-
php 数组分页 array_slice()函数用法
今天用到一个函数,非常好用,分享给大家 array_slice() -从数组中取出一段 也就是说用这个函数可以和sql语句一样实现分页,原理是将查询出的数组,取出从指定下标开始到指定长度的数组
-
router-link传递参数,query
在vue-router中,有两大对象被挂载到了实例this; $route(只读、具备信息的对象); $router(具备功能的函数) 查询字符串: 去哪里 ? <router-link :to="{name:'detail',query:{id:1}}"> xxx </router-link>
-
Project Setup:reading from cache
Project Setup:reading from cache
-
vue provide/inject详解和用法
父子组件交互方式多种,props、vuex、 、 emit、localStorage还有就是这个provide/inject了。它适合层级比较深的组件,比如子,子孙,子孙后代的组件有好几个用到父组件的某个属性,就可以用到这个provide/inject,它可以避免写大量繁琐的传值代码 我这里为什么要使用它? 我一个知识库详情父组件中包含了大量的子组件,每个子组件都需要父组件的知识库ID,这时候我不想写大量props,就用到provide/inject进行传值了
-
A cookie associated with a cross-site resource at <URL> was set without the `SameSite`
非 SSL 、没域名、跨站点、IE 浏览器如何做 Cookie 共享。
-
Vue实现生成二维码并且能下载到本地
个人推荐vue-qr,好用,还能下载二维码
-
使用Vue的插件clipboard使用复制功能
使用Vue的插件clipboard使用复制功能
-
vue ant design中关于给select设置初始默认值的问题(initialValue无效、用defaultValue则报`defaultValue` is invalid错误)(已解决)
当我们在用vue ant design给select设置默认值时,如果采用v-decorator的方式去注册控件,且要对表单内容进行校验,那么这个时候无论是如下边错误1一样使用defaultValue=“2”这样来设置默认值,还是如同错误2一样使用initialValue: 2来进行设置,还是如同错误3一样使用:value="2"这样设置了值却无法注册typeId,都会设置无效或者报错等等,这个时候,如果采用setFieldsValue来对其进行赋值,就可以完好的解决该问题了。
-
修改laravel分页的样式
首先获取到数据,paginate方法 能够自动判定当前页面正确的数量限制和偏移数。默认情况下,当前页数由HTTP 请求所带的 ?page 参数来决定。当然,该值由 Laravel 自动检测,并自动插入由分页器生成的链接。
-
修改larave分页地址,不带分号,seo
Laravel 中通过自定义分页器分页方法实现伪静态分页链接以利于 SEO
-
php 数组分页 array_slice()函数用法
今天用到一个函数,非常好用,分享给大家 array_slice() -从数组中取出一段 也就是说用这个函数可以和sql语句一样实现分页,原理是将查询出的数组,取出从指定下标开始到指定长度的数组
-
router-link传递参数,query
在vue-router中,有两大对象被挂载到了实例this; $route(只读、具备信息的对象); $router(具备功能的函数) 查询字符串: 去哪里 ? <router-link :to="{name:'detail',query:{id:1}}"> xxx </router-link>
-
Project Setup:reading from cache
Project Setup:reading from cache
-
vue provide/inject详解和用法
父子组件交互方式多种,props、vuex、 、 emit、localStorage还有就是这个provide/inject了。它适合层级比较深的组件,比如子,子孙,子孙后代的组件有好几个用到父组件的某个属性,就可以用到这个provide/inject,它可以避免写大量繁琐的传值代码 我这里为什么要使用它? 我一个知识库详情父组件中包含了大量的子组件,每个子组件都需要父组件的知识库ID,这时候我不想写大量props,就用到provide/inject进行传值了
-
A cookie associated with a cross-site resource at <URL> was set without the `SameSite`
非 SSL 、没域名、跨站点、IE 浏览器如何做 Cookie 共享。
-
Vue实现生成二维码并且能下载到本地
个人推荐vue-qr,好用,还能下载二维码
-
使用Vue的插件clipboard使用复制功能
使用Vue的插件clipboard使用复制功能