亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Webpack4 使用Babel處理ES6語(yǔ)法的方法示例

 更新時(shí)間:2019年03月07日 14:30:48   作者:蘆葦De四季  
這篇文章主要介紹了Webpack4 使用Babel處理ES6語(yǔ)法的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

修改 index.js 內(nèi)容,寫一些 ES6 的語(yǔ)法:

const arr = [
  new Promise(() => {}),
  new Promise(() => {})
];

arr.map(item => {
  console.log(item);
})

ES6 很強(qiáng)大,但目前并不是所有的瀏覽器都支持,所以需要用到 Babel,讓舊的瀏覽器或環(huán)境中將 ES6 代碼轉(zhuǎn)換為向后兼容版本的 JavaScript 代碼。

來(lái)試一下吧,先安裝需要用的 Babel 包:

npm install babel-loader @babel/core -D

配置 webpack.config.js,增加一條 rulues :

 module: {
  rules: [{
   test: /\.js$/,
   exclude: /node_modules/, // 排除該目錄下的所有代碼
   loader: "babel-loader"
  }]
 }

babel-loader 告訴了 webpack 怎么處理 ES6 代碼,但它并不會(huì)將ES6 代碼翻譯成向后兼容版本的代碼,如果想要執(zhí)行這一步,還需要安裝一個(gè)模塊 preset-env,它包含了所有 ES6 代碼轉(zhuǎn)換的規(guī)則:

npm install @babel/preset-env -D

安裝完之后配置一下:

rules: [{
 test: /\.js$/,
 exclude: /node_modules/, // 排除該目錄下的所有代碼
 loader: 'babel-loader',
 options:{
  'presets': ['@babel/preset-env']
 }
}]

這樣,運(yùn)行打包命令,就可以把 ES6 語(yǔ)法翻譯成 ES5了,看一下打包的結(jié)果:

沒(méi)問(wèn)題,語(yǔ)法已經(jīng)翻譯成了當(dāng)前所有瀏覽器能識(shí)別的語(yǔ)法,但是做到了這一點(diǎn)還是不夠,因?yàn)槟切┍容^新的對(duì)象和函數(shù),比如這里的 Promisemap,在低版本的瀏覽器里實(shí)際還是不存在的。所以這時(shí)不僅要進(jìn)行語(yǔ)法的轉(zhuǎn)換,還要想辦法把這些新的特性,補(bǔ)充到低版本的瀏覽器里。怎么做呢? babel 提供了一個(gè)工具叫 polyfill,安裝:

npm install @babel/polyfill -D

然后在 index.js 的最頂部,引入這個(gè)包:

import '@babel/polyfill'

保存代碼,再次進(jìn)行打包查看結(jié)果,可以發(fā)現(xiàn)打包后的 main.js 里面,有了很多代碼來(lái)幫助實(shí)現(xiàn)比如 Promisemap 這些新特性。看一下 main.js 文件的大?。?/p>

859KB,再看一下沒(méi)有使用 polyfill 之前的 main.js 大?。?/p>

只有4.36KB,使用 polyfill 之后文件變大了很多,這說(shuō)明了 polyfill 使用了非常多的代碼來(lái)填入新特性。
但是,index.js 里只使用了 Promisemap,其它的新特性都沒(méi)用,能不能把那些沒(méi)用到的實(shí)現(xiàn)方法都剔除了呢? 可以,給 preset-env 增加一個(gè) useBuiltIns 配置:

rules: [{
 test: /\.js$/,
 exclude: /node_modules/, // 排除該目錄下的所有代碼
 loader: 'babel-loader',
 options: {
  'presets': [
   ['@babel/preset-env', {
    useBuiltIns: 'usage'
   }]
  ]
 }
}]

useBuiltIns: 'usage' 的意思就是說(shuō),當(dāng)使用 polyfill 往低版本瀏覽器填入一些不存在的特性時(shí),不是全部都填入,而是根據(jù)業(yè)務(wù)代碼使用到的特性去選擇填入,比如這里使用了 Promisemap,那就只填入這兩個(gè),其它的都不用。 再次打包查看結(jié)果:

可以看到,main.js 的大小只有 138KB了。

這里還可以配置一些其它的參數(shù),比如 targets 參數(shù):

rules: [{
 test: /\.js$/,
 exclude: /node_modules/, // 排除該目錄下的所有代碼
 loader: 'babel-loader',
 options: {
  'presets': [
   ['@babel/preset-env', {
    useBuiltIns: 'usage',
    targets:{
     edge: '17', // edge高于17的版本
     firefox: '60', // firefox 高于60的版本
     chrome: '67' // chrome高于67的版本
    }
   }]
  ]
 }
}]

targets 是指打包會(huì)運(yùn)行在什么樣的瀏覽器,這有三個(gè)瀏覽器,并注明了最低版本。在打包的過(guò)程中,babel 會(huì)去看這些瀏覽器對(duì) ES6 代碼的支持情況,是否有必要進(jìn)行語(yǔ)法轉(zhuǎn)換、填入一些新特性。 運(yùn)行打包命令查看結(jié)果:

發(fā)現(xiàn)還是輸出的 Promisemap,并沒(méi)有進(jìn)行新特性的填入,說(shuō)明這三個(gè)版本的瀏覽器對(duì) ES6 的支持已經(jīng)很好了,不需要在進(jìn)行額外的處理,main.js 的大小是變成了最初的4.36KB。

到此為止,webpack 對(duì) ES6 的簡(jiǎn)單處理就完成了。

關(guān)于 babel 還有很多東西和配置項(xiàng),更多的知識(shí)要到 https://babel.docschina.org 來(lái)學(xué)習(xí)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論