在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    vue3源碼分析-rollup打包monorepo

    vue3源碼分析-rollup打包monorepo

    引言

  • 手寫vue3源碼——創(chuàng)建項(xiàng)目
  • 手寫vue3源碼——reactive, effect ,scheduler, stop
  • 手寫vue3源碼——readonly, isReactive,isReadonly, shallowReadonly
  • 手寫vue3源碼——ref, computed
  • 本期咋們就先放一放源碼,咋們?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

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

    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 實(shí)戰(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ù)組后面在加上一項(xiàng),{ input: ‘./src/index.ts’, output: { file: ‘dist/index.dts’, format: ‘esm’, }, plugins: [ dts(), ], },復(fù)制代碼

    然后就可以ok啦,咋們單個項(xiàng)目就完成了

    打包多個

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

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

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

    咋們來拆分下命令

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

    優(yōu)化

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

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

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

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

    對比vue3打包

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

    有興趣的可以取看源碼哈,這里給出流程圖,想要使用這種方式的就自己實(shí)現(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
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息