內(nèi)部組件庫(kù)打包會(huì)把element-plus打包到node_modules/.pnpm/目錄問(wèn)題處理

內(nèi)部組件庫(kù)打包會(huì)把element-plus打包到node_modules/.pnpm/目錄問(wèn)題處理

問(wèn)題描述

將 element-plus 等第三方庫(kù)打包到內(nèi)部庫(kù)里面有可能會(huì)導(dǎo)致以下問(wèn)題:

  • 應(yīng)用打包失敗
  • 內(nèi)部組件庫(kù)用的 element-plus 組件是內(nèi)部庫(kù)的 element-plus 瘪阁,應(yīng)用用的 element-plus 組件是 node_modules 的 element-plus ,代碼用的不是一套邮偎,導(dǎo)致彈窗層級(jí)會(huì)有問(wèn)題管跺,會(huì)被覆蓋而看不到。(這個(gè)問(wèn)題還有其他解決方法禾进,不如這個(gè)方法好豁跑,這里就不在重點(diǎn)介紹了,大體的思路是通過(guò) useZIndex 同步各個(gè)組件庫(kù)的 zIndex , 解決多組件庫(kù)統(tǒng)一層疊順序問(wèn)題的本質(zhì)就是在項(xiàng)目的應(yīng)用層再實(shí)現(xiàn)一個(gè) zIndex 管理器泻云。管理器需要接受來(lái)自不同組件庫(kù)的 zIndex 管理器艇拍,并在任一管理器中的 zIndex 值發(fā)生變化時(shí),把變化同步到其它管理器中宠纯⌒断Γ可以參考:Element 黑魔法,統(tǒng)一多組件庫(kù)的層疊順序 https://juejin.cn/post/7131754451873824775

解決思路

屬性 external 接收一個(gè)模塊名稱(chēng)組成的數(shù)組婆瓜,或者接收一個(gè)參數(shù)為模塊名字的函數(shù)娇哆,如果需要把某模塊設(shè)置為外部引入,只需要讓該函數(shù)返回 true勃救。例如:

export default {
  // ...
  external: id => /lodash/.test(id)
}

解決方案:具體配置

/** @format */

// vite.config.js
import path from 'path';
import packageJsonObj from '../../package.json';

const { peerDependencies, dependencies } = packageJsonObj;
const externalList = [...Object.keys(peerDependencies), ...Object.keys(dependencies)];
export default {
    build: {
        lib: {
            entry: path.resolve(__dirname, '../../src/entry/lib/main/index.ts'),
            name: 'PowerComponentsMain',
            formats: ['es', 'cjs'],
            // the proper extensions will be added
            fileName: 'index',
        },
        sourcemap: true,

        rollupOptions: {
            // 確保外部化處理那些你不想打包進(jìn)庫(kù)的依賴(lài)
            external: (id) => {
                const str = `${externalList.join('|').replaceAll('/', '[\\\\/]')}`;
                const newId = id.replaceAll('.vue', '').replaceAll('?vue', '').replaceAll('vue&', '');
                const regExp = new RegExp(str);
                let external = false;
                if (newId.indexOf('pc-') > -1) {
                    external = false;
                } else {
                    external = regExp.test(newId);
                }
                return external;
            },
            // external: [
            //  '@element-plus/icons-vue',
            //  '@vueuse/core',
            //  'ace-builds',
            //  'ace-builds/src-min-noconflict/mode-javascript',
            //  'js-cookie',
            //  'quill',
            //  'element-plus/es',
            //  'element-plus',
            //  'axios',
            //  'dayjs',
            //  'echarts',
            //  'pinia',
            //  'vue',
            //  'vue-router',
            // ],
            input: [path.resolve(__dirname, '../../src/entry/lib/main/index.ts')],
            output: [
                {
                    format: 'es',
                    //不用打包成.es.js,這里我們想把它打包成.js
                    entryFileNames: '[name].js',
                    //讓打包目錄和我們目錄對(duì)應(yīng)
                    preserveModules: true,
                    //配置打包根目錄
                    dir: 'dist/es',
                    preserveModulesRoot: path.resolve(__dirname, '../../src'),
                },
                {
                    format: 'cjs',
                    entryFileNames: '[name].js',
                    //讓打包目錄和我們目錄對(duì)應(yīng)
                    preserveModules: true,
                    //配置打包根目錄
                    dir: 'dist/lib',
                    preserveModulesRoot: path.resolve(__dirname, '../../src'),
                },
            ],
        },
    },
};

按這個(gè)配置配好后碍讨,一般的應(yīng)該不用太關(guān)心這個(gè)方法,特殊的打包有問(wèn)題了蒙秒,可以考慮一下是不是 external 這里的問(wèn)題勃黍,例如vue和內(nèi)部組件 pc- 有進(jìn)行特殊處理,避免沖突和問(wèn)題晕讲。

參考:
Rollup 集成第三方工具 https://www.rollupjs.com/guide/tools#%E5%89%8D%E7%BD%AE%E4%BE%9D%E8%B5%96peer-dependencies

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末覆获,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瓢省,更是在濱河造成了極大的恐慌弄息,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勤婚,死亡現(xiàn)場(chǎng)離奇詭異摹量,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)缨称,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)凝果,“玉大人,你說(shuō)我怎么就攤上這事睦尽∑骶唬” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵当凡,是天一觀的道長(zhǎng)山害。 經(jīng)常有香客問(wèn)我,道長(zhǎng)沿量,這世上最難降的妖魔是什么粗恢? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮欧瘪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘匙赞。我一直安慰自己佛掖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布涌庭。 她就那樣靜靜地躺著芥被,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坐榆。 梳的紋絲不亂的頭發(fā)上拴魄,一...
    開(kāi)封第一講書(shū)人閱讀 52,337評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音席镀,去河邊找鬼匹中。 笑死,一個(gè)胖子當(dāng)著我的面吹牛豪诲,可吹牛的內(nèi)容都是我干的顶捷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼屎篱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼服赎!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起交播,我...
    開(kāi)封第一講書(shū)人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤重虑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后秦士,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體缺厉,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芽死。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乏梁。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖关贵,靈堂內(nèi)的尸體忽然破棺而出遇骑,到底是詐尸還是另有隱情,我是刑警寧澤揖曾,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布落萎,位于F島的核電站,受9級(jí)特大地震影響炭剪,放射性物質(zhì)發(fā)生泄漏练链。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一奴拦、第九天 我趴在偏房一處隱蔽的房頂上張望媒鼓。 院中可真熱鬧,春花似錦错妖、人聲如沸绿鸣。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)潮模。三九已至,卻和暖如春痴施,著一層夾襖步出監(jiān)牢的瞬間擎厢,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工辣吃, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留动遭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓神得,卻偏偏與公主長(zhǎng)得像沽损,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子循头,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容