ES6模块

项目目录

|-node_modules

|-package.json

|-server.js

|-public

   |-index.html

   |-index.js

   |-math.js

|-.babelrc

|-dist

搭建验证环境

npm init -y 
npm install --save express 

server.js中,使用了express搭建了一个小型的web服务器,监听本地3000端口,即localhost:3000。

public目录作为静态文件,因此访问localhost:3000,便是访问http://localhost:3000/index.html

//server.js 搭建本地服务器
const express = require("express");
const server = express();
server.use(express.static("./public"));
server.listen(3000,function(){
	console.log("listening on *:3000");
})

初探import和exports

math.js作为一个独立的模块,提供加减乘除计算能力;index.js引入math.js模块,使用该模块提供的add和sub方法;index.html中,指定index.js为应用入口。

//math.js
const add = (x,y) => x+y;
const substract = (x,y) => x-y;
const multiple = (x,y) => x*y;
const divide = (x,y) => x/y;

export {
	add,
	substract as sub,
	multiple as mul,
	divide as div
}
//index.js
import {add,sub} from "./math.js";
const sum = add(1,2);
const diff = sub(2,1);
console.log(sum,diff);
//index.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>index</title>
</head>
<body>
<script type="module" src="./index.js"></script>
</body>
</html>

验证

步骤1:打开cmd命令窗口,执行 node server.js,启动web服务器;

步骤2:打开浏览器窗口,输入:localhost:3000,控制台输出: 3 1

如果想一探究竟,import和export到底是如何工作的,可以用babel转码一把,具体可以这么做(前3步可任意顺序):

第一步:安装 babel  babel-cli babel-perset-env

npm install --save-dev babel babel-cli babel-preset-env

第二步:添加.babelrc文件,.babelrc文件内容如下:

{
	presets:["env"],
	plugins:[]
}

 第三步:package.json的添加如下npm脚本,将public目录转码后的结果保存到dist目录

  "scripts": {
    "compile": "babel public -d dist"
  },

第四步:在cmd窗口,执行npm run compile。

转码后的结果如下,转码后的index.js中有个require,这是CommonJS的能力。

//math.js
"use strict";

Object.defineProperty(exports, "__esModule", {
	value: true
});
var add = function add(x, y) {
	return x + y;
};
var substract = function substract(x, y) {
	return x - y;
};
var multiple = function multiple(x, y) {
	return x * y;
};
var divide = function divide(x, y) {
	return x / y;
};

exports.add = add;
exports.sub = substract;
exports.mul = multiple;
exports.div = divide;


//index.js
"use strict";

var _math = require("./math.js");

var sum = (0, _math.add)(1, 2);
var diff = (0, _math.sub)(2, 1);
console.log(sum, diff);

以上为基础,接下来主要研究下在定义和使用ES6模块时,import、export 和export default该怎么用。

import/export

比如,现在有一个辅助模块util.js,其中了定义了变量firstname、lastname和方法 sayHi,这些变量和方法均向外提供,

那么util.js的实现可以是这样的:

//util.js   第一种
export const firstname = "Steve";
export const lastname = "Jobs";
export const sayHi = function(){
	console.log("hello world");
}

也可以这样:

//util.js  第二种
const firstname = "Steve";
const lastname = "Jobs";
const sayHi = function(){
	console.log("hello world");
}
export {
	firstname,
	lastname,
	sayHi
}

也可以这样,

//util.js  第三种
const firstname = "Steve";
const lastname = "Jobs";
function sayHi(){
	console.log("hello world");
}
export {
	firstname,
	lastname,
	sayHi
}

第二种和第三种几乎一样,唯一的区别是前者使用了函数表达式,而后者使用了函数声明。

util.js定义好了,现在index.js希望能够使用util.js中的变量和方法,这时候就要依靠import语句了。

index.js中可以这样写:

//index.js  第一种
import {firstname,lastname,sayHi} from "./util.js";
console.log(firstname,lastname);
sayHi();

也可以这样写:

//index.js  第二种
import * as u from "./util.js";
console.log(u.firstname,u.lastname);
u.sayHi();

export出的名称与import入的名称必须一致。

util.js的第一、二、三种方式,index.js的第一、二种方式,各任选其一,均可搭配调通。

 

现在来看看使用别名的情况,util.js在export时使用as定义了别名。

//util.js
const firstname = "Steve";
const lastname = "Jobs";
function sayHi(){
	console.log("hello world");
}
export {
	firstname as first,
	lastname as last,
	sayHi as say
}

//index.js
import {first,last,say} from "./util.js";
console.log(first,last);
say();

当然,import时可以使用as。

//util.js
const firstname = "Steve";
const lastname = "Jobs";
function sayHi(){
	console.log("hello world");
}
export {
	firstname as first,
	lastname as last,
	sayHi as say
}


//index.js
import {first as f,last as l,say as s} from "./util.js";
console.log(f,l);
s();

export default

不论输出变量还是方法,export default 后面不要跟"=",记住这个就不会出错了。

下面给出几个例子。

//util.js 第一种
export default "Steve Jobs";

//util.js  第二种
const fullname = "Steve Jobs";
export default fullname;


//index.js
import name from "./util.js";
console.log(name);
//util.js  第一种  函数声明
function sayHi(){
	console.log("hello world");
}
export default sayHi;


//util.js 第二种  函数表达式
const sayHi = function(){
	console.log("hello world");
}
export default sayHi;


//util.js 第三种  匿名函数
export default function(){
	console.log("hello world");
}

//util.js 第四种
export default function sayHi(){
	console.log("hello world");
}



//index.js
import say from "./util.js";
say();
//util.js
const firstname = "Steve";
const lastname = "Jobs";
const sayHi = function(){
	console.log("hello world");
}

export {
	firstname,
	lastname
}
export default sayHi;


//index.js
import say,{firstname,lastname} from "./util.js";
console.log(firstname,lastname);
say();

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值