require
和import
;module.exports/exports
或者export/export default
;require
奇怪的是也可使用import
????它們之間有何區別呢?因而有了菜鳥解惑的搜嘍過程。。。。。。
// 導入 require("module"); require("../app.js"); // 導出 exports.getStoreInfo = function() {}; module.exports = someValue;
優勢:javascript
缺點:java
?爲何瀏覽器不能使用同步加載,服務端能夠?node
// 定義 define("module", ["dep1", "dep2"], function(d1, d2) {...}); // 加載模塊 require(["module", "../app"], function(module, app) {...});
require([module], callback);
第一個參數[module],是一個數組,裏面的成員就是要加載的模塊;第二個參數callback是加載成功以後的回調函。優勢:react
缺點:typescript
require.js
RequireJS對模塊的態度是預執行。因爲 RequireJS 是執行的 AMD 規範, 所以全部的依賴模塊都是先執行;即RequireJS是預先把依賴的模塊執行,至關於把require提早了
factory 是一個函數,有三個參數,function(require, exports, module):數組
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 ... ...