1️⃣ module 模块化
如果文件使用了模块化语法在 html 引入时就要为 script 标签声明一下引入的 js 为模块化语法在 script 标签上
1. 声明 type 为 module `**<script src="./index.js" type="module"></script>**`
2. 否则会报错 `**Uncaught SyntaxError: Cannot use import statement outside a module**`
1️⃣ 基本导入导出
2️⃣ 基本导出
基本导出可以导出多个,每个必须有名称
基本导出的语法如下:
// 方法一:export 声明表达式
export let num = 1;
export function fun() {
console.log('fun');
}
let a = 1
export a // 报错必须为声明语句
// 方法二:export { 具名符号 }
let name = 'chen';
let age = 18;
export { name, age };
2️⃣ 基本导入
由于使用了依赖预加载,因此导入任何其他模块,导入代码必须放置到所有代码之前
注意:
1. 导入时可以通过关键字 as 对导入的符号进行重命名
2. 导入时使用的符号是常量,不可修改
3. 如果使用 * 号导入,就可以将所有的基本导出和默认导出聚合到一个对象中,默认导出会以 default 关键词存在
// module.js 导出
export let a = 1;
export function b() {
console.log('b');
}
let c = 3;
let d = function () {
console.log('d');
};
export { c, d };
// index.js 导入
import { a, b, c as cc, d as dd } from './module.js';
console.log(a); // 1
console.log(b);
/*
ƒ b() {
console.log('b');
}
*/
console.log(cc); // 3
console.log(dd);
/*
ƒ () {
console.log('d');
}
*/
// module.js 导出
export let a = 1;
export function b() {
console.log('b');
}
let c = 3;
let d = function () {
console.log('d');
};
export { c, d };
// index.js 导入
import * as o from './module.js';
console.log(o);
/*
Module {Symbol(Symbol.toStringTag): 'Module'}
a: 1
b: ƒ b()
c: 3
d: ƒ ()
Symbol(Symbol.toStringTag): "Module"
get a: ƒ ()
set a: ƒ ()
get b: ƒ ()
set b: ƒ ()
get c: ƒ ()
set c: ƒ ()
get d: ƒ ()
set d: ƒ ()
*/
console.log(o.a); // 1
console.log(o.b);
/*
ƒ b() {
console.log('b');
}
*/
console.log(o.c); // 3
console.log(o.d);
/*
ƒ () {
console.log('d');
}
*/
1️⃣ 默认的导入导出
2️⃣ 默认导出
每个模块除了允许多个基本导出外,还允许有一个默认导出,因为默认导出只有一个,所以可以不用具名
默认导出的语法如下:
// module.js 导出
let a = 1;
function b() {
console.log('b');
}
let c = 3;
function d() {
console.log('d');
}
export default {
a,
b,
};
2️⃣ 默认导入
默认导入会导入一个对象
// module.js 导出
let a = 1;
function b() {
console.log('b');
}
let c = 3;
function d() {
console.log('d');
}
export default {
a,
b,
c,
d
};
// index.js 导入
import o from './module.js';
console.log(o);
/*
{a: 1, c: 3, b: ƒ, d: ƒ}
a: 1
b: ƒ b()
c: 3
d: ƒ d()
[[Prototype]]: Object
*/
1️⃣ 模块导入导出语法
2️⃣ 基本导入导出
// 基本导出 - 逐个导出
export let v = 10;
export let obj = {};
export let arr = [];
export function fun() {}
import { v, obj, arr, fun } from './i.js';
import { v as a, obj as b, arr as c, fun as d } from './i.js';
import * as require from './j.js'; // * 导入全部基本导出并从命名为一个对象
// 基本导出 - 一起导出
let v = 10;
let obj = {};
let arr = [];
function fun() {}
export { v, obj, arr, fun };
import { v, obj, arr, fun } require from './j.js';
import { v as a, obj as b, arr as c, fun as d } from './i.js';
import * as require from './j.js';
2️⃣ 默认导入导出
let v = 10;
let obj = {};
let arr = [];
function fun() {}
export default {
v,
obj,
arr,
fun,
};
import require from './i.js';
2️⃣ 混合导入导出
let v = 10;
let obj = {};
let arr = [];
function fun() {}
export { v, obj };
export default {
arr,
fun,
};
import mr, { v, obj } from './i.js'; // 混合导入导出一起使用必须是默认导出在最前
1️⃣ 编译 ES6 语法
2️⃣ babel 转 ES6 为 ES5
3️⃣ 安装babel-cli, babel-preset-es2015和browserify:
第一步,全局安装:npm install babel-cli browserify -g
第二步,局部安装:npm install babel-preset-es2015 --save-dev
备注:若全局已经安装过browserify,可以在第一步中去除browserify
3️⃣ 创建.babelrc文件(给babel指定具体的任务),内容如下:
{
"presets": ["es2015"]
}
3️⃣ 编译源代码(确保已进入06_ES6_Babel_Browserify所在文件夹)
第一步:使用Babel将ES6编译为ES5代码
1. 命令为: `babel js/src -d js/build`
第二步:使用Browserify编译js上一步生成的js
1. 命令为: `browserify js/build/app.js -o js/build/build.js`
备注:第一步操作后Babel将es6的模块化语法,转换成了CommonJS模块化语法(浏览器不识别),所以需要第二步用Browserify再次编译。
3️⃣ 页面中引入测试
<script type="text/javascript" src="js/build/build.js"></script>