模块化

CommonJS

默认情况下,浏览器是同步加载 JavaScript 脚本,即渲染引擎遇到<script>标签就会停下来,等到执行完脚本,再继续向下渲染。

browserify

http://browserify.org/


浏览器端的打包工具,和 webpack 类似

打包后的bundle.js也是一个封闭的模块。在 index.html 中通过 script 标签引入后,也无法访问里面的变量
如果需要,可以在模块中用 window.变量的方式将变量挂载到全局。

导入导出方式

// exports带s
require();
module.exports = value;
module.exports.a = b;
exports.a = b;

AMD

模块的加载是异步的

定义一个只是对象的模块

// moduleA.js
define({
    name: "djh",
    nickname: "flyerya",
});

// app.js
require(["moduleA"], function (obj) {
    //obj 就是 {name:'djh',nickname:'flyerya'}
});

定义没有依赖的模块

define(function () {
    // 暴露模块
    return xx;
});

定义有依赖的模块

define(["moduleA", "moduleB"], function (A, B) {
    // 暴露模块
    return xx;
});

ES6

单个暴露

export const a = "这是a";
export const b = "这是b";
export const c = "这是c";

import { a, b, c } form ".js";

export 没有 s,接受必须以{}接收

统一暴露

const a = "这是a";
const b = "这是b";
const c = "这是c";
export { a, b, c };

import { a, b, c } form ".js";

export 没有 s,接受必须以{}接收

默认暴露

export default value;
import value from ".js";

只能默认暴露一次,多了会报错,直接接收暴露变量

上一篇:Js模块打包 exports和require 与 export和import 的用法和区别


下一篇:前端模块化简单总结