先看一个例子
//class 关键字,是es6中提供的新语法,是用来实现es6 中面向对象编程的方式
//Java C# 实现面向对象的方式完全一样了, class是从后端语言借鉴过来的, 来实现面向对象
//
class Person {
//使用static关键字,可以定义静态属性
//所谓的静态属性,就是可以通过类名直接访问的属性 如:Person.info
//实例属性,只能通过类的实例,来访问的属性
static info = {name:'hehe', age:20}
}
console.log(Person.info)
/*
//var p1 = new Person()
function Animal(name){
this.name = name
}
Animal.info = 123
var a1 = new Animal('小花')
//这是静态属性
console.log(Animal.info)
//这是实例属性
console.log(a1.name)
*/
webpack运行上面的代码之后会报错
原因如下:
在webpack中,默认只能处理一部分es6的新语法,一些更高级的es6语法或es7语法,webpack是处理不了的,这时候,就需要借助于第三方的loader,来帮助webpack处理这些高级的语法,当第三方loader把高级语法转为低级语法之后,会把结果交给webpack去打包到bundle.js中
解决如下:
通过babel,可以将高级语法转为低级语法
step1:在webpack中可以运行如下两套命令,安装两套包,去安装babel相关的loader功能
//第一套包 负责转换
cnpm i babel-core babel-loader babel-plugin-transform-runtime -D
//第二套包 语法插件 负责把es6转为对应的es3
cnpm i babel-preset-env babel-preset-stage-0 -D
step2:打开webpack的配置文件,在module节点下的 rules数组中,添加一个新的匹配规则
//exclude排除node_modules
{test:'/\.js$/',use:'babel-loader',exclude:'/node_modules/'}
注意:如果不用exclude排除node_modules,则babel会把node_modules中所有的第三方js文件打包编译,这样非常消耗cpu,打包速度非常慢 哪怕babel把node_modules中所有的js都编译打包完毕,项目也不能运行
step3:在项目的根目录中,新建一个叫做 .babelrc 的babel配置文件,这个配置文件,属于JSON格式,所以,在写 .babelrc 配置的时候,必须符合JSON语法规范:不能写注释,字符串必须使用双引号
{
"presets": ["env","stage-0"]
"plugins": ["transform-runtime"],
}
preset是语法的意思,里面放语法
plugins是插件的意思,里面放插件
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"stage-2"
],
"plugins": ["transform-vue-jsx", "transform-runtime"],
"env": {
"test": {
"presets": ["env", "stage-2"],
"plugins": ["transform-vue-jsx", "transform-es2015-modules-commonjs", "dynamic-
import-node"]
}
}
}