国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Gulp打包支持Await/Async語法

開發 前端
在項目中,最近需要對node代碼進行混淆編譯,原來曾經解決過ES6打包混淆的問題,在使用的是gulp打包,為了提升代碼質量還有異步操作順序問題,使用了async/await語法,原來的gulpfile混淆又出問題了。

 [[407602]]

本文轉載自微信公眾號「前端學苑」,作者前端小賈。轉載本文請聯系前端學苑公眾號。

簡短的概括:

1使用 ES7 的 async/await 時報錯

在項目中,最近需要對node代碼進行混淆編譯,原來曾經解決過ES6打包混淆的問題,在使用的是gulp打包,為了提升代碼質量還有異步操作順序問題,使用了async/await語法,原來的gulpfile混淆又出問題了。

出現問題:

打包完后瀏覽器報錯gulp

  1. Uncaught ReferenceError: regeneratorRuntime is not defined 

對 babel polyfill 的一些理解

一、babel 和 babel ployfill 的關系

1、先來理解下 babel 到底是做什么的?

簡單來講,babel解決語法層面的問題。用于將ES6+的高級語法轉為ES5。

2、babel polyfill 又是做什么的?

如果要解決API層面的問題,需要使用墊片。比如常見的有babel-polyfill、babel-runtime 和 babel-plugin-transform-runtime。

理清了他們之間的關系,那么再正式來講講有關polyfill的二三事。

二、polyfill 種類

babel polyfill 有三種

  1. * babel-polyfill 
  2. * babel-runtime 
  3. * babel-plugin-transform-runtime 

1babel-polyfill

babel-polyfill通過向全局對象和內置對象的prototype上添加方法來實現的。所以這會造成全局空間污染。

babel-polyfill使用的兩種方式

1) webpack.config.js 中:

配置webpack.config.js里的entry設置為entry: ['babel-polyfill',path.join(__dirname, 'index.js')]

2) 業務 js 中:

在webpack.config.js配置的主入口index.js文件的最頂層鍵入

  1. import 'babel-polyfill' 

兩者打印出來的大小都是一樣的,打包后大小是280KB,如果沒有使用babel-polyfill,大小是3.43kb。兩則相差大概81.6倍。原因是webpack把babel-polyfill整體全部都打包進去了。而babel-polyfill肯定也實現了所有ES6新API,文件一定不會小。

那么有沒有一種辦法,根據實際代碼中用到的ES6新增API ,來使用對應的墊片,而不是全部加載進去呢?

是的,有的。那就是 babel-runtime & babel-plugin-transform-runtime,他們可以實現按需加載。

2babel-runtime

簡單說 babel-runtime 更像是一種按需加載的實現,比如你哪里需要使用 Promise,只要在這個文件頭部

  1. import Promise from 'babel-runtime/core-js/promise' 

不過如果你許多文件都要使用 Promise,難道每個文件都要 import 一下嗎?當然不是,Babel 官方已考慮這種情況,只需要使用 babel-plugin-transform-runtime 就可以解決手動 import 的苦惱了。

3babel-plugin-transform-runtime

babel-plugin-transform-runtime 裝了就不需要裝 babel-runtime了,因為前者依賴后者。

總的來說,babel-plugin-transform-runtime 就是可以在我們使用新 API 時 自動 import babel-runtime 里面的 polyfill,具體插件做了以下三件事情:

1) 當我們使用 async/await 時,自動引入 babel-runtime/regenerator;

2) 當我們使用 ES6 的靜態事件或內置對象時,自動引入 babel-runtime/core-js;

3) 移除內聯 babel helpers 并替換使用 babel-runtime/helpers 來替換;

babel-plugin-transform-runtime 優點:

1) 不會污染全局變量;

2) 多次使用只會打包一次;

3) 依賴統一按需引入,無重復引入,無多余引入;

4) 避免 babel 編譯的工具函數在每個模塊里重復出現,減小庫和工具包的體積;

使用方式

在 .babelrc 中配置:

  1. plugins:\["tranform-runtime"\] 

打包后大小為 17.4kb,比之前的280kb要小很多。

gulp打包報錯 - 問題分析與解決方案

頁面 是用gulp起的服務,然后寫的代碼,這次是在js里用了es7的async/await,導致打包完之后報錯:

Uncaught ReferenceError: regeneratorRuntime is not defined

一、原因分析(regeneratorRuntime函數)

在程序中使用了 async/await ,經過@babel/preset-env 解析后會將代碼轉換為一個名為regeneratorRuntime的函數,但是轉換后的代碼僅僅存在這個函數的調用,并沒有具體的定義體現。

通過百度,好多人會告訴你讓你去裝一個叫做

  1. 'transform-runtime' 

transform-runtime插件是運行在node服務器上的,所以即使你裝了,瀏覽器照樣不認識。

二、解決方案(babel-polyfill編譯)

需要的在gulp-babel給你編譯的時候,把regeneratorRuntime再轉換一次,這就用到了babel的babel-polyfill。

安裝完成以后,在node_modules里邊找到這個包,然后把dist下的polyfill.min.js這個js引入到頁面的head里邊去,這樣再一次打包的時候,_asyncToGenerator 這個東西就會返回一個函數了,函數瀏覽器是認識的,再運行一下項目就沒問題了。

 

責任編輯:武曉燕 來源: 前端學苑
相關推薦

2021-06-15 05:36:45

Gulpawaitasync

2022-06-13 07:36:47

useEffectHooks

2021-08-18 07:05:57

ES6Asyncawait

2016-10-27 17:05:32

Chrome瀏覽器

2014-07-15 10:31:07

asyncawait

2016-11-22 11:08:34

asyncjavascript

2012-07-22 15:59:42

Silverlight

2023-10-08 10:21:11

JavaScriptAsync

2021-07-20 10:26:12

JavaScriptasyncawait

2022-08-27 13:49:36

ES7promiseresolve

2023-07-28 07:31:52

JavaScriptasyncawait

2024-12-30 08:22:35

2024-12-23 08:00:45

2017-11-02 15:26:10

JavaScriptasync錯誤

2017-04-10 15:57:10

AsyncAwaitPromise

2022-06-16 10:37:09

asyncawait

2014-07-15 10:08:42

異步編程In .NET

2017-08-02 14:17:08

前端asyncawait

2022-11-21 09:01:00

Swift并發結構

2024-09-02 14:12:56

點贊
收藏

51CTO技術棧公眾號

国产女人18毛片水18精品| 欧美成人精品3d动漫h| 国产精品久久久久久久午夜| 中文字幕伦理免费在线视频 | 牛人盗摄一区二区三区视频| 日韩欧美久久| 日韩电影第一页| 免费成人av电影| 亚洲欧美一区二区在线观看| 欧美大陆一区二区| 亚洲国产精品91| 青青久久av北条麻妃海外网| 国产精品久久久久久久久免费高清 | av亚洲免费| 最近2019中文字幕大全第二页| 国产网友自拍视频导航网站在线观看 | 日韩免费在线视频| 成人短视频软件网站大全app| 精品国产网站在线观看| 黄色片视频在线观看| 亚洲色图.com| 午夜激情在线观看视频| 97成人超碰视| 成人精品视频在线播放| 日韩电影免费一区| 国产尤物99| 在线观看的日韩av| 91久久国产自产拍夜夜嗨| 久久99国产精品视频| 国内外成人免费激情在线视频| 国产精品成人国产| 国产一区二区三区在线| 四季久久免费一区二区三区四区| 欧美色网一区二区| 理论在线观看| 在线区一区二视频| 999国产在线视频| 欧美亚洲一区二区在线| 男男激情在线| 欧美日韩免费观看一区二区三区| 免费国产在线视频| 午夜精品免费在线| 三级无遮挡在线观看| 亚洲图片欧美视频| 中文字幕在线二区| 欧美日韩国产精品一区二区三区四区 | 快射av在线播放一区| 色天天综合久久久久综合片| 欧美变态视频| 日韩欧美国产一区二区| 日本一本草久在线中文| 一本一本大道香蕉久在线精品| 青青青免费视频在线2| 在线观看av不卡| 成人在线播放| 亚洲成人网在线观看| 北岛玲heyzo一区二区| 在线看日韩av| 亚洲一区二区电影| 日韩av电影手机在线| 91影院成人| 精品产品国产在线不卡| 麻豆精品视频在线观看免费| 色综合男人天堂| 全国精品免费看| 91在线观看免费高清完整版在线观看| 国产精品a久久久久| 美乳视频一区二区| 国产精品一区二区视频| 手机在线看福利| 欧美日韩午夜视频在线观看| 中文字幕在线观看网站| 久久久国产精品x99av| 欧美精品系列| 手机成人在线| 国产精品美女一区二区三区| 在线观看免费国产小视频| 欧美日韩精品欧美日韩精品| 日本免费久久| 国产精品视频999| 久久精品久久综合| 免费一区二区三区在线观看| 欧美日韩成人综合天天影院| 欧美电影免费观看| 热门国产精品亚洲第一区在线| 国产亚洲亚洲| 日本一区二区黄色| 欧美在线影院一区二区| 日韩欧乱色一区二区三区在线 | 色婷婷在线播放| 免费91在线视频| 国产一区视频在线观看免费| 高清成人免费视频| 国产欧美日韩精品高清二区综合区| 成人免费在线网址| 日本强好片久久久久久aaa| 国内自拍视频网| 欧美日韩免费高清一区色橹橹 | 毛片中文在线观看| 日韩欧美亚洲一区二区| 全国精品免费看| 伊人狠狠色丁香综合尤物| 亚洲欧美日韩人成在线播放| 激情在线视频播放| 国产精品一区二区女厕厕| 成人深夜视频在线观看| 久久久久久久久亚洲精品| 不卡中文字幕av| 日韩中文欧美在线| 看黄色免费网站| 色偷偷综合社区| 国产日韩欧美在线播放不卡| 久久久久狠狠高潮亚洲精品| 欧美一区二区三区四区五区| 精品久久中文| 精品99在线视频| 日韩中文综合网| 波多野结衣在线一区二区| 伦理电影国产精品| 国产精品普通话| 亚洲国产欧美在线| 日韩av在线免费观看不卡| 风间由美性色一区二区三区四区| 伊人中文在线| xxx欧美精品| 欧美日韩麻豆| 欧美亚洲成人xxx| 国产精品一二三区在线| 久久影视三级福利片| 日本在线视频网| 日韩欧美一二三区| 色的视频在线免费看| 日韩不卡一二三| 97在线播放视频| 日韩在线观看a| 特色特色大片在线| 日韩欧美三级一区二区| 久久99精品久久久久子伦| 成人在线中文字幕| 亚洲一区二区三区在线免费观看| 国产mv免费观看入口亚洲| 国产成人在线一区| 欧美日韩电影一区| 26uuu久久天堂性欧美| 91久久高清国语自产拍| 天堂av中文在线观看| 日韩欧美视频免费在线观看| 国产成人a亚洲精品| 中文字幕亚洲专区| 中文字幕第一区| 精品一区二区三区免费毛片爱 | 亚洲国产一区二区三区在线观看 | 久久亚洲精品人成综合网| 国产欧美日韩最新| 一区二区日韩av| 好吊妞视频这里有精品| 国产精品免费在线| 久久久精品美女| 欧美变态tickle挠乳网站| 91精品国产综合久久国产大片| 91精品国产91久久久久久最新毛片| 亚洲aⅴ怡春院| 亚洲精品在线三区| 久久一区国产| 国产精品一二三| 亚洲免费在线电影| 天天操天天干天天综合网| 亚洲动漫第一页| 91精品国产手机| 在线免费观看羞羞视频一区二区| 欧美高清视频不卡网| 精品久久香蕉国产线看观看亚洲| av激情亚洲男人天堂| 精品动漫av| 极品av少妇一区二区| 欧美疯狂party性派对| 欧洲三级视频| 99视频精品全部免费在线视频| 亚洲精品555| 人人超在线公开视频| jizz视频在线观看| 调教视频免费在线观看| 日韩专区第三页| 国产伦精品一区二区三区四区视频 | 主播大秀视频在线观看一区二区| 欧美一级黄色录像片| 欧美精品国产一区| 久久精品xxxxx| 日本欧美视频在线观看| 日韩国产高清一区| 成年人视频网站免费观看| 伊人免费在线| 欧美日韩一区二区三区不卡视频| 亚洲超碰精品一区二区| 色婷婷av一区| 欧美激情a在线| av动漫在线播放| 亚洲91av| 亚洲精品日本| 91精品国产高清一区二区三区蜜臀|