成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

前端模塊化要解決的兩個問題

開發 前端
前端模塊化,主要是解決兩個問題——“命名空間沖突”,“文件依賴管理”。JavaScript的缺陷,首當其沖就是全局變量。這使得每想命名一個變量的時候都要三思又三思,生怕上方無窮遠的地方有一個同事些的代碼和自己沖突。

[[172047]]

前言

前端模塊化,主要是解決兩個問題——“命名空間沖突”,“文件依賴管理”。

坑___命名空間沖突

  1. 我自己測試好的代碼和大家合并后怎么起沖突了?
  2. 頁面腳本的變量或函數覆蓋了公有腳本的。

坑___文件依賴管理

  1. 明明項目需要引入的包都引進來了怎么還報缺少包?
  2. 手動管理依賴,有天要更換某個插件,要深入代碼內部進行修改
  3. 如下圖,顯示的代碼加載,依賴關系復雜。在F.js中,分不清某個變量是來自C.js,還是E.js
  4. 兩次加載同一個模塊。比如引入了兩遍JQ

 其他的坑

  1. 為了實現腳本復用,將一個很大的公用public文件引入各個頁面中,其中的某些函數,只有個別頁面用到。
  2. 某個功能的函數群函數,與另一個功能的函數群擺在一起,使用注釋來分隔。

目前解決的方法是:模塊化

  1. 命名空間:各個模塊的命名空間獨立。A模塊的變量x不會覆蓋B模塊的變量x。
  2. 模塊的依賴關系:通過模塊管理工具如webpack/requireJS/browserify等進行管理。

模塊化的基本原理——解決命名空間沖突

JavaScript的缺陷,首當其沖就是全局變量。這使得每想命名一個變量的時候都要三思又三思,生怕上方無窮遠的地方有一個同事些的代碼和自己沖突。以下是一些防范方法

一、使用命名空間

代碼如下: 

  1. //定義 
  2. var module = { 
  3.     name'rouwan'
  4.     sayName:function(){ 
  5.         console.log(this.name
  6.     } 
  7. //使用 
  8. var a = module.name
  9. console.log(a)  

總結:直接修改name不會影響module.name,一定程度保護了命名空間。有兩個缺點,一,外部還是可以修改module的屬性和方法。二,命名空間有時長起來超乎你的想象。適合一些小型的封裝,如一些配置。

二、立即執行函數 + 閉包(實現模塊的基本方法)

立即函數可以創建作用域,閉包則可以形成私有變量和函數 

  1. //創建 
  2. var module = (function(){ 
  3.                 var privateName = 'inner';            //私有變量 
  4.                 var privateFunc = function(){        //私有函數 
  5.                     console.log('私有函數'
  6.                 } 
  7.  
  8.                 return {                             
  9.                     name'rouwan',                    //公有屬性 
  10.                     sayName:function(){                //公有函數 
  11.                         console.log(this.name
  12.                     } 
  13.                 } 
  14.             })() 
  15. //使用 
  16. module.sayName();    //'rouwan'  

總結:這是目前比較常用的模塊定義方式,可以區分私有成員和公有成員。公有變量和方法,和之前一樣可以直接通過module.name的方式修改。私有變量和方法,是無法訪問的,除非給你個修改私有成員的公有方法。

三、在上述基礎上,引入其他模塊 

  1. //定義 
  2. var module1 = (function(mod){ 
  3.                 var privateName = 'inner1'
  4.                 var privateFunc = function(){ 
  5.                     console.log('私有函數1'
  6.                 } 
  7.  
  8.                 return { 
  9.                     name : 'rouwan1'
  10.                     sayName: function(){ 
  11.                         console.log(this.name
  12.                     }, 
  13.                     anotherName:mod.name,            //另一個模塊上的公有參數 
  14.                     sayAnotherName:mod.sayName       //另一個模塊上的公有方法 
  15.                 } 
  16.  
  17.             })(anotherModule)                        //引入了另一個模塊 
  18. //使用 
  19. module1.sayOtherName()  

總結:在一個模塊中可以引入另一個模塊。

四、其他的方式

放大模式等是以往用來管理大型模塊,進行文件拆分的方法。現在webpack等模塊化工具都很完善的情況下,已經顯得有點落后了。就不介紹了。

告別刀耕火種的時代——模塊化構建工具(解決依賴管理)

我了解js模塊是從立即執行函數開始的。但是等到真正使用構建工具的時候,卻發現業界采用的模塊化方案,卻并非是一個一個由立即函數+閉包形成的集群。

而是用了諸如AMD/CMD/CommonJS/ES6模塊等等模塊化實現。

這里面的原因可能有這幾個,一,閉包的性能問題。二,當模塊增多的時候,需要解決模塊間的依賴管理問題。

關于依賴管理,目前項目里碰到了幾個不舒服的地方: 

     

  1. 僅此一圖,無須多言
  2. HTML中引入了兩遍的jq,導致腳本報錯。
  3. 有一個公用腳本,包含了N多的公用模塊。有些頁面明明只用到了一個模塊,也必須全部加載一遍。

因此,必須使用模塊化管理工具!

幾個概念

 包管理工具: 安裝、卸載、更新、查看、搜索、發布包。比如你需要安裝個jq等,通過npm來安裝。npm里有依賴管理,假如jq或者說express升級了,原來代碼不能用了。幫助你解決這個問題的就是npm。

模塊化構建工具:webpack/requireJS/seaJS,等是用來組織前端模塊的構建工具(加載器)。通過使用模塊化規范(AMD/CMD/CommonJS/es6)的語法來實現按需加載。舉個栗子,如果有一天你不用維護一個很長很長的公用腳本文件,這得感謝它。

模塊化規范::AMD/CMD/CommonJS/es6模塊等等規范,規范了如何來組織你的代碼。一般這種方式寫的代碼瀏覽器不認,需要用模塊化構建工具來打包編譯成瀏覽器可以識別的文件。

從我的表格里,可以看出我的推薦搭配———— npm +webpack + es6模塊。

理由如下:

npm與bower比較:

  • 原來bower的使用優勢就是適合前端模塊管理,而npm被視為只適合后端的管理。但是隨著webpack的流行,這個已經毫無疑問是npm勝出了。npm+webpack,可以實現良好的前端模塊管理。

webpack和requireJS比較:

 

幾種模塊化規范比較:

 

 所以就決定是你了! npm + webpack + es6模塊。

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2020-09-18 09:02:32

前端模塊化

2020-09-17 10:30:21

前端模塊化組件

2022-09-05 09:01:13

前端模塊化

2013-08-20 15:31:18

前端模塊化

2022-03-11 13:01:27

前端模塊

2023-05-24 10:35:11

Node.jsES模塊

2019-12-02 16:05:10

前端模塊化JavaScript

2014-04-27 10:16:31

QCon北京2014Andrew Bett

2019-08-28 16:18:39

JavaScriptJS前端

2013-03-19 10:50:38

2013-03-11 10:00:13

前端模塊化

2021-04-20 20:03:28

Systemjs模塊化前端

2018-12-18 11:20:28

前端模塊化JavaScript

2025-02-11 13:00:00

模塊化前端代碼

2025-06-10 07:09:00

2016-10-09 11:03:41

Javascript模塊化Web

2013-03-11 10:10:03

2022-09-21 11:51:26

模塊化應用

2015-10-10 10:01:28

前端模塊化webpack

2022-05-31 09:01:13

GitHub工具安全
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品一区二区免费 | 欧美成人a∨高清免费观看 91伊人 | 欧美成人一级 | 天天操天天射综合网 | 人人九九精 | 国产精品99| 黄色毛片黄色毛片 | 黄色在线免费播放 | 亚洲人成人一区二区在线观看 | 毛片网站在线观看视频 | 亚洲精品99 | 精品日韩一区 | 亚洲免费精品 | 亚洲大片一区 | 在线免费观看黄色 | 中文字幕一区二区不卡 | 亚洲国产一区二区三区在线观看 | 亚洲一一在线 | 伊人久久综合影院 | 一区二区三区影院 | 精品中文字幕在线 | 成av人电影在线 | 国产黄色在线观看 | 欧洲一区视频 | 婷婷国产一区二区三区 | 亚洲综合电影 | 一区二区视频免费观看 | 免费99精品国产自在在线 | 欧美精品在线免费观看 | 免费成人高清在线视频 | 午夜影院黄 | 国产一级一级国产 | 亚洲人成人一区二区在线观看 | 日本三级在线视频 | 久久99精品久久久久久琪琪 | 成人欧美一区二区三区 | 欧美一区二区三区在线免费观看 | 成人福利在线视频 | 亚洲一区二区精品 | av官网在线 | 97超碰站 |