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 = 1export 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); // 1console.log(b);/*ƒ b() {console.log('b');}*/console.log(cc); // 3console.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: 1b: ƒ b()c: 3d: ƒ ()Symbol(Symbol.toStringTag): "Module"get a: ƒ ()set a: ƒ ()get b: ƒ ()set b: ƒ ()get c: ƒ ()set c: ƒ ()get d: ƒ ()set d: ƒ ()*/console.log(o.a); // 1console.log(o.b);/*ƒ b() {console.log('b');}*/console.log(o.c); // 3console.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: 1b: ƒ b()c: 3d: ƒ 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>
