<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【前端面試題】08—31道有關(guān)前端工程化的面試題(附答案)

          共 6747字,需瀏覽 14分鐘

           ·

          2021-03-14 14:11

          隨著前端技術(shù)的發(fā)展,前端工程化變得越來越重要。前端工程化部分的面試題主要考察應(yīng)試者對工程化的理解與運用,如何通過工程化來提高代碼質(zhì)量、編譯代碼、優(yōu)化代碼;如何提高網(wǎng)站性能,保障網(wǎng)站安全,提升用戶體驗;如何將開發(fā)的代碼按照理想的方式發(fā)布和上線等。
          當(dāng)然,一些新技術(shù)的實現(xiàn)(諸如 EMAScript 6、 typescript、jsx、 Less、Sass、 Stylus等)都離不開前端工程化。
          1、談?wù)勀銓?WebPack的認識。
          WebPack是一個模塊打包工具,可以使用 WebPack管理模塊依賴,并編譯輸岀模塊所需的靜態(tài)文件。它能夠很好地管理與打包Web開發(fā)中所用到的HTML、 JavaScript 、CSS以及各種靜態(tài)文件(圖片、字體等),讓開發(fā)過程更加高效。對于不同類型的資源, WebPack有對應(yīng)的模塊加載器。Web Pack模塊打包器會分析模塊間的依賴關(guān)系,最后生成優(yōu)化且合并后的靜態(tài)資源。
          WebPack的兩大特色如下。
          (1)代碼切割( code splitting)
          (2) loader可以處理各種類型的靜態(tài)文件,并且支持串行操作WebPack以 CommonJS規(guī)范來書寫代碼,但對 AMD/CMD的支持也很全面,方便對項目進行代碼遷移。
          WebPack具有 require.js和 browserify的功能,但也有很多自己的新特性,
          (1)對 CommonJS、AMD、ES6的語法實現(xiàn)了兼容。
          (2)對 JavaScript、CSS、圖片等資源文件都支持打包
          (3)串聯(lián)式模塊加載器和插件機制,讓其具有更好的靈活性和擴展性,例如提供對CoffeeScript、 EMAScript 6的支持
          (4)有獨立的配置文件 webpack.config. js。
          (5)可以將代碼切割成不同的塊,實現(xiàn)按需加載,縮短了初始化時間。
          (6)支持 SourceUrls和 SourceMaps,易于調(diào)試。
          (7)具有強大的 Plugin接口,大多是內(nèi)部插件,使用起來比較靈活
          (8)使用異步I/O,并具有多級緩存,這使得 WebPack速度很快且在增量編譯上更加快。
          2、在使用 WebPack時,你都做些什么?
          用來壓縮合并CSS和 JavaScript代碼,壓縮圖片,對小圖生成base64編碼,對大圖進行壓縮,使用 Babel把 EMAScript 6編譯成 EMAScript 5,熱重載,局部刷新等。在 output中配置出口文件,在 entry中配置入口文件。
          使用各種 loader對各種資源做處理,并解析成瀏覽器可運行的代碼。
          3、你用Gulp都實現(xiàn)了哪些功能?
          我之前寫的一個 Angular項目就是使用Gulp構(gòu)建的。使用task制定各種任務(wù),將通過 bower安裝的第三方插件復(fù)制到開發(fā)和生產(chǎn)目錄中。復(fù)制Less并將它編譯成CSS然后合并到一個文件中并壓縮。
          將JS目錄下所有的 JavaScript文件合并并壓縮成一個JavaScript文件。使用 imagemin壓縮圖片,使圖片變小。
          使用open讓項目在自動運行時自動打開瀏覽器。使用 watch監(jiān)聽src目錄中代碼的變化,并進行實時編譯。使用 connect創(chuàng)建一個項目服務(wù)器,用來做開發(fā)調(diào)試。
          4、說說 WabPack打包的流程。
          具體流程如下。
          (1)通過 entry配置入口文件。
          (2)通過 output指定輸出的文件。
          (3)使用各種 loader處理CSS、 JavaScript、 image等資源,并將它們編譯與打包成瀏覽器可以解析的內(nèi)容等。
          5、什么是 WebPack?
          Web Pack是一個打包工具, WebPack可以將項目中使用的腳本開發(fā)語言CoffeeScript Type Script、樣式開發(fā)語言Less或者Sass“編譯”成瀏覽器能識別的 JavaScript和CSS文件。
          6、WebPack的核心原理是什么?
          核心原理如下。
          (1)一切皆模塊。
          正如 JavaScript文件可以是一個“模塊”( module)一樣,其他的(如CSS、 image或 HTML)文件也可視作模塊。因此,可以執(zhí)行 require('myJSfile js'),亦可以執(zhí)行require( 'myCSSfile.css')。這意味著我們可以將事務(wù)(業(yè)務(wù))分割成更小的、易于管理的片段,從而達到重復(fù)利用的目的。
          (2)按需加載。
          傳統(tǒng)的模塊打包工具( module bundler)最終將所有的模塊編譯并生成一個龐大的bundle. js文件。但是,在真實的App里, bundle. js文件的大小在10MB到15MB之間,這可能會導(dǎo)致應(yīng)用一直處于加載狀態(tài)。因此, WebPack使用許多特性來分割代碼,然后生成多個 bundle js文件,而且異步加載部分代碼用于實現(xiàn)按需加載。
          7、WebPack中 loader的作用是什么?
          具體作用如下。
          (1)實現(xiàn)對不同格式文件的處理,比如將Scss轉(zhuǎn)換為CSS,或?qū)?TypeScript轉(zhuǎn)化為Javascript。
          (2)可以編譯文件,從而使其能夠添加到依賴關(guān)系中。loader是 WebPack最重要的部分之一。通過使用不同的 loader,我們能夠調(diào)用外部的腳本或者工具,實現(xiàn)對不同格式文件的處理。loader需要在 webpack.config.js里單獨用 module進行配置。
          8、說說你工作中幾個常用的 loader。
          常用的 loader如下:
          babel- loader:將下一代的 JavaScript語法規(guī)范轉(zhuǎn)換成現(xiàn)代瀏覽器能夠攴持的語法規(guī)范。因為 babel有些復(fù)雜,所以大多數(shù)開發(fā)者都會新建一個. babelrc進行配置。
          css-loader、 style- loader:這兩個建議配合使用,用來解析CSS文件依賴。
          less- loader:解析less文件。
          file- loader:生成的文件名就是文件內(nèi)容的MD5散列值,并會保留所引用資源的原始擴展名。
          url- loader:功能類似于file-loader,但是當(dāng)文件大小低于指定的限制時,可以返回一個 DataURL。
          9、plugins和 loader有什么區(qū)別?
          它們是兩個完全不同的東西。loader負責(zé)處理源文件,如CSS、jsx文件,一次處理一個文件。而 plugins并不直接操作單個文件,它直接對整個構(gòu)建過程起作用。
          10、說說 HtmlWebpackPlugin插件的作用。
          依據(jù)一個簡單的 index .html模板,生成一個自動引用你打包后的 JavaScript文件的、新的 index.html文件。
          11、說說 WebPack支持的腳本模塊規(guī)范。
          不同項目在定義腳本模塊時使用的規(guī)范不同。有的項目會使用 Commonjs規(guī)范(參考 Node. js);有的項目會使用 EMAScript 6模塊規(guī)范;有的還會使用AMD規(guī)范(參考 Require. js)。WebPack支持這3種規(guī)范,還支持混合使用。
          12、如何為項目創(chuàng)建 package. json文件?
          將命令行切換至根目錄下,運行 npm init,命令行就會一步一步引導(dǎo)你建立package. json文件。手動在根目錄下創(chuàng)建一個空文件,并命名為 package. json,在文件中填充JSON格式的常規(guī)內(nèi)容。例如初期只需要name和 version字段。
          {"name""Project""version"" 0.0.1"}

          13、WebPack和 gulp/grunt相比有什么特性?

          gulp/ grunt是一種能夠優(yōu)化前端的流程開發(fā)工具,而 Web Pack是一種模塊化的解決方案,由于 WebPack提供的功能越來越豐富,使得 WebPack可以代替 gulp/grunt類的工具。

          14、grunt和gulp的工作方式是什么?

          在一個配置文件中,指明對某些文件進行何種編譯、組合、壓縮等任務(wù)的具體步驟,當(dāng)運行這些工具的指令的時候,就可以自動完成這些任務(wù)。

          15、WebPack的工作方式是什么?

          把項目當(dāng)作一個整體,通過一個給定的主文件(如 index. js), WebPack將從這個文件開始找到你項目的所有依賴,并使用 loader(加載器)來處理它們,最后打包為個瀏覽器可識別的 JavaScript文件。

          16、Babe通過編譯能達到什么目的?

          能達到以下目的。

          (1)使用下一代的 JavaScript標(biāo)準(zhǔn)( EMAScript 6、 EMAScript 7)語法,當(dāng)前的瀏覽器尚不完全支持這些標(biāo)準(zhǔn)。

          (2)使用基于 JavaScript進行拓展的語言,比如 React的jsx語法。

          17、EventSource和 websocket的區(qū)別是什么?

          區(qū)別如下。

          EventSource本質(zhì)仍然是HTTP,僅提供服務(wù)器端到瀏覽器端的單向文本傳輸,不需要心跳鏈接,鏈接斷開會持續(xù)重發(fā)鏈接。

          注意:心跳鏈接是用來檢測一個系統(tǒng)是否存活或者網(wǎng)絡(luò)鏈路是否通暢的一種方式。

          (2) websocket是基于TCP的協(xié)議,提供雙向數(shù)據(jù)傳輸,支持二進制,需要心跳鏈接,斷開鏈接時不會重鏈。

          (3) EventSource更簡潔輕量, websocket支持性更妤,后者功能更強大一點。

          18、在工作中, WebPack工具中常用到的插件有哪些?

          常用到的插件如下

          (1) HtmlWebpackPlugin:依據(jù)一個HTML模板,生成HTML文件,并將打包后的資源文件自動引入。

          (2) commonsChunkPlugin:抽取公共模塊,減小包占用的內(nèi)存空間,例如vue的源碼、 jQuery的源碼等。

          (3) css-loader:解析CSS文件依賴,在 JavaScript中通過 require方式引入CSS文件。

          (4) style- loader.:通過 style標(biāo)簽引入CSS。

          (5) extract-text-webpack- plugin:將樣式抽取成單獨的文件。

          (6)url- loader:實現(xiàn)圖片文字等資源的打包,limit選項定義大小限制,如果小于該限制,則打包成base64編碼格式;如果大于該限制,就使用file- loader去打包成圖片。

          (7) hostess:實現(xiàn)瀏覽器兼容。

          (8) babel:將 JavaScript未來版本( EMAScript6、 EMAScript2016等)轉(zhuǎn)換成當(dāng)前瀏覽器支持的版本。

          (9) hot module replacement:修改代碼后,自動刷新、實時預(yù)覽修改后的效果

          (10) ugliifyJsPlugin:壓縮 JavaScript代碼。

          19、WebPack與gulp的區(qū)別是什么?

          區(qū)別如下。

          (1)用途不同。gulp是工具鏈,可以配合各種插件使用,例如對 JavaScript、CSS文件進行壓縮,對less進行編譯等;而 WebPack能把項目中的各種 JavaScript、CSS文件等打包合并成一個或者多個文件,主要用于模塊化開發(fā)。

          (2)側(cè)重點不同。gulp側(cè)重于整個過程的控制管理(像是流水線),通過配置不同的任務(wù),構(gòu)建整個前端開發(fā)流程,并且gulp的打包功能是通過安裝gulp-webpack來實現(xiàn)的;WebPack則側(cè)重于模塊打包。

          (3) WebPack能夠按照模塊的依賴關(guān)系構(gòu)建文件組織結(jié)構(gòu)。

          20、window對象中,模塊間的依賴關(guān)系完全由文件的加載順序決定,這樣的模塊組織方式出現(xiàn)的弊端是什么?

          弊端如下。

          (1)全局作用域下容易造成變量沖突。

          (2)文件只能按照< script>的書寫順序進行加載

          (3)開發(fā)人員需要自己解決模塊代碼庫的依賴關(guān)系。

          (4)在大型項目中這樣的加載方式會導(dǎo)致文件冗長而難以管理。

          21、如何用 webpack-dev- server監(jiān)控文件編譯?

          打開多個控制臺,用 webpack--watch實時監(jiān)控文件變動,并隨時編譯。

          22、如何修改 webpack-dev- server的端口?

          用--port修改端口號,如 webpack-dev-server--port888。

          23、publicPath是什么?

          在 WebPack自動生成資源路徑時,比如由于 WebPack異步加載分包而需要獨立出來的塊,或者打包CSS時, WebPack自動替換掉的圖片、字體文件,又或者使用html-webpack-plugin后 WebPack自動加載的入口文件等,這些 WebPack生成的路徑都會參考 publicPath參數(shù)。不需要關(guān)注CDN,需要關(guān)注的是,文件發(fā)布出來后,應(yīng)該部署到哪里。如果文件是與頁面放到一起的,那么可以按相對路徑來設(shè)置,比如'./'之類的;而如果 JavaScript、CSS文件用于存放CDN,當(dāng)然就要填寫CDN的域名和路徑。

          24、export、 export default和 module.export的區(qū)別是什么?

           export、 export default都屬于 EMAScript 6 模塊化開發(fā)規(guī)范。

          export和 export default的區(qū)別如下。

          在同一個文件里面可以有多個 export,一個文件里面只能有1個 export default。

          使用 import引入的方式也有點區(qū)別。

          在使用 export時,用 import引入的相應(yīng)模塊名字一定要和定義的名字一樣;而在使用 export default時,用 import引入的模塊名字可以不一樣。

          module. export屬于 CommonJS語法規(guī)范。

          25、當(dāng)使用Babel直接打包的 JavaScript文件中含有jsx語法的時候會報錯,如何解決這個問題?

          修改 package. json并添加 react,如以下代碼所示。

          "babel":{    "presets":[          "es2015",             "react",           "stage-o"], "plugins" :["add-module-exports"]}

          26、當(dāng)使用html- webpack- plugin時找不到指定的 template文件怎么辦?

          通過以下代碼進行解決。

          {test:/ \.html ?$/,loader : 'html-loader '}

          也就是將以前的file-loader修改為html- loader就可以了。

          27、WebPack如何切換開發(fā)環(huán)境和生產(chǎn)環(huán)境?

          生產(chǎn)環(huán)境與開發(fā)環(huán)境的區(qū)別無非就是調(diào)用的接口地址、資源存放路徑、線上的資源是否需要壓縮等方面。目前的做法是通過在 package. json中設(shè)置node的一個全局變量,然后在 webpack. config. js文件里面進行生產(chǎn)環(huán)境與開發(fā)環(huán)境的配置切換。

          28、WebPack的特點是什么?

          特點如下:

          (1)具有豐富的插件,方便程序員進行開發(fā)。

          (2)具有大量的加載器,包括加載各種靜態(tài)資源。

          (3)支持代碼分割,提供按需加載的能力。

          (4)它是一個理想的發(fā)布工具。

          29、WebPack的優(yōu)勢是什么?

          優(yōu)勢如下:

          (1) WebPack以 CommonJS的形式書寫腳本,對 AMD/CMD的支持也很全面,方便對舊項目進行代碼遷移

          (2)絕大部分前端資源都可以模塊化。

          (3)開發(fā)便捷,能替代 grunt/gulp的部分工作,如程序打包、壓縮混淆、圖片轉(zhuǎn)base64編碼等。

          (4)擴展性強,插件機制完善,特別是支持 React熱插拔功能。

          30、圖片處理常見的加載器有幾種?

          有以下幾種。

          (1)file- loader,默認情況下會根據(jù)圖片生成對應(yīng)的MD5散列的文件格式。

          (2)url- loader,它類似于file- loader,但是url- loader可以根據(jù)自身文件的大小,來決定是否把轉(zhuǎn)化為base64格式的 DataUrl單獨作為文件,也可以自定義對應(yīng)的散列文件名。

          (3) image- webpack- loader,提供壓縮圖片的功能。

          31、WebPack命令的-- config選項有什么作用?

          -- config用來指定一個配置文件,代替命令行中的選項,從而簡化命令。如果直接執(zhí)行 WebPack, WebPack會在當(dāng)前目錄下查找名為 webpack. config. js的文件。

          本文完?


          瀏覽 75
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄色a级三级毛片免费 | 非洲大屌操逼 | 国产黄片免费 | 久久99精品久久久水蜜桃 | 夜夜躁狠狠躁日日躁麻豆老人 |