1️⃣ module 模块化

如果文件使用了模块化语法在 html 引入时就要为 script 标签声明一下引入的 js 为模块化语法在 script 标签上

  1. 1. 声明 type module `**<script src="./index.js" type="module"></script>**`
  2. 2. 否则会报错 `**Uncaught SyntaxError: Cannot use import statement outside a module**`

1️⃣ 基本导入导出

2️⃣ 基本导出

基本导出可以导出多个,每个必须有名称
基本导出的语法如下:

  1. // 方法一:export 声明表达式
  2. export let num = 1;
  3. export function fun() {
  4. console.log('fun');
  5. }
  6. let a = 1
  7. export a // 报错必须为声明语句
  8. // 方法二:export { 具名符号 }
  9. let name = 'chen';
  10. let age = 18;
  11. export { name, age };

2️⃣ 基本导入

由于使用了依赖预加载,因此导入任何其他模块,导入代码必须放置到所有代码之前
注意:

  1. 1. 导入时可以通过关键字 as 对导入的符号进行重命名
  2. 2. 导入时使用的符号是常量,不可修改
  3. 3. 如果使用 * 号导入,就可以将所有的基本导出和默认导出聚合到一个对象中,默认导出会以 default 关键词存在
  1. // module.js 导出
  2. export let a = 1;
  3. export function b() {
  4. console.log('b');
  5. }
  6. let c = 3;
  7. let d = function () {
  8. console.log('d');
  9. };
  10. export { c, d };
  11. // index.js 导入
  12. import { a, b, c as cc, d as dd } from './module.js';
  13. console.log(a); // 1
  14. console.log(b);
  15. /*
  16. ƒ b() {
  17. console.log('b');
  18. }
  19. */
  20. console.log(cc); // 3
  21. console.log(dd);
  22. /*
  23. ƒ () {
  24. console.log('d');
  25. }
  26. */
  1. // module.js 导出
  2. export let a = 1;
  3. export function b() {
  4. console.log('b');
  5. }
  6. let c = 3;
  7. let d = function () {
  8. console.log('d');
  9. };
  10. export { c, d };
  11. // index.js 导入
  12. import * as o from './module.js';
  13. console.log(o);
  14. /*
  15. Module {Symbol(Symbol.toStringTag): 'Module'}
  16. a: 1
  17. b: ƒ b()
  18. c: 3
  19. d: ƒ ()
  20. Symbol(Symbol.toStringTag): "Module"
  21. get a: ƒ ()
  22. set a: ƒ ()
  23. get b: ƒ ()
  24. set b: ƒ ()
  25. get c: ƒ ()
  26. set c: ƒ ()
  27. get d: ƒ ()
  28. set d: ƒ ()
  29. */
  30. console.log(o.a); // 1
  31. console.log(o.b);
  32. /*
  33. ƒ b() {
  34. console.log('b');
  35. }
  36. */
  37. console.log(o.c); // 3
  38. console.log(o.d);
  39. /*
  40. ƒ () {
  41. console.log('d');
  42. }
  43. */

1️⃣ 默认的导入导出

2️⃣ 默认导出

每个模块除了允许多个基本导出外,还允许有一个默认导出,因为默认导出只有一个,所以可以不用具名
默认导出的语法如下:

  1. // module.js 导出
  2. let a = 1;
  3. function b() {
  4. console.log('b');
  5. }
  6. let c = 3;
  7. function d() {
  8. console.log('d');
  9. }
  10. export default {
  11. a,
  12. b,
  13. };

2️⃣ 默认导入

默认导入会导入一个对象

  1. // module.js 导出
  2. let a = 1;
  3. function b() {
  4. console.log('b');
  5. }
  6. let c = 3;
  7. function d() {
  8. console.log('d');
  9. }
  10. export default {
  11. a,
  12. b,
  13. c,
  14. d
  15. };
  16. // index.js 导入
  17. import o from './module.js';
  18. console.log(o);
  19. /*
  20. {a: 1, c: 3, b: ƒ, d: ƒ}
  21. a: 1
  22. b: ƒ b()
  23. c: 3
  24. d: ƒ d()
  25. [[Prototype]]: Object
  26. */

1️⃣ 模块导入导出语法

2️⃣ 基本导入导出

  1. // 基本导出 - 逐个导出
  2. export let v = 10;
  3. export let obj = {};
  4. export let arr = [];
  5. export function fun() {}
  6. import { v, obj, arr, fun } from './i.js';
  7. import { v as a, obj as b, arr as c, fun as d } from './i.js';
  8. import * as require from './j.js'; // * 导入全部基本导出并从命名为一个对象
  9. // 基本导出 - 一起导出
  10. let v = 10;
  11. let obj = {};
  12. let arr = [];
  13. function fun() {}
  14. export { v, obj, arr, fun };
  15. import { v, obj, arr, fun } require from './j.js';
  16. import { v as a, obj as b, arr as c, fun as d } from './i.js';
  17. import * as require from './j.js';

2️⃣ 默认导入导出

  1. let v = 10;
  2. let obj = {};
  3. let arr = [];
  4. function fun() {}
  5. export default {
  6. v,
  7. obj,
  8. arr,
  9. fun,
  10. };
  11. import require from './i.js';

2️⃣ 混合导入导出

  1. let v = 10;
  2. let obj = {};
  3. let arr = [];
  4. function fun() {}
  5. export { v, obj };
  6. export default {
  7. arr,
  8. fun,
  9. };
  10. 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指定具体的任务),内容如下:

  1. {
  2. "presets": ["es2015"]
  3. }

3️⃣ 编译源代码(确保已进入06_ES6_Babel_Browserify所在文件夹)

第一步:使用Babel将ES6编译为ES5代码

  1. 1. 命令为: `babel js/src -d js/build`

第二步:使用Browserify编译js上一步生成的js

  1. 1. 命令为: `browserify js/build/app.js -o js/build/build.js`

备注:第一步操作后Babel将es6的模块化语法,转换成了CommonJS模块化语法(浏览器不识别),所以需要第二步用Browserify再次编译。

3️⃣ 页面中引入测试

  1. <script type="text/javascript" src="js/build/build.js"></script>