0%

重学前端1:webpack和ES6

1:Node.js

1.1:安装node.js

https://nodejs.org/zh-cn/
尽量选择LTS(长期维护版本),免安装的二进制文件包。
image.png

现在的node.js已经自带npm包管理器了。

1.2:模块化编程

导出exports:

1
2
3
exports.add = function(a,b){
return a+b;
}

导入require:

1
2
var logic = require('./logic')
var c = logic.add(100,200);

2:webpack

2.1:安装webpack

https://webpack.docschina.org/

安装指令:
npm install webpack -g
npm install webpack-cli -g
查看指令:
webpack -v

2.2:webpack指令(JS打包)

将多个js导包成一个,编写一个配置js文件,文件名为:webpack.config.js

请注意层级关系,该文件和src目录同级

1
2
3
4
5
6
7
8
9
var path = require('path');

module.exports = {
entry: './src/main.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
},
};

我们在配置文件同级目录下使用指令:webpack
然后他会生成目标文件:/dist/bundle.js

2.3:打包CSS文件

安装:
npm install style-loader css-loader –save-dev

随意编写一个css,例如:

1
2
3
body{
background-color: pink;
}

在main.js中导入此css文件:

1
require('./css/my.css')

在配置文件webpack.config.js中加入下面代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var path = require('path');

module.exports = {
entry: './src/main.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
},
module:{
rules:[
{
test: /\.css$/,
use:['style-loader','css-loader']
}
]
}
};

最后,再次执行指令:webpack

3:ES6

3.1:ES6语法下的导入和导出

导出:

1
2
3
4
5
var fn0 = function(){
console.log("fn0...");
}
// ES6语法导出
export{fn0}

导入:

1
2
3
import {fn0} from './lib';

fn0();

但是直接运行会报错,随意我们需要加入babel。

3.2: 安装 babel

1)安装babel支持
npm install babel-preset-es2015 –save-dev
2)babel客户端全局安装
npm install babel-cli -g

3.3:编写配置文件.babelrc

1
2
3
{
'presets':['es2015']
}

3.4:执行babel

babel-node demo.js

3.5:其他语法

3.5.1:函数作用域 let const
1
2
3
4
5
6
7
8
9
10
// 用let const代替var
// 注意 const 表示常量
if(true){
var a = 1;
let b = 2;
const c = 3;
}
console.log(a);
console.log(b);
console.log(c);

我们一般情况下用let 和const代替var,因为var是函数作用域。

1
2
3
4
function d(){
var e = 4;
}
console.log(e);

所以,作用域和我们一般理解的稍微有区别。

3.5.2:字符串注入变量
1
2
let name = 'zhangSan'
console.log(`my name is ${name}`);
3.5.3:函数参数默认值
1
2
3
4
5
// 参数默认值
function add(a=1,b=2){
return a+b;
}
console.log(add());
3.5.4:箭头函数
1
2
3
4
5
6
7
8
9
10
11
12
// 普通方法
const fn0 = function(){
console.log('这是一个方法Fn0');
}
// 箭头函数
const fn1 = () =>{
console.log('这是一个函数Fn1');
}
// 带有参数的箭头函数
const fn2 = (a,b) =>{
console.log(`相加结果为:${a+b}`);
}
3.5.5:对象初始化属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// ES5 一般的对象
function people(name,age){
return {
name:name,
age:age
}
}
let zhangsan = people('张三',18)
console.log(`姓名是:${zhangsan.name},年龄是${zhangsan.age}`)
// ES6 属性简化写法
function people2(name,age){
return {
name,
age
}
}
let lisi = people2('李四',20)
console.log(`姓名是:${lisi.name},年龄是${lisi.age}`);

私以为该函数只是返回了一个匿名类的对象

3.5.6:解构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const people ={
name:'张三',
age:20
}
// const name = people.name
// const age = people.age
// console.log(`姓名${name},年龄${age}`);

// ES6中获取对象的属性,提供了解构
// 解构的名字必须和属性名或者方法名对应
const {age,name} = people
// console.log(`${name}---->${age}`);

// 数组也可以解构
const colors = ['red','blue','pink']
const [a,b,c] = colors
// console.log(a)
// console.log(b)
// console.log(c)

// 数组
const arr = ['red','blue','pink']
const arr2 = [...arr,'green']
// console.log(arr2);

// 对象
const obj1 = {name:'张三丰',age:18}
const obj2 = {...obj1,address:'武汉'}
const obj3 = {obj1,ipone:123456}
console.log(obj2);
console.log(obj3);