require
和import
;module.exports/exports
或者export/export default
;require
奇怪的是也可使用import
????它们之间有何区别呢?因而有了菜鸟解惑的搜喽过程。。。。。。
// 导入 require("module"); require("../app.js"); // 导出 exports.getStoreInfo = function() {}; module.exports = someValue;
优势:html
缺点:node
?为何浏览器不能使用同步加载,服务端能够?react
// 定义 define("module", ["dep1", "dep2"], function(d1, d2) {...}); // 加载模块 require(["module", "../app"], function(module, app) {...});
require([module], callback);
第一个参数[module],是一个数组,里面的成员就是要加载的模块;第二个参数callback是加载成功以后的回调函。优势:git
缺点:github
require.js
RequireJS对模块的态度是预执行。因为 RequireJS 是执行的 AMD 规范, 所以全部的依赖模块都是先执行;即RequireJS是预先把依赖的模块执行,至关于把require提早了
factory 是一个函数,有三个参数,function(require, exports, module):segmentfault
define(function(require, exports, module) { var a = require('./a'); a.doSomething(); // 依赖就近书写,何时用到何时引入 var b = require('./b'); b.doSomething(); });
sea.js
:SeaJS对模块的态度是懒执行, SeaJS只会在真正须要使用(依赖)模块时才执行该模块// AMD define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好 a.doSomething() // 此处略去 100 行 b.doSomething() ... }); // CMD define(function(require, exports, module) { var a = require('./a') a.doSomething() // 此处略去 100 行 var b = require('./b') // 依赖能够就近书写 b.doSomething() // ... });
(function (window, factory) { if (typeof exports === 'object') { module.exports = factory(); } else if (typeof define === 'function' && define.amd) { define(factory); } else { window.eventUtil = factory(); } })(this, function () { //module ... });
ES6 模块设计思想:尽可能的静态化、使得编译时就能肯定模块的依赖关系,以及输入和输出的变量(CommonJS和AMD模块,都只能在运行时肯定这些东西)。数组
// 导入 import "/app"; import React from “react”; import { Component } from “react”; // 导出 export function multiply() {...}; export var year = 2018; export default ... ...
“积跬步、行千里”—— 不时的分享更新中~,喜欢留下个赞哦!
往期经典:浏览器
相关好文推荐:缓存