AMD、UMD、css
不管是那種模塊化規範,重點關注html
獨立模塊做用域前端
導出模塊內部數據git
github
api
獨立模塊做用域瀏覽器
一個文件就是模塊,擁有獨立的做用域iphone
導出模塊內部數據模塊化
經過 module.exports
或 exports
對象導出模塊內部數據函數
// a.js let a = 1; let b = 2; module.exports = { x: a, y: b } // or exports.x = a; exports.y = b;
導入外部模塊數據
經過 require
// b.js let a = require('./a'); a.x; a.y;
https://github.com/amdjs/amdjs-api/wiki/AMD
瀏覽器並無具體實現該規範的代碼,咱們能夠經過一些第三方庫來解決
這裏強調一下AMD是一個規範,它並非代碼。
這是一個第三方庫
// 1.html <script data-main="scripts/main" src="https://cdn.bootcss.com/require.js/2.3.6/require.min.js"></script>
經過一個 define
方法來定義一個模塊,並經過該方法的第二個回調函數參數來產生獨立做用域
// scripts/Cart.js define(function() { // 模塊內部代碼 })
導入外部模塊數據
經過前置依賴列表導入外部模塊數據
// scripts/main.js // 定義一個模塊,並導入 ./Cart 模塊 define(['./Cart'], function(Cart) { let cart = new Cart() cart.add({name: 'iphoneXX', price: 1000000}) })
導出模塊內部數據
// scripts/Cart.js define(['require', 'exports', 'module'], function(require, exports, module) { class Cart { add(item) { console.log(`添加商品:${item}`) } } exports.Cart = Cart; }) // 忽略不須要的依賴導入 define(['exports'], function(exports) { class Cart { add(item) { console.log(`添加商品:${item}`) } } exports.Cart = Cart; }) // 若是是依賴的導入爲:require, exports, module,也能夠省略依賴導入聲明 define(function(require, exports, module) { class Cart { add(item) { console.log(`添加商品:${item}`) } } exports.Cart = Cart; })
導入外部模塊數據
// scripts/main.js define(['./Cart'], function(Cart) { let cart = new Cart() cart.add({name: 'iphoneXX', price: 1000000}) })