亚洲国产日韩人妖另类,久久只有这里有精品热久久,依依成人精品视频在线观看,免费国产午夜视频在线

      
      

        vue3源碼分析-rollup打包monorepo

        vue3源碼分析-rollup打包monorepo

        引言

      1. 手寫vue3源碼——創(chuàng)建項目
      2. 手寫vue3源碼——reactive, effect ,scheduler, stop
      3. 手寫vue3源碼——readonly, isReactive,isReadonly, shallowReadonly
      4. 手寫vue3源碼——ref, computed
      5. 本期咋們就先放一放源碼,咋們?nèi)绾未虬黰onorepo應(yīng)用,主要是源碼看累了,打包工具也是一門必須課,所有的源碼請查看

        效果

        為了提供大家的學(xué)習(xí)興趣,咋們先來看看效果,準(zhǔn)備發(fā)車,請系好安全帶

        cjs 結(jié)果預(yù)覽

        esm 結(jié)果預(yù)覽

        聲明文件預(yù)覽

        正文

        vue3使用的是rollup來打包的,咋們也用rollup來打包咋們的應(yīng)用,有不了解rollup的請查看官網(wǎng),monorepo是多個單體倉庫合并得到的,那么咋們就先來打包單個倉庫,然后再來想辦法怎么一鍵打包全部

        打包shared

        在我項目中,shared倉庫是相當(dāng)與utils函數(shù)的集合,用于對外導(dǎo)出一些工具函數(shù),那么咋們可以在本目錄下的package.json中安裝rollup。 正當(dāng)我就想在shared目錄下面安裝rollup插件的時候,我大腦給了個慢著的問號?

        monorepo 是不是可以在跟下面安裝依賴,然后子包都可以共享,基于這一特征。我毫不猶豫在根目錄下面敲下了下面的命令

        pnpm add rollup -w -D復(fù)制代碼

        有了rollup,咋們是不是需要在打包的目錄下面來搞個配置文件rollup.config.js,里面咋們寫上入口,出口,打包的格式等

        // 由于咋們需要打包成cjs, ems的格式,對外導(dǎo)出一個函數(shù)吧[ { input: ‘./src/index.ts’, output: { file: ‘dist/index.esm.js’, format: ‘esm’, }, }, { input: ‘./src/index.ts’, output: { file: ‘dist/index.cjs.js’, format: ‘cjs’, }, } ]復(fù)制代碼

        然后在本目錄下的package.json中加入打包的命令:

        “build”: “rollup -c”復(fù)制代碼

        nice, 到這了就完了,咋們試一下,結(jié)果:

        分析錯誤可以發(fā)現(xiàn),咋們是用了ts的語法,rollup無法轉(zhuǎn)換ts的語法,需要使用插件了。

        那么rollup轉(zhuǎn)換ts的插件也是有好多種,這里咋們用一個最快的那種,esbuild, rollup-plugin-esbuild

        pnpm add esbuild rollup-plugin-esbuild -w -D復(fù)制代碼

        關(guān)于rollup-plugin-esbuild這個插件,官方的介紹是說:

        esbuild is by far one of the fastest TS/ESNext to ES6 compilers and minifier, this plugin replaces rollup-plugin-typescript2, @rollup/plugin-typescript and rollup-plugin-terser for you. 意思是說,這個插件是目前來說轉(zhuǎn)換ts/esnext到es6是最快的編譯和壓縮,這個插件可以代替 rollup-plugin-typescript2, @rollup/plugin-typescript and rollup-plugin-terser的集合

        但是如果咋們需要打包非常低版本的代碼,那就請查看rollup 實戰(zhàn)第三節(jié) 打包生產(chǎn)打包低版本的代碼.

        言歸正傳,那么咋們把插件用上,在配置文件上加上插件

        //… 省略其他plugins: [ esbuild({ target: ‘node14’, }), ]復(fù)制代碼

        再來一次

        通過結(jié)果,咋們可以看到已經(jīng)打包成功了!

        但是咋們是有ts的,肯定還需要生成咋們代碼的類型吧,那就使用 rollup-plugin-dts這個來生成

        pnpm add rollup-plugin-dts -w -D復(fù)制代碼

        rollup-plugin-dts詳情請查看

        // 在數(shù)組后面在加上一項,{ input: ‘./src/index.ts’, output: { file: ‘dist/index.dts’, format: ‘esm’, }, plugins: [ dts(), ], },復(fù)制代碼

        然后就可以ok啦,咋們單個項目就完成了

        打包多個

        既然單個是這么寫,那么其他的咋們是不是也可以寫配置文件呢?對的,沒錯,可以在對應(yīng)的單體項目下面寫上rollup.config.js來對他們進行打包的配置

        然后咋們在跟目錄下面的package.json中加入一行命令:

        “build”: “pnpm -r –filter=./packages/** run build”復(fù)制代碼

        咋們來拆分下命令

      6. pnpm -r 等同于 pnpm –recursive,意思是說在工作區(qū)的每個項目中運行命令,不包括根項目,詳情查看
      7. –filter=./packages/**意思是說,過濾其他文件和文件夾,只使用packages下面的所有文件夾
      8. run build 是 pnpm -r run build的后綴,執(zhí)行package.json中的build指令,詳情請查看
      9. 合起來的意思是說,依次執(zhí)行packages里面所有文件夾的package.json的build命令

        優(yōu)化

        通過上面的方式咋們就可以打包成功了,但是這里咋們還可以進行優(yōu)化下,每一次打包dist結(jié)果都需要手動刪除,咋們可以使用 rimraf 這個庫來幫我們自動刪除

        pnpm add rimraf -d -W復(fù)制代碼

        然后在每一個子包中修改build的命令

        “build”: “rimraf dist && rollup -c”復(fù)制代碼

        對比vue3打包

        這里可能有的人會說,vue3倉庫都不是這么玩的,的確,vue3倉庫的打包流程如下:

        有興趣的可以取看源碼哈,這里給出流程圖,想要使用這種方式的就自己實現(xiàn)哈!

        鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
        上一篇 2022年6月15日 15:25
        下一篇 2022年6月15日 15:25

        相關(guān)推薦

        聯(lián)系我們

        聯(lián)系郵箱:admin#wlmqw.com
        工作時間:周一至周五,10:30-18:30,節(jié)假日休息