cainiaoblog 23.2.171
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CNAME +1 -0
- package/MP_verify_o6dHCK5mIkxNpzvZ.txt +1 -0
- package/README.md +8 -0
- package/about/index.html +54 -0
- package/ads.txt +1 -0
- package/app/manual.html +104 -0
- package/appConfigs/config +1 -0
- package/archives/2018/index.html +48 -0
- package/archives/2019/index.html +48 -0
- package/archives/2019/page/2/index.html +48 -0
- package/archives/2020/index.html +48 -0
- package/archives/2021/index.html +48 -0
- package/archives/2022/index.html +48 -0
- package/archives/2023/index.html +48 -0
- package/archives/index.html +48 -0
- package/archives/page/2/index.html +48 -0
- package/archives/page/3/index.html +48 -0
- package/article/10047.html +148 -0
- package/article/10164.html +64 -0
- package/article/10624.html +436 -0
- package/article/10745.html +586 -0
- package/article/11674.html +71 -0
- package/article/11939.html +72 -0
- package/article/12238.html +86 -0
- package/article/1230.html +533 -0
- package/article/13265.html +69 -0
- package/article/13823.html +78 -0
- package/article/14125.html +72 -0
- package/article/14192.html +561 -0
- package/article/14375.html +85 -0
- package/article/14744.html +83 -0
- package/article/14936.html +451 -0
- package/article/1518.html +250 -0
- package/article/15428.html +71 -0
- package/article/15518.html +288 -0
- package/article/15569.html +418 -0
- package/article/1566.html +122 -0
- package/article/16017.html +156 -0
- package/article/16947.html +440 -0
- package/article/17096.html +82 -0
- package/article/17246.html +89 -0
- package/article/17575.html +350 -0
- package/article/179.html +757 -0
- package/article/18039.html +233 -0
- package/article/18071.html +375 -0
- package/article/18142.html +71 -0
- package/article/19909.html +160 -0
- package/article/20014.html +89 -0
- package/article/20021.html +389 -0
- package/article/20037.html +280 -0
- package/article/20056.html +95 -0
- package/article/20093.html +404 -0
- package/article/2021.html +607 -0
- package/article/20459.html +115 -0
- package/article/20613.html +263 -0
- package/article/20635.html +71 -0
- package/article/21317.html +71 -0
- package/article/21320.html +90 -0
- package/article/21782.html +548 -0
- package/article/22230.html +435 -0
- package/article/22237.html +347 -0
- package/article/22398.html +109 -0
- package/article/22422.html +270 -0
- package/article/22565.html +300 -0
- package/article/23046.html +250 -0
- package/article/23083.html +215 -0
- package/article/23195.html +297 -0
- package/article/23301.html +835 -0
- package/article/23589.html +285 -0
- package/article/23655.html +338 -0
- package/article/23864.html +76 -0
- package/article/23914.html +96 -0
- package/article/24169.html +135 -0
- package/article/24581.html +349 -0
- package/article/2475.html +500 -0
- package/article/24826.html +77 -0
- package/article/24924.html +247 -0
- package/article/25164.html +1495 -0
- package/article/25318.html +394 -0
- package/article/25710.html +1129 -0
- package/article/25734.html +83 -0
- package/article/26083.html +174 -0
- package/article/26147.html +283 -0
- package/article/26291.html +110 -0
- package/article/26354.html +71 -0
- package/article/26624.html +145 -0
- package/article/26639.html +298 -0
- package/article/26850.html +138 -0
- package/article/26940.html +258 -0
- package/article/27796.html +190 -0
- package/article/27800.html +161 -0
- package/article/28963.html +159 -0
- package/article/28976.html +247 -0
- package/article/29042.html +72 -0
- package/article/29596.html +81 -0
- package/article/29619.html +183 -0
- package/article/29623.html +329 -0
- package/article/29829.html +205 -0
- package/article/29abbd1c.html +112 -0
- package/article/30215.html +178 -0
- package/article/30552.html +78 -0
- package/article/30818.html +201 -0
- package/article/31330.html +364 -0
- package/article/3154.html +577 -0
- package/article/31695.html +348 -0
- package/article/31826.html +71 -0
- package/article/31843.html +132 -0
- package/article/32280.html +212 -0
- package/article/32431.html +74 -0
- package/article/32443.html +72 -0
- package/article/32732.html +122 -0
- package/article/3286.html +251 -0
- package/article/32960.html +198 -0
- package/article/33713.html +72 -0
- package/article/33899.html +615 -0
- package/article/34351.html +74 -0
- package/article/34372.html +89 -0
- package/article/34410.html +74 -0
- package/article/34431.html +118 -0
- package/article/3447.html +75 -0
- package/article/34474.html +142 -0
- package/article/34871.html +147 -0
- package/article/35397.html +175 -0
- package/article/3544.html +199 -0
- package/article/35503.html +115 -0
- package/article/35624.html +84 -0
- package/article/35697.html +384 -0
- package/article/35863.html +73 -0
- package/article/36037.html +253 -0
- package/article/36118.html +71 -0
- package/article/3621.html +119 -0
- package/article/36251.html +296 -0
- package/article/36642.html +352 -0
- package/article/37102.html +763 -0
- package/article/37336.html +351 -0
- package/article/37351.html +89 -0
- package/article/3760.html +294 -0
- package/article/37749.html +75 -0
- package/article/37789.html +83 -0
- package/article/38005.html +765 -0
- package/article/38009.html +284 -0
- package/article/38269.html +194 -0
- package/article/38344.html +88 -0
- package/article/38359.html +334 -0
- package/article/38423.html +379 -0
- package/article/38530.html +213 -0
- package/article/38743.html +268 -0
- package/article/38753.html +204 -0
- package/article/38881.html +71 -0
- package/article/39087.html +414 -0
- package/article/39309.html +84 -0
- package/article/39486.html +74 -0
- package/article/39637.html +306 -0
- package/article/39839.html +72 -0
- package/article/39937.html +152 -0
- package/article/39970.html +71 -0
- package/article/402.html +559 -0
- package/article/40698.html +71 -0
- package/article/40811.html +71 -0
- package/article/40964.html +462 -0
- package/article/41011.html +322 -0
- package/article/41152.html +78 -0
- package/article/41696.html +71 -0
- package/article/41717.html +281 -0
- package/article/41777.html +149 -0
- package/article/419.html +985 -0
- package/article/4233.html +136 -0
- package/article/4292.html +86 -0
- package/article/43302.html +96 -0
- package/article/43397.html +106 -0
- package/article/43724.html +281 -0
- package/article/43999.html +224 -0
- package/article/44426.html +77 -0
- package/article/44964.html +137 -0
- package/article/45004.html +123 -0
- package/article/4510.html +83 -0
- package/article/45156.html +320 -0
- package/article/45157.html +52 -0
- package/article/45267.html +87 -0
- package/article/45641.html +207 -0
- package/article/45960.html +75 -0
- package/article/46100.html +1262 -0
- package/article/46366.html +74 -0
- package/article/46771.html +96 -0
- package/article/46911.html +517 -0
- package/article/46948.html +137 -0
- package/article/46ee4850.html +349 -0
- package/article/47019.html +84 -0
- package/article/47532.html +94 -0
- package/article/4783.html +429 -0
- package/article/47972.html +72 -0
- package/article/48216.html +127 -0
- package/article/48252.html +185 -0
- package/article/48520.html +74 -0
- package/article/48722.html +75 -0
- package/article/48807.html +99 -0
- package/article/49126.html +323 -0
- package/article/50001.html +88 -0
- package/article/50058.html +151 -0
- package/article/50343.html +410 -0
- package/article/50510.html +82 -0
- package/article/51082.html +98 -0
- package/article/51677.html +111 -0
- package/article/5204.html +1085 -0
- package/article/52500.html +538 -0
- package/article/52689.html +259 -0
- package/article/52877.html +569 -0
- package/article/53125.html +191 -0
- package/article/53428.html +251 -0
- package/article/53524.html +74 -0
- package/article/53698.html +322 -0
- package/article/53803e6.html +93 -0
- package/article/53924.html +291 -0
- package/article/53962.html +253 -0
- package/article/54006.html +71 -0
- package/article/54018.html +88 -0
- package/article/54161.html +83 -0
- package/article/54178.html +69 -0
- package/article/54258.html +327 -0
- package/article/54295.html +214 -0
- package/article/54313.html +1976 -0
- package/article/54351.html +90 -0
- package/article/54604.html +80 -0
- package/article/54632.html +71 -0
- package/article/54912.html +756 -0
- package/article/54918.html +129 -0
- package/article/55119.html +136 -0
- package/article/55756.html +118 -0
- package/article/55769.html +136 -0
- package/article/55870.html +161 -0
- package/article/56139.html +92 -0
- package/article/56557.html +69 -0
- package/article/56604.html +69 -0
- package/article/56816.html +266 -0
- package/article/56926.html +153 -0
- package/article/57747.html +409 -0
- package/article/57965.html +475 -0
- package/article/58816.html +78 -0
- package/article/59059.html +435 -0
- package/article/59095.html +350 -0
- package/article/59349.html +244 -0
- package/article/59402.html +216 -0
- package/article/59448.html +55 -0
- package/article/59870.html +94 -0
- package/article/59877.html +208 -0
- package/article/5dbb6f41.html +86 -0
- package/article/6008.html +75 -0
- package/article/60327.html +126 -0
- package/article/6035.html +76 -0
- package/article/60428.html +71 -0
- package/article/60544.html +128 -0
- package/article/61319.html +95 -0
- package/article/61367.html +93 -0
- package/article/624d1918.html +292 -0
- package/article/62543.html +71 -0
- package/article/62887.html +169 -0
- package/article/63074.html +120 -0
- package/article/63266.html +311 -0
- package/article/63351.html +74 -0
- package/article/63542.html +104 -0
- package/article/63824.html +275 -0
- package/article/64051.html +653 -0
- package/article/64189b69.html +72 -0
- package/article/64354.html +75 -0
- package/article/64869.html +79 -0
- package/article/64923.html +596 -0
- package/article/65128.html +95 -0
- package/article/65295.html +79 -0
- package/article/6888.html +75 -0
- package/article/7065.html +84 -0
- package/article/7455.html +85 -0
- package/article/7a3ef8f.html +315 -0
- package/article/8140.html +188 -0
- package/article/8190.html +85 -0
- package/article/8225.html +78 -0
- package/article/84c9ccd6.html +159 -0
- package/article/8f9a9ae3.html +82 -0
- package/article/9174.html +73 -0
- package/article/9738.html +294 -0
- package/article/a4145266.html +71 -0
- package/article/bedea419.html +72 -0
- package/article/bf7e7421.html +78 -0
- package/article/c1867fbf.html +103 -0
- package/article/c5576490.html +70 -0
- package/article/dcb0db28.html +76 -0
- package/article/fc3b727a.html +79 -0
- package/atom.xml +445 -0
- package/baidusitemap.xml +1079 -0
- package/blocks/dns.txt +264 -0
- package/blocks/filter.txt +1070 -0
- package/blocks/script.js +42 -0
- package/categories/CDN/index.html +48 -0
- package/categories/IDE/index.html +48 -0
- package/categories/git/index.html +48 -0
- package/categories/hexo/index.html +48 -0
- package/categories//345/205/254/345/205/261/350/212/202/346/227/245/index.html +48 -0
- package/categories//345/210/206/344/272/253/index.html +48 -0
- package/categories//345/211/215/347/253/257/index.html +48 -0
- package/categories//345/211/215/347/253/257/page/2/index.html +48 -0
- package/categories//345/211/215/347/253/257//346/265/217/350/247/210/345/231/250/index.html +48 -0
- package/categories//345/211/215/347/253/257//346/265/217/350/247/210/345/231/250//347/275/221/347/273/234/345/215/217/350/256/256/index.html +48 -0
- package/categories//345/215/232/345/256/242/index.html +48 -0
- package/categories//345/267/245/345/205/267/index.html +48 -0
- package/categories//345/271/277/345/221/212/350/277/207/346/273/244/index.html +48 -0
- package/categories//345/271/277/345/221/212/350/277/207/346/273/244//350/247/206/351/242/221/347/224/265/350/247/206/345/260/217/350/257/264/346/274/253/347/224/273/350/265/204/350/256/257/351/237/263/344/271/220/index.html +48 -0
- package/categories//346/255/243/345/210/231/index.html +48 -0
- package/categories//346/265/217/350/247/210/345/231/250/index.html +48 -0
- package/categories//347/256/227/346/263/225/index.html +48 -0
- package/categories//350/265/204/350/256/257/index.html +48 -0
- package/categories//350/275/273/346/235/276/344/270/200/345/210/273/index.html +48 -0
- package/cdn/css/font-awesome.min.css +4 -0
- package/cdn/css/grids-responsive-min.css +7 -0
- package/cdn/css/normalize.css +349 -0
- package/cdn/css/pure-min.css +11 -0
- package/cdn/fonts/fontawesome-webfont.eot +0 -0
- package/cdn/fonts/fontawesome-webfont.svg +2671 -0
- package/cdn/fonts/fontawesome-webfont.ttf +0 -0
- package/cdn/fonts/fontawesome-webfont.woff +0 -0
- package/cdn/fonts/fontawesome-webfont.woff2 +0 -0
- package/cdn/js/Valine.min.js +17 -0
- package/cdn/js/canvas-nest.js +1 -0
- package/cdn/js/clipboard.min.js +7 -0
- package/cdn/js/crypto-js.js +25 -0
- package/cdn/js/jquery.min.js +2 -0
- package/css/default.css +1144 -0
- package/css/donate.css +338 -0
- package/css/hbe.style.css +749 -0
- package/css/style.css +2095 -0
- package/donate/index.html +39 -0
- package/google917dcf72f6e5c7f5.html +1 -0
- package/guestbook/index.html +68 -0
- package/hosts/ads.txt +149 -0
- package/hosts/flash.txt +9 -0
- package/hosts/github.txt +6 -0
- package/hosts/google.txt +16936 -0
- package/hosts/winrar.txt +2 -0
- package/img/alipay.svg +46 -0
- package/img/bitcoin.svg +135 -0
- package/img/blog.ico +0 -0
- package/img/blog.png +0 -0
- package/img/gaba.png +0 -0
- package/img/github.svg +1 -0
- package/img/like.svg +1 -0
- package/img/mp-mini.jpg +0 -0
- package/img/mp.png +0 -0
- package/img/paypal.svg +63 -0
- package/img/upy_logo.svg +59 -0
- package/img/wechat.svg +49 -0
- package/index.html +48 -0
- package/jd_root.txt +1 -0
- package/js/codeblock-resizer.js +51 -0
- package/js/dark.js +12 -0
- package/js/donate.js +87 -0
- package/js/fixedPage.js +106 -0
- package/js/gitment.browser.js +3751 -0
- package/js/search.js +86 -0
- package/js/share.js +60 -0
- package/js/smartresize.js +32 -0
- package/js/totop.js +12 -0
- package/kankan/index.html +77 -0
- package/lib/hbe.js +293 -0
- package/package.json +25 -0
- package/page/10/index.html +49 -0
- package/page/11/index.html +59 -0
- package/page/12/index.html +67 -0
- package/page/13/index.html +63 -0
- package/page/14/index.html +66 -0
- package/page/15/index.html +60 -0
- package/page/16/index.html +60 -0
- package/page/17/index.html +62 -0
- package/page/18/index.html +61 -0
- package/page/19/index.html +58 -0
- package/page/2/index.html +48 -0
- package/page/20/index.html +57 -0
- package/page/21/index.html +61 -0
- package/page/22/index.html +55 -0
- package/page/23/index.html +64 -0
- package/page/24/index.html +60 -0
- package/page/25/index.html +58 -0
- package/page/26/index.html +48 -0
- package/page/27/index.html +58 -0
- package/page/3/index.html +48 -0
- package/page/4/index.html +48 -0
- package/page/5/index.html +51 -0
- package/page/6/index.html +51 -0
- package/page/7/index.html +51 -0
- package/page/8/index.html +53 -0
- package/page/9/index.html +48 -0
- package/randomcall/README.html +1 -0
- package/randomcall/lucker.html +290 -0
- package/randomcall/lucky.png +0 -0
- package/robots.txt +22 -0
- package/search.xml +6740 -0
- package/sitemap.xml +2669 -0
- package/tags//345/216/237/345/210/233/index.html +48 -0
- package/tags//345/250/261/344/271/220/index.html +48 -0
- package/tags//346/211/213/345/206/231/index.html +48 -0
- package/tags//347/226/253/346/203/205/index.html +48 -0
- package/tags//350/275/254/350/275/275/index.html +48 -0
- package/tags//350/275/254/350/275/275/page/2/index.html +48 -0
- package/v.html +90 -0
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN" data-dark><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"><meta content="yes" name="apple-mobile-web-app-capable"><meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"><meta content="telephone=no" name="format-detection"><meta name="description" content="前端壹菜鸟,记录工作难题,关注前端知识,收集精彩博文,做技术的搬运工"><meta name="msvalidate.01" content="0FE4D8B3381D3D87088996B886E1E2BD"><title>一文搞懂 Webpack 多入口配置 | 前端壹菜鸟</title><link rel="stylesheet" type="text/css" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/css/style.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/normalize.css@latest/normalize.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/pure-min.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/grids-responsive-min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css"><link rel="icon" mask="" sizes="any" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="Shortcut Icon" type="image/x-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="apple-touch-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="apple-touch-icon-precomposed" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="alternate" type="application/atom+xml" href="/atom.xml"><script type="text/javascript" src="//cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8385136408348258"></script><script src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" async></script><script>(function(){
|
|
2
|
+
var bp = document.createElement('script');
|
|
3
|
+
var curProtocol = window.location.protocol.split(':')[0];
|
|
4
|
+
if (curProtocol === 'https'){
|
|
5
|
+
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
|
|
6
|
+
}
|
|
7
|
+
else{
|
|
8
|
+
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
|
|
9
|
+
}
|
|
10
|
+
var s = document.getElementsByTagName("script")[0];
|
|
11
|
+
s.parentNode.insertBefore(bp, s);
|
|
12
|
+
})();
|
|
13
|
+
</script><script>(function(){
|
|
14
|
+
var src = 'https://jspassport.ssl.qhimg.com/11.0.1.js?d182b3f28525f2db83acfaaf6e696dba';
|
|
15
|
+
document.write('<script src="' + src + '" id="sozz"><\/script>');
|
|
16
|
+
})();
|
|
17
|
+
</script><script>var _hmt=_hmt||[];(function(){var hm=document.createElement("script");hm.src='https://hm.baidu.com/hm.js?011f0b44e8452bfa57fbfa23c5fe7683';var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(hm, s);})();
|
|
18
|
+
</script><script async src="https://www.googletagmanager.com/gtag/js?id=UA-150860401-1"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);};gtag('js',new Date());gtag('config','UA-150860401-1');
|
|
19
|
+
</script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/fixedPage.min.js"></script><meta name="generator" content="Hexo 6.3.0"></head><body><div class="body_container"><div id="header"><div class="site-name"><a id="logo" href="/.">前端壹菜鸟</a><p class="description">关注前端知识,收集精彩博文,做技术的搬运工</p></div><div id="nav-menu"><a class="current" href="/." target="_self"><i class="fa fa-home"> 首页</i></a><a href="/archives/" target="_self"><i class="fa fa-archive"> 归档</i></a><a href="/guestbook/" target="_self"><i class="fa fa-comments"> 留言</i></a><a href="/about/" target="_self"><i class="fa fa-user"> 关于</i></a><a href="https://laonongmin.online/" target="_target"><i class="fa fa-group"> 看看</i></a><a href="https://love.xuehuayu.cn/" target="_target"><i class="fa fa-heart"> LOVE</i></a></div></div><div class="pure-g" id="layout"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title c-post">一文搞懂 Webpack 多入口配置</h1><div class="post-meta"><span class="date">2019-11-22</span><span> | </span><span class="tag"><a href="/tags/%E8%BD%AC%E8%BD%BD/">转载 </a></span><span> | </span><span class="category"><a href="/categories/%E5%89%8D%E7%AB%AF/">前端 </a></span><span id="busuanzi_container_page_pv"> | <span id="busuanzi_value_page_pv"><i class="fa fa-spinner"></i></span><span> 阅读</span></span><span class="post-time"><span class="post-meta-item-text"> | </span><span class="post-meta-item-icon"><i class="fa fa-keyboard-o"></i><span class="post-count"> 3.4k</span><span class="post-meta-item-text"> 字</span></span></span><span class="post-time"> | <span class="post-meta-item-icon"><i class="fa fa-hourglass-half"></i><span class="post-count"> 14</span><span class="post-meta-item-text"> 分钟</span></span></span></div><a class="disqus-comment-count" href="/article/39087.html#vcomment"><span class="waline-comment-count" data-path="/article/39087.html"></span><span> 条评论</span></a><div class="post-content"><p><code>原文地址:https://mp.weixin.qq.com/s/F89xzQ9YvoRSXaCw5GL3ug</code></p>
|
|
20
|
+
<p>最近在做项目的时候遇到了一个场景:一个项目有多个入口,不同的入口,路由、组件、资源等有重叠部分,也有各自不同的部分。由于不同入口下的路由页面有一些是重复的,因此我考虑使用 Webpack 多入口配置来解决这个需求。</p>
|
|
21
|
+
<span id="more"></span>
|
|
22
|
+
|
|
23
|
+
<p>再一次,在网上找的不少文章都不合我的需求,很多文章都是只简单介绍了生产环境下配置,没有介绍开发环境下的配置,有的也没有将多入口结合 <code>vue-router</code>、 <code>vuex</code>、 <code>ElementUI</code> 等进行配置,因此在下通过不断探坑,然后将思路和配置过程记录下来,留给自己作为笔记,同时也分享给大家,希望可以帮助到有同样需求的同学们~</p>
|
|
24
|
+
<h2 id="1-目标分析"><a href="#1-目标分析" class="headerlink" title="1. 目标分析"></a>1. 目标分析</h2><ol>
|
|
25
|
+
<li><p>一个项目中保存了多个 HTML 模版,不同的模版有不同的入口,并且有各自的 router、store 等;</p>
|
|
26
|
+
</li>
|
|
27
|
+
<li><p>不仅可以打包出不同 HTML,而且开发的时候也可以顺利进行调试;</p>
|
|
28
|
+
</li>
|
|
29
|
+
<li><p>不同入口的文件可以引用同一份组件、图片等资源,也可以引用不同的资源;</p>
|
|
30
|
+
</li>
|
|
31
|
+
</ol>
|
|
32
|
+
<p>代码仓库:multi-entry-vue</p>
|
|
33
|
+
<p>示意图如下:</p>
|
|
34
|
+
<p><img src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==" alt="xuehuayu.cn"></p>
|
|
35
|
+
<h2 id="2-准备工作"><a href="#2-准备工作" class="headerlink" title="2. 准备工作"></a>2. 准备工作</h2><p>首先我们 <code>vue init webpack multi-entry-vue</code> 使用 <code>vue-cli</code> 创建一个 webpack 模版的项。文件结构如下:</p>
|
|
36
|
+
<pre><code>├── build
|
|
37
|
+
├── config
|
|
38
|
+
├── src
|
|
39
|
+
│ ├── assets
|
|
40
|
+
│ │ └── logo.png
|
|
41
|
+
│ ├── components
|
|
42
|
+
│ │ └──HelloWorld.vue
|
|
43
|
+
│ ├── router
|
|
44
|
+
│ │ └── index.js
|
|
45
|
+
│ ├──App.vue
|
|
46
|
+
│ └── main.js
|
|
47
|
+
├── static
|
|
48
|
+
├── README.md
|
|
49
|
+
├── index.html
|
|
50
|
+
├── package-lock.json
|
|
51
|
+
└── package.json
|
|
52
|
+
</code></pre>
|
|
53
|
+
<blockquote>
|
|
54
|
+
<p>这里顺便介绍在不同系统下生成目录树的方法:</p>
|
|
55
|
+
<ol>
|
|
56
|
+
<li>mac 系统命令行生成目录树的方法 <code>tree-I node_modules--dirsfirst</code> ,这个命令的意思是,不显示 <code>node_modules</code> 路径的文件,并且以文件夹在前的排序方式生成目录树。如果报没有找到 tree 命令的错,安装 tree 命令行 <code>brew install tree</code> 即可。</li>
|
|
57
|
+
<li>windows 系统在目标目录下使用 <code>tree/f1.txt</code> 即可把当前目录树生成到一个新文件 <code>1.txt</code> 中。</li>
|
|
58
|
+
</ol>
|
|
59
|
+
</blockquote>
|
|
60
|
+
<p>首先我们简单介绍一下 Webpack 的相关配置项,这些配置项根据使用的 Webpack 模版不同,一般存放在 <code>webpack.config.js</code> 或 <code>webpack.base.conf.js</code> 中:</p>
|
|
61
|
+
<pre><code>const path = require('path')
|
|
62
|
+
module.exports ={
|
|
63
|
+
context: path.resolve(__dirname,'../'),
|
|
64
|
+
entry:{
|
|
65
|
+
app:'./src/main.js'
|
|
66
|
+
},
|
|
67
|
+
output:{
|
|
68
|
+
path: path.resolve(__dirname,'../dist'),
|
|
69
|
+
filename:'output-file.js',
|
|
70
|
+
publicPath:'/'
|
|
71
|
+
},
|
|
72
|
+
module:{},// 文件的解析 loader 配置
|
|
73
|
+
plugins:[],// 插件,根据需要配置各种插件
|
|
74
|
+
devServer:{}// 配置 dev 服务功能
|
|
75
|
+
}
|
|
76
|
+
</code></pre>
|
|
77
|
+
<p>这个配置的意思是,进行 Webpack 后,会在命令的执行目录下新建 <code>dist</code> 目录(如果需要的话),并将打包 <code>src</code> 目录下的 <code>main.js</code> 和它的依赖,生成 <code>output-file.js</code> 放在 <code>dist</code> 目录中。</p>
|
|
78
|
+
<p>下面稍微解释一下相关配置项:</p>
|
|
79
|
+
<ol>
|
|
80
|
+
<li><p><strong>entry:</strong> 入口文件配置项,可以为字符串、对象、数组。以上面的对象形式为例, <code>app</code> 是入口名称,如果 <code>output.filename</code> 中有 <code>[name]</code> 的话,就会被替换成 <code>app</code>。</p>
|
|
81
|
+
</li>
|
|
82
|
+
<li><p><strong>context:</strong> 是 webpack 编译时的基础目录,用于解析 <code>entry</code> 选项的基础目录(绝对路径), <code>entry</code> 入口起点会相对于此目录查找,相当于公共目录,下面所有的目录都在这个公共目录下面。</p>
|
|
83
|
+
</li>
|
|
84
|
+
<li><p><strong>output:</strong> 出口文件的配置项。</p>
|
|
85
|
+
</li>
|
|
86
|
+
<li><p><strong>output/path:</strong> 打包文件输出的目录,比如上面的 <code>dist</code>,那么就会将输出的文件放在当前目录同级目录的 <code>dist</code> 文件夹下,没有这个文件夹就新建一个。可以配置为 <code>path.resolve(__dirname,'./dist/${Date.now()}/')</code> (md 语法不方便改成模板字符串,请自行修改)方便做持续集成。</p>
|
|
87
|
+
</li>
|
|
88
|
+
<li><p><strong>output.filename:</strong> 输出的文件名称, <code>[name]</code> 的意为根据入口文件的名称,打包成相同的名称,有几个入口,就可以打包出几个文件。比如入口的 <code>key</code> 为 <code>app</code>,打包出来就是 <code>app.js</code>,入口是 <code>my-entry</code>,打包出来就是 <code>my-entry.js</code>。</p>
|
|
89
|
+
</li>
|
|
90
|
+
<li><p><strong>output.publicPath:</strong> 静态资源的公共路径,可以记住这个公式: <code>静态资源最终访问路径=output.publicPath+资源loader或插件等配置路径</code>。举个例子, <code>publicPath</code> 配置为 <code>/dist/</code>,图片的 <code>url-loader</code> 配置项为 <code>name:'img/[name].[ext]'</code> ,那么最终打包出来文件中图片的引用路径为 <code>output.publicPath+'img/[name].[ext]'='/dist/img/[name].[ext]'</code>。</p>
|
|
91
|
+
</li>
|
|
92
|
+
</ol>
|
|
93
|
+
<p>本文由于是入口和出口相关的配置,所以内容主要围绕着 <code>entry</code> 、 <code>output</code> 和一个重要的 webpack 插件 html-webpack-plugin,这个插件是跟打包出来的 HTML 文件密切相关,主要有下面几个作用:</p>
|
|
94
|
+
<ol>
|
|
95
|
+
<li><p>根据模版生成 HTML 文件;</p>
|
|
96
|
+
</li>
|
|
97
|
+
<li><p>给生成的 HTML 文件引入外部资源比如 <code>link</code>、 <code>script</code> 等;</p>
|
|
98
|
+
</li>
|
|
99
|
+
<li><p>改变每次引入的外部文件的 Hash,防止 HTML 引用缓存中的过时资源;</p>
|
|
100
|
+
</li>
|
|
101
|
+
</ol>
|
|
102
|
+
<p>下面我们从头一步步配置一个多入口项目。</p>
|
|
103
|
+
<h2 id="3-开始配置"><a href="#3-开始配置" class="headerlink" title="3. 开始配置"></a>3. 开始配置</h2><h3 id="3-1-文件结构改动"><a href="#3-1-文件结构改动" class="headerlink" title="3.1 文件结构改动"></a>3.1 文件结构改动</h3><p>在 <code>src</code> 目录下将 <code>main.js</code> 和 <code>App.vue</code> 两个文件各复制一下,作为不同入口,文件结构变为:</p>
|
|
104
|
+
<pre><code>├── build
|
|
105
|
+
│ ├── build.js
|
|
106
|
+
│ ├── check-versions.js
|
|
107
|
+
│ ├── logo.png
|
|
108
|
+
│ ├── utils.js
|
|
109
|
+
│ ├── vue-loader.conf.js
|
|
110
|
+
│ ├── webpack.base.conf.js
|
|
111
|
+
│ ├── webpack.dev.conf.js # 主要配置目标
|
|
112
|
+
│ └── webpack.prod.conf.js # 主要配置目标
|
|
113
|
+
├── config
|
|
114
|
+
│ ├── dev.env.js
|
|
115
|
+
│ ├── index.js
|
|
116
|
+
│ └── prod.env.js
|
|
117
|
+
├── src
|
|
118
|
+
│ ├── assets
|
|
119
|
+
│ │ └── logo.png
|
|
120
|
+
│ ├── components
|
|
121
|
+
│ │ └──HelloWorld.vue
|
|
122
|
+
│ ├── router
|
|
123
|
+
│ │ └── index.js
|
|
124
|
+
│ ├──App.vue
|
|
125
|
+
│ ├──App2.vue # 新增的入口
|
|
126
|
+
│ ├── main.js
|
|
127
|
+
│ └── main2.js # 新增的入口
|
|
128
|
+
├── static
|
|
129
|
+
├── README.md
|
|
130
|
+
├── index.html
|
|
131
|
+
└── package.json
|
|
132
|
+
</code></pre>
|
|
133
|
+
<h3 id="3-2-简单配置"><a href="#3-2-简单配置" class="headerlink" title="3.2 简单配置"></a>3.2 简单配置</h3><p>要想从不同入口,打包出不同 HTML,我们可以改变一下 <code>entry</code> 和 <code>output</code> 两个配置,</p>
|
|
134
|
+
<pre><code>// build/webpack.prod.conf.js
|
|
135
|
+
module.exports ={
|
|
136
|
+
entry:{
|
|
137
|
+
entry1:'./src/main.js',
|
|
138
|
+
entry2:'./src/main2.js'
|
|
139
|
+
},
|
|
140
|
+
output:{
|
|
141
|
+
filename:'[name].js',
|
|
142
|
+
publicPath:'/'
|
|
143
|
+
},
|
|
144
|
+
plugins:[
|
|
145
|
+
newHtmlWebpackPlugin({
|
|
146
|
+
template:"index.html",// 要打包输出哪个文件,可以使用相对路径
|
|
147
|
+
filename:"index.html"// 打包输出后该html文件的名称
|
|
148
|
+
})
|
|
149
|
+
]
|
|
150
|
+
}
|
|
151
|
+
</code></pre>
|
|
152
|
+
<p>根据上面一小节我们知道,webpack 配置里的 <code>output.filename</code> 如果有 <code>[name]</code> 意为根据入口文件的名称,打包成对应名称的 JS 文件,那么现在我们是可以根据两个入口打包出 <code>entry.js</code> 和 <code>entry2.js</code>。</p>
|
|
153
|
+
<p>打包的结果如下:</p>
|
|
154
|
+
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/XP4dRIhZqqU4jEtH5Upia9D5BoOxBGFRpJSxrh63T80haHxrNCrtIdDFmdShOHWxZR6BSuJclxp4rmiazdDmymDA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" alt="xuehuayu.cn"></p>
|
|
155
|
+
<p>当前代码:Github - multi-entry-vue1</p>
|
|
156
|
+
<p>如上图,此时我们 <code>npm run build</code> 打包出一个引用了这两个文件的 <code>index.html</code>,那么如何打包出不同 HTML 文件,分别应用不同入口 JS 文件呢,此时我们需要借助于 <code>HtmlWebpackPlugin</code> 这个插件。</p>
|
|
157
|
+
<p><code>HtmlWebpackPlugin</code> 这个插件, <code>new</code> 一个,就打包一个 HTML 页面,所以我们在 <code>plugins</code> 配置里 <code>new</code> 两个,就能打包出两个页面来。</p>
|
|
158
|
+
<h3 id="3-3-打包出不同的-HTML-页面"><a href="#3-3-打包出不同的-HTML-页面" class="headerlink" title="3.3 打包出不同的 HTML 页面"></a>3.3 打包出不同的 HTML 页面</h3><p>我们把配置文件改成下面这样:</p>
|
|
159
|
+
<pre><code>// build/webpack.prod.conf.js
|
|
160
|
+
module.exports ={
|
|
161
|
+
entry:{
|
|
162
|
+
entry:'./src/main.js',// 打包输出的chunk名为entry
|
|
163
|
+
entry2:'./src/main2.js'// 打包输出的chunk名为entry2
|
|
164
|
+
},
|
|
165
|
+
output:{
|
|
166
|
+
filename:'[name].js',
|
|
167
|
+
publicPath:'/'
|
|
168
|
+
},
|
|
169
|
+
plugins:[
|
|
170
|
+
newHtmlWebpackPlugin({
|
|
171
|
+
filename:'entry.html',// 要打包输出的文件名
|
|
172
|
+
template:'index.html',// 打包输出后该html文件的名称
|
|
173
|
+
chunks:['manifest','vendor','entry']// 输出的html文件引入的入口chunk
|
|
174
|
+
// 还有一些其他配置比如minify、chunksSortMode和本文无关就省略,详见github
|
|
175
|
+
}),
|
|
176
|
+
newHtmlWebpackPlugin({
|
|
177
|
+
filename:'entry2.html',
|
|
178
|
+
template:'index.html',
|
|
179
|
+
chunks:['manifest','vendor','entry2']
|
|
180
|
+
})
|
|
181
|
+
]
|
|
182
|
+
}
|
|
183
|
+
</code></pre>
|
|
184
|
+
<p>上面一个配置要注意的是 <code>chunks</code>,如果没有配置,那么生成的 HTML 会引入所有入口 JS 文件,在上面的例子就是,生成的两个 HTML 文件都会引入 <code>entry.js</code> 和 <code>entry2.js</code>,所以要使用 <code>chunks</code> 配置来指定生成的 HTML 文件应该引入哪个 JS 文件。配置了 <code>chunks</code> 之后,才能达到不同的 HTML 只引入对应 <code>chunks</code> 的 JS 文件的目的。</p>
|
|
185
|
+
<p>大家可以看到除了我们打包生成的 <code>chunk</code> 文件 <code>entry.js</code> 和 <code>entry2.js</code> 之外,还有 <code>manifest</code> 和 <code>vendor</code> 这两个,这里稍微解释一下这两个 <code>chunk</code>:</p>
|
|
186
|
+
<ol>
|
|
187
|
+
<li><p><code>vendor</code> 是指提取涉及 <code>node_modules</code> 中的公共模块;</p>
|
|
188
|
+
</li>
|
|
189
|
+
<li><p><code>manifest</code> 是对 <code>vendor</code> 模块做的缓存;</p>
|
|
190
|
+
</li>
|
|
191
|
+
</ol>
|
|
192
|
+
<p>打包完的结果如下:</p>
|
|
193
|
+
<p><img src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==" alt="xuehuayu.cn"></p>
|
|
194
|
+
<p>文件结构:</p>
|
|
195
|
+
<p><img src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==" alt="xuehuayu.cn"></p>
|
|
196
|
+
<p>现在打包出来的样式正是我们所需要的,此时我们在 <code>dist</code> 目录下启动 <code>live-server</code>(如果你没安装的话可以先安装 <code>npm i-g live-server</code>),就可以看到效果出来了:</p>
|
|
197
|
+
<p><img src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==" alt="xuehuayu.cn"></p>
|
|
198
|
+
<p>当前代码:Github - multi-entry-vue2</p>
|
|
199
|
+
<p>至此就实现了一个简单的多入口项目的配置。</p>
|
|
200
|
+
<h2 id="4-配置改进"><a href="#4-配置改进" class="headerlink" title="4. 配置改进"></a>4. 配置改进</h2><h3 id="4-1-文件结构改动"><a href="#4-1-文件结构改动" class="headerlink" title="4.1 文件结构改动"></a>4.1 文件结构改动</h3><p>我们在前文进行了多入口的配置,要想新建一个新的入口,就复制多个文件,再手动改一下对应配置。</p>
|
|
201
|
+
<p>但是如果不同的 HTML 文件下不同的 <code>vue-router</code>、 <code>vuex</code> 都放到 <code>src</code> 目录下,多个入口的内容平铺在一起,项目目录会变得凌乱不清晰,因此在下将多入口相关的文件放到一个单独的文件夹中,以后如果有多入口的内容,就到这个文件夹中处理。</p>
|
|
202
|
+
<p>下面我们进行文件结构的改造:</p>
|
|
203
|
+
<ol>
|
|
204
|
+
<li><p>首先我们在根目录创建一个 <code>entries</code> 文件夹,把不同入口的 <code>router</code>、 <code>store</code>、 <code>main.js</code> 都放这里,每个入口相关单独放在一个文件夹;</p>
|
|
205
|
+
</li>
|
|
206
|
+
<li><p>在 <code>src</code> 目录下建立一个 <code>common</code> 文件夹,用来存放多入口共用的组件等;</p>
|
|
207
|
+
</li>
|
|
208
|
+
</ol>
|
|
209
|
+
<p>现在的目录结构:</p>
|
|
210
|
+
<pre><code>├── build # 没有改动
|
|
211
|
+
├── config # 没有改动
|
|
212
|
+
├── entries # 存放不同入口的文件
|
|
213
|
+
│ ├── entry1
|
|
214
|
+
│ │ ├── router # entry1 的 router
|
|
215
|
+
│ │ │ └── index.js
|
|
216
|
+
│ │ ├── store # entry1 的 store
|
|
217
|
+
│ │ │ └── index.js
|
|
218
|
+
│ │ ├──App.vue # entry1 的根组件
|
|
219
|
+
│ │ ├── index.html # entry1 的页面模版
|
|
220
|
+
│ │ └── main.js # entry1 的入口
|
|
221
|
+
│ └── entry2
|
|
222
|
+
│ ├── router
|
|
223
|
+
│ │ └── index.js
|
|
224
|
+
│ ├── store
|
|
225
|
+
│ │ └── index.js
|
|
226
|
+
│ ├──App.vue
|
|
227
|
+
│ ├── index.html
|
|
228
|
+
│ └── main.js
|
|
229
|
+
├── src
|
|
230
|
+
│ ├── assets
|
|
231
|
+
│ │ └── logo.png
|
|
232
|
+
│ ├── common # 多入口通用组件
|
|
233
|
+
│ │ └──CommonTemplate.vue
|
|
234
|
+
│ └── components
|
|
235
|
+
│ ├──HelloWorld.vue
|
|
236
|
+
│ ├── test1.vue
|
|
237
|
+
│ └── test2.vue
|
|
238
|
+
├── static
|
|
239
|
+
├── README.md
|
|
240
|
+
├── index.html
|
|
241
|
+
├── package-lock.json
|
|
242
|
+
└── package.json
|
|
243
|
+
</code></pre>
|
|
244
|
+
<h3 id="4-2-webpack-配置"><a href="#4-2-webpack-配置" class="headerlink" title="4.2 webpack 配置"></a>4.2 webpack 配置</h3><p>然后我们在 <code>build/utils</code> 文件中加两个函数,分别用来生成 webpack 的 <code>entry</code> 配置和 <code>HtmlWebpackPlugin</code> 插件配置,由于要使用 <code>node.js</code> 来读取文件夹结构,因此需要引入 <code>fs</code>、 <code>glob</code> 等模块:</p>
|
|
245
|
+
<pre><code>// build/utils
|
|
246
|
+
const fs = require('fs')
|
|
247
|
+
const glob = require('glob')
|
|
248
|
+
const merge = require('webpack-merge')
|
|
249
|
+
constHtmlWebpackPlugin= require('html-webpack-plugin')
|
|
250
|
+
const ENTRY_PATH = path.resolve(__dirname,'../entries')
|
|
251
|
+
// 多入口配置,这个函数从 entries 文件夹中读取入口文件,装配成webpack.entry配置
|
|
252
|
+
exports.entries =function(){
|
|
253
|
+
const entryFiles = glob.sync(ENTRY_PATH +'/*/*.js')
|
|
254
|
+
const map ={}
|
|
255
|
+
entryFiles.forEach(filePath =>{
|
|
256
|
+
const filename = filePath.replace(/.*\/(\w+)\/\w+(\.html|\.js)$/,(rs, $1)=> $1)
|
|
257
|
+
map[filename]= filePath
|
|
258
|
+
})
|
|
259
|
+
return map
|
|
260
|
+
}
|
|
261
|
+
// 多页面输出模版配置 HtmlWebpackPlugin,根据环境装配html模版配置
|
|
262
|
+
exports.htmlPlugin =function(){
|
|
263
|
+
let entryHtml = glob.sync(ENTRY_PATH +'/*/*.html')
|
|
264
|
+
let arr =[]
|
|
265
|
+
entryHtml.forEach(filePath =>{
|
|
266
|
+
let filename = filePath.replace(/.*\/(\w+)\/\w+(\.html|\.js)$/,(rs, $1)=> $1)
|
|
267
|
+
let conf ={
|
|
268
|
+
template: filePath,
|
|
269
|
+
filename: filename +'.html',
|
|
270
|
+
chunks:[filename],
|
|
271
|
+
inject:true
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// production 生产模式下配置
|
|
275
|
+
if(process.env.NODE_ENV ==='production'){
|
|
276
|
+
conf = merge(conf,{
|
|
277
|
+
chunks:['manifest','vendor'],
|
|
278
|
+
minify:{
|
|
279
|
+
removeComments:true,
|
|
280
|
+
collapseWhitespace:true,
|
|
281
|
+
removeAttributeQuotes:true
|
|
282
|
+
},
|
|
283
|
+
chunksSortMode:'dependency'
|
|
284
|
+
})
|
|
285
|
+
}
|
|
286
|
+
arr.push(newHtmlWebpackPlugin(conf))
|
|
287
|
+
})
|
|
288
|
+
return arr
|
|
289
|
+
}
|
|
290
|
+
</code></pre>
|
|
291
|
+
<p>稍微解释一下这两个函数:</p>
|
|
292
|
+
<ol>
|
|
293
|
+
<li><p><code>exports.entries</code> 函数从 <code>entries</code> 文件夹中找到二级目录下的 JS 文件作为入口文件,并且将二级目录的文件夹名作为 <code>key</code>,生成这样一个对象:<code>{"entry1":"/multi-entry-vue/entries/entry1/main.js"}</code>,多个入口情况下会有更多键值对;</p>
|
|
294
|
+
</li>
|
|
295
|
+
<li><p><code>exports.htmlPlugin</code> 函数和之前函数的原理类似,不过组装的是 <code>HtmlWebpackPlugin</code> 插件的配置,生成这样一个数组,可以看到和我们手动设置的配置基本一样,只不过现在是根据文件夹结构来生成的:</p>
|
|
296
|
+
<p> // production 下<br> [<br> {<br> template:”/multi-entry-vue/entries/entry1/index.html”,<br> chunks:[‘manifest’,’vendor’,’entry1’],<br> filename:”entry1.html”,<br> chunksSortMode:’dependency’<br> },<br> {…}// 下一个入口的配置<br> ]</p>
|
|
297
|
+
</li>
|
|
298
|
+
</ol>
|
|
299
|
+
<p>有了这两个根据 <code>entries</code> 文件夹的结构来自动生成 webpack 配置的函数,下面来改一下 webpack 相关的几个配置文件:</p>
|
|
300
|
+
<pre><code>// build/webpack.base.conf.js
|
|
301
|
+
module.exports ={
|
|
302
|
+
entry: utils.entries(),// 使用函数生成 entry 配置
|
|
303
|
+
output:{
|
|
304
|
+
path: config.build.assetsRoot,
|
|
305
|
+
filename:'[name].js',
|
|
306
|
+
publicPath: process.env.NODE_ENV ==='production'
|
|
307
|
+
? config.build.assetsPublicPath
|
|
308
|
+
: config.dev.assetsPublicPath
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
// build/webpack.dev.conf.js
|
|
312
|
+
// const HtmlWebpackPlugin = require('html-webpack-plugin') // 不需要了
|
|
313
|
+
const devWebpackConfig = merge(baseWebpackConfig,{
|
|
314
|
+
devServer:{
|
|
315
|
+
historyApiFallback:{
|
|
316
|
+
rewrites:[// 别忘了把 devserver 的默认路由改一下
|
|
317
|
+
{ from:/.*/, to: path.posix.join(config.dev.assetsPublicPath,'entry1.html')},
|
|
318
|
+
],
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
plugins:[
|
|
322
|
+
// https://github.com/ampedandwired/html-webpack-plugin
|
|
323
|
+
// new HtmlWebpackPlugin({
|
|
324
|
+
// filename: 'index.html',
|
|
325
|
+
// template: 'index.html',
|
|
326
|
+
// inject: true
|
|
327
|
+
// }), // 注释掉原来的 HtmlWebpackPlugin 配置,使用生成的配置
|
|
328
|
+
].concat(utils.htmlPlugin())
|
|
329
|
+
})
|
|
330
|
+
|
|
331
|
+
// build/webpack.prod.conf.js
|
|
332
|
+
// const HtmlWebpackPlugin = require('html-webpack-plugin')
|
|
333
|
+
const webpackConfig = merge(baseWebpackConfig,{
|
|
334
|
+
plugins:[
|
|
335
|
+
// new HtmlWebpackPlugin({
|
|
336
|
+
// ... 注释掉,不需要了
|
|
337
|
+
// }),
|
|
338
|
+
].concat(utils.htmlPlugin())
|
|
339
|
+
})
|
|
340
|
+
</code></pre>
|
|
341
|
+
<p>现在我们再 <code>npm run build</code>,看看生成的目录是什么样的:</p>
|
|
342
|
+
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/XP4dRIhZqqU4jEtH5Upia9D5BoOxBGFRpwD2amvMGhAiaicmvPlBf4QMfslVV9WT3YxtV6nliaTcQdbZca7PQCm4rg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" alt="xuehuayu.cn"></p>
|
|
343
|
+
<p>此时我们在 <code>dist</code> 目录下启动 <code>live-server</code> 看看是什么效果:</p>
|
|
344
|
+
<p><img src="https://mmbiz.qpic.cn/mmbiz_gif/XP4dRIhZqqU4jEtH5Upia9D5BoOxBGFRpTjh4JwsEcOibT8JicJemY6aPk3mn9y2kSYpq6Piamu6uOde4hTyfoeqRg/640?wx_fmt=gif&tp=webp&wxfrom=5&wx_lazy=1" alt="xuehuayu.cn"></p>
|
|
345
|
+
<p>当前代码:Github - multi-entry-vue3</p>
|
|
346
|
+
<hr>
|
|
347
|
+
<p>网上的帖子大多深浅不一,甚至有些前后矛盾,在下的文章都是学习过程中的总结,如果发现错误,欢迎留言指出~</p>
|
|
348
|
+
<blockquote>
|
|
349
|
+
<p>参考:</p>
|
|
350
|
+
<ol>
|
|
351
|
+
<li>webpack解惑:多入口文件打包策略</li>
|
|
352
|
+
<li>webpack配置文件:入口和出口,多入口、多出口配置</li>
|
|
353
|
+
<li>一看就懂之webpack高级配置与优化</li>
|
|
354
|
+
</ol>
|
|
355
|
+
</blockquote>
|
|
356
|
+
<p><strong>推荐阅读</strong></p>
|
|
357
|
+
<p>(点击标题可跳转阅读)</p>
|
|
358
|
+
<p><a target="_blank" rel="noopener" href="http://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651557057&idx=1&sn=3fc52a1998d954e6124dae11f859fe75&chksm=80255b00b752d216450352894c3c35f54691401af65688a789df63c7b74b9401740250463fca&scene=21#wechat_redirect">浏览器垃圾回收机制与 Vue 项目内存泄漏场景分析</a></p>
|
|
359
|
+
<p><a target="_blank" rel="noopener" href="http://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651557043&idx=2&sn=531feefa5133f279ccae6242ea16e0c0&chksm=80255b72b752d264692bfee6d71ed582cef914c526fc18b5ddcc841cc4f64c07e447dff06a42&scene=21#wechat_redirect">愿未来没有 Webpack</a></p>
|
|
360
|
+
<p><a target="_blank" rel="noopener" href="http://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651557038&idx=1&sn=c1bda14bb9e8da7db2a17cacfb885eb1&chksm=80255b6fb752d279e303bb61ec0a92c79352dfe73d2ee26d16d14f1bfb22d036c68b77decae5&scene=21#wechat_redirect">深入理解图片和框架的原生懒加载功能</a></p>
|
|
361
|
+
<p>觉得本文对你有帮助?请分享给更多人</p>
|
|
362
|
+
<p>关注「前端大全」加星标,提升前端技能</p>
|
|
363
|
+
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/zPh0erYjkib3jzxuxibgz8GJ7k0UVp4kHMMDsL32ialKjpkgA9q7BFkbJ8VRYh0Liad1x6rD7w6oU7icR9DVPgsIxzQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" alt="xuehuayu.cn"></p>
|
|
364
|
+
<p>好文章,我在看❤️</p>
|
|
365
|
+
</div><iframe src="/donate/?AliPayQR=https://store.xuehuayu.cn/store/public/alipay_qr.jpg&WeChatQR=https://store.xuehuayu.cn/store/public/wechat_qr.png&UnionPayQR=null&GitHub=null&BTCQR=null&BTCKEY=null&PayPal=https://www.paypal.com/paypalme/OrdinaryPerson" style="overflow-x:hidden; overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者:</strong>雪花雨</li><li class="post-copyright-link"><strong>本文链接:</strong><a href="/article/39087.html">https://xuehuayu.cn/article/39087.html</a></li><li class="post-copyright-license"><strong>版权声明:</strong>① 标为原创的文章为博主原创,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接。② 转载文章来自网络,已标明出处,<a href="mailto:cainiaoblog@126.com">侵删</a>。</li></ul></div><br><div class="tags"><a href="/tags/%E8%BD%AC%E8%BD%BD/">转载</a></div><div class="post-nav"><a class="pre" href="/article/14125.html">前端面试之手写观察者模式</a><a class="next" href="/article/41011.html">如何对 React 函数式组件进行优化</a></div><div id="vcomment"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.min.css"><script src="//cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.js"></script><script>const origin = window.location.origin
|
|
366
|
+
const serverURL = origin.includes('cainiaoblog') ? 'https://cmts.cainiaoblog.cn' : 'https://cmts.xuehuayu.cn'
|
|
367
|
+
const locale = {
|
|
368
|
+
placeholder: '请正确填写昵称和邮箱,方便接收回复通知~',
|
|
369
|
+
sofa: '沙发空缺中,还不快抢~',
|
|
370
|
+
};
|
|
371
|
+
Waline.init({
|
|
372
|
+
el: '#vcomment',
|
|
373
|
+
serverURL: serverURL,
|
|
374
|
+
pageSize: '20',
|
|
375
|
+
visitor: true, // 阅读量统计
|
|
376
|
+
requiredMeta: ['nick', 'mail'],
|
|
377
|
+
emoji: [
|
|
378
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/weibo',
|
|
379
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/qq',
|
|
380
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/tw-emoji',
|
|
381
|
+
],
|
|
382
|
+
locale,
|
|
383
|
+
pageview: true
|
|
384
|
+
})
|
|
385
|
+
</script></div></div></div><div class="pure-u-1 pure-u-md-1-4 fixed-search hidden_mid_and_down"><div id="sidebar"><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/search.min.js"></script><div class="widget"><div class="widget-search"><input class="search" type="radio" name="search" value="baidu" id="baidu" checked="checked"/><label class="label" for="baidu" title="百度全站搜索">百度</label><input class="search" type="radio" name="search" value="google" id="google"/><label class="label" for="google" title="谷歌全站搜索">谷歌</label><input class="search" type="radio" name="search" value="self" id="self"/><label class="label" for="self" title="使用站内搜索">站内</label></div><div class="widget" id="search"><form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"/><input type="hidden" name="si" value="xuehuayu.cn"/><input type="hidden" name="cl" value="3"/><input type="hidden" name="ct" value="2097152"/><input type="hidden" name="s" value="on"/><input class="search-submit" type="submit" value=""/></form></div></div><script>$('input[type=radio][name=search]').change(function() {
|
|
386
|
+
var val = $(this).val()
|
|
387
|
+
var self = '<div class="search-form"><input id="local-search-input" placeholder="站内搜索,首次慢" type="search" name="q" results="0"><input class="search-submit" type="submit" value=""/><div id="local-search-result"></div></div>'
|
|
388
|
+
var google = '<form class="search-form" action="//www.google.com/search" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="q" maxlength="30" placeholder="谷歌全站搜索"><input type="hidden" name="sitesearch" value="xuehuayu.cn"><input class="search-submit" type="submit" value=""/></form>'
|
|
389
|
+
var baidu = '<form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"><input type="hidden" name="si" value="xuehuayu.cn"><input type="hidden" name="cl" value="3"><input type="hidden" name="ct" value="2097152"><input type="hidden" name="s" value="on"><input class="search-submit" type="submit" value=""/></form>'
|
|
390
|
+
|
|
391
|
+
if (val === 'self') {
|
|
392
|
+
$('#search').html(self)
|
|
393
|
+
var search_path = 'search.xml';
|
|
394
|
+
if (search_path.length == 0) {
|
|
395
|
+
search_path = 'search.xml';
|
|
396
|
+
}
|
|
397
|
+
var path = 'https://cdn.staticaly.com/gh/npljy/npljy.github.io/main/' + search_path;
|
|
398
|
+
searchFunc(path, 'local-search-input', 'local-search-result');
|
|
399
|
+
} else if (val === 'baidu') {
|
|
400
|
+
$('#search').html(baidu)
|
|
401
|
+
} else if (val === 'google') {
|
|
402
|
+
$('#search').html(google)
|
|
403
|
+
}
|
|
404
|
+
})</script><div class="widget widget-wxmp"><img alt="微信公众号" width="100%" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/mp-mini.jpg"/></div><div class="widget widget-categories"><div class="widget-title"><i class="fa fa-folder-o"> 分类</i></div><ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/CDN/">CDN</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/IDE/">IDE</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/git/">git</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/hexo/">hexo</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%85%AC%E5%85%B1%E8%8A%82%E6%97%A5/">公共节日</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%88%86%E4%BA%AB/">分享</a><span class="category-list-count">29</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/">前端</a><span class="category-list-count">191</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">1</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/">网络协议</a><span class="category-list-count">1</span></li></ul></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%8D%9A%E5%AE%A2/">博客</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B7%A5%E5%85%B7/">工具</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/">广告过滤</a><span class="category-list-count">8</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/%E8%A7%86%E9%A2%91%E7%94%B5%E8%A7%86%E5%B0%8F%E8%AF%B4%E6%BC%AB%E7%94%BB%E8%B5%84%E8%AE%AF%E9%9F%B3%E4%B9%90/">视频电视小说漫画资讯音乐</a><span class="category-list-count">2</span></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%AD%A3%E5%88%99/">正则</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E7%AE%97%E6%B3%95/">算法</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%B5%84%E8%AE%AF/">资讯</a><span class="category-list-count">16</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%BD%BB%E6%9D%BE%E4%B8%80%E5%88%BB/">轻松一刻</a><span class="category-list-count">1</span></li></ul></div><div class="widget widget-tags"><div class="widget-title"><i class="fa fa-star-o"> 标签</i></div><div class="tagcloud"><a href="/tags/%E5%8E%9F%E5%88%9B/" style="font-size: 15px;">原创</a> <a href="/tags/%E8%BD%AC%E8%BD%BD/" style="font-size: 15px;">转载</a> <a href="/tags/%E6%89%8B%E5%86%99/" style="font-size: 15px;">手写</a> <a href="/tags/%E7%96%AB%E6%83%85/" style="font-size: 15px;">疫情</a> <a href="/tags/%E5%A8%B1%E4%B9%90/" style="font-size: 15px;">娱乐</a></div></div><div class="widget widget-recent-posts"><div class="widget-title"><i class="fa fa-file-o"> 最近文章</i></div><ul class="post-list"><li class="post-list-item"><a class="post-list-link" href="/article/c5576490.html">面试准备</a></li><li class="post-list-item"><a class="post-list-link" href="/article/84c9ccd6.html">精读《SolidJS》</a></li><li class="post-list-item"><a class="post-list-link" href="/article/53803e6.html">git提交注释规范</a></li><li class="post-list-item"><a class="post-list-link" href="/article/a4145266.html">前端数组拍平flat一行代码</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bedea419.html">一道前端this面试题</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bf7e7421.html">git多账号配置</a></li></ul></div><div class="widget widget-links"><div class="widget-title"><i class="fa fa-external-link"> 友情链接</i></div><ul></ul><a href="https://github.com/npljy?utm_source=xuehuayu.cn" title="GitHub" target="_blank">GitHub</a><ul></ul><a href="https://laonongmin.online?utm_source=xuehuayu.cn" title="看看" target="_blank">看看</a><ul></ul><a href="https://cainiaoblog.cn?utm_source=xuehuayu.cn" title="菜鸟博客" target="_blank">菜鸟博客</a><ul></ul><a href="mailto:cainiaoblog@126.com" title="友链联系" target="_blank">友链联系</a></div></div></div><div class="pure-u-1 pure-u-md-3-4"><div id="footer"><div class="flex-block justify-center align-center flex-wrap"><a class="gxba-link" id="gxba" rel="nofollow" target="_blank" href="http://beian.miit.gov.cn/">京ICP备20007647号-2</a><a class="gaba-link" id="gaba-link" rel="nofollow" target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031264"><img class="nofancybox" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/gaba.png" alt=""/><span id="gaba">京公网安备 11010802031264号</span><span style="padding-right: 10px;"></span></a><span>Copyright © 2023 </span><a href="/." rel="nofollow">前端壹菜鸟. </a><script>(function(){
|
|
405
|
+
var cnb =window.location.origin.indexOf('cainiaoblog') !==-1
|
|
406
|
+
if (cnb) {
|
|
407
|
+
var gxba =document.getElementById('gxba')
|
|
408
|
+
var gaba =document.getElementById('gaba')
|
|
409
|
+
var gabaLink =document.getElementById('gaba-link')
|
|
410
|
+
gxba.innerText ='京ICP备20007647号-1'
|
|
411
|
+
gaba.innerText ='京公网安备 11010802031254号'
|
|
412
|
+
gabaLink.setAttribute('href','http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031254')
|
|
413
|
+
}
|
|
414
|
+
})()</script></div><div class="flex-block justify-center align-center flex-wrap"><a rel="nofollow" target="_blank" href="https://v6.51.la/s/Guz3lwHCsVme9Cu"><div class="busuanzi_container" id="busuanzi_container"><span class="busuanzi_container_site_pv" id="busuanzi_container_site_pv">访问量:<span id="busuanzi_value_site_pv"><i class="fa fa-spinner"></i></span></span><span class="busuanzi_container_site_uv" id="busuanzi_container_site_uv">访客数:<span id="busuanzi_value_site_uv"><i class="fa fa-spinner"></i></span></span><span style="padding-right: 10px;"></span></div></a><a rel="nofollow" target="_blank" href="https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral"><span style="font-weight:bold;letter-spacing: 1px;">本网站由 </span><img class="nofancybox" height="32" style="vertical-align: middle" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/upy_logo.min.svg" alt=""/><span style="font-weight:bold;letter-spacing: 1px;">提供CDN加速/云存储服务</span></a><span style="padding-right: 10px;"></span><a rel="nofollow" style="font-size:18px;font-weight:bold;vertical-align: middle" target="_blank" title="注册就送代金券可直接使用" href="https://console.upyun.com/register/?invite=HyDsjZHIL">注册</a></div></div></div></div><a class="show" id="rocket" href="#top"></a><div class="darkmode-toggle">🌓</div><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/totop.min.js" async></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/dark.min.js" async></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/codeblock-resizer.min.js"></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/smartresize.min.js"></script></div></body></html>
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN" data-dark><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"><meta content="yes" name="apple-mobile-web-app-capable"><meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"><meta content="telephone=no" name="format-detection"><meta name="description" content="前端壹菜鸟,记录工作难题,关注前端知识,收集精彩博文,做技术的搬运工"><meta name="msvalidate.01" content="0FE4D8B3381D3D87088996B886E1E2BD"><title>antd的select选择框选项水平横向排列 | 前端壹菜鸟</title><link rel="stylesheet" type="text/css" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/css/style.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/normalize.css@latest/normalize.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/pure-min.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/grids-responsive-min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css"><link rel="icon" mask="" sizes="any" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="Shortcut Icon" type="image/x-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="apple-touch-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="apple-touch-icon-precomposed" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="alternate" type="application/atom+xml" href="/atom.xml"><script type="text/javascript" src="//cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8385136408348258"></script><script src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" async></script><script>(function(){
|
|
2
|
+
var bp = document.createElement('script');
|
|
3
|
+
var curProtocol = window.location.protocol.split(':')[0];
|
|
4
|
+
if (curProtocol === 'https'){
|
|
5
|
+
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
|
|
6
|
+
}
|
|
7
|
+
else{
|
|
8
|
+
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
|
|
9
|
+
}
|
|
10
|
+
var s = document.getElementsByTagName("script")[0];
|
|
11
|
+
s.parentNode.insertBefore(bp, s);
|
|
12
|
+
})();
|
|
13
|
+
</script><script>(function(){
|
|
14
|
+
var src = 'https://jspassport.ssl.qhimg.com/11.0.1.js?d182b3f28525f2db83acfaaf6e696dba';
|
|
15
|
+
document.write('<script src="' + src + '" id="sozz"><\/script>');
|
|
16
|
+
})();
|
|
17
|
+
</script><script>var _hmt=_hmt||[];(function(){var hm=document.createElement("script");hm.src='https://hm.baidu.com/hm.js?011f0b44e8452bfa57fbfa23c5fe7683';var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(hm, s);})();
|
|
18
|
+
</script><script async src="https://www.googletagmanager.com/gtag/js?id=UA-150860401-1"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);};gtag('js',new Date());gtag('config','UA-150860401-1');
|
|
19
|
+
</script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/fixedPage.min.js"></script><meta name="generator" content="Hexo 6.3.0"></head><body><div class="body_container"><div id="header"><div class="site-name"><a id="logo" href="/.">前端壹菜鸟</a><p class="description">关注前端知识,收集精彩博文,做技术的搬运工</p></div><div id="nav-menu"><a class="current" href="/." target="_self"><i class="fa fa-home"> 首页</i></a><a href="/archives/" target="_self"><i class="fa fa-archive"> 归档</i></a><a href="/guestbook/" target="_self"><i class="fa fa-comments"> 留言</i></a><a href="/about/" target="_self"><i class="fa fa-user"> 关于</i></a><a href="https://laonongmin.online/" target="_target"><i class="fa fa-group"> 看看</i></a><a href="https://love.xuehuayu.cn/" target="_target"><i class="fa fa-heart"> LOVE</i></a></div></div><div class="pure-g" id="layout"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title c-post">antd的select选择框选项水平横向排列</h1><div class="post-meta"><span class="date">2020-04-08</span><span> | </span><span class="tag original"><a href="/tags/%E5%8E%9F%E5%88%9B/">原创 </a></span><span> | </span><span class="category"><a href="/categories/%E5%89%8D%E7%AB%AF/">前端 </a></span><span id="busuanzi_container_page_pv"> | <span id="busuanzi_value_page_pv"><i class="fa fa-spinner"></i></span><span> 阅读</span></span><span class="post-time"><span class="post-meta-item-text"> | </span><span class="post-meta-item-icon"><i class="fa fa-keyboard-o"></i><span class="post-count"> 178</span><span class="post-meta-item-text"> 字</span></span></span><span class="post-time"> | <span class="post-meta-item-icon"><i class="fa fa-hourglass-half"></i><span class="post-count"> 1</span><span class="post-meta-item-text"> 分钟</span></span></span></div><a class="disqus-comment-count" href="/article/39309.html#vcomment"><span class="waline-comment-count" data-path="/article/39309.html"></span><span> 条评论</span></a><div class="post-content"><p>antd的select选择框选项如何水平横向排列?选项如何是图片?<br>最近遇到需求select选择框选项和值为图片,且选项必须水平排列,项目用的是antd,索性就从修改样式入手改改antd<br>有啥问题欢迎留言一起讨论</p>
|
|
20
|
+
<span id="more"></span>
|
|
21
|
+
|
|
22
|
+
<h4 id="先看效果"><a href="#先看效果" class="headerlink" title="先看效果"></a>先看效果</h4><p><img src="https://store.xuehuayu.cn/store/20200408/2020-04-08_215349.png" alt="xuehuayu.cn"></p>
|
|
23
|
+
<h4 id="分析"><a href="#分析" class="headerlink" title="分析"></a>分析</h4><p>antd的选项使用的是flex布局,其中默认样式使用的是<code>flex-direction: column</code>,也就是纵向布局,将其改为横向<code>row</code>即可</p>
|
|
24
|
+
<h4 id="实现"><a href="#实现" class="headerlink" title="实现"></a>实现</h4><p>找到对应标签的位置,修改样式<br><img src="https://store.xuehuayu.cn/store/20200408/2020-04-08_220326.png" alt="xuehuayu.cn"></p>
|
|
25
|
+
<figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-id">#icon_list</span> + <span class="selector-tag">div</span> > <span class="selector-tag">div</span> > <span class="selector-tag">div</span> {</span><br><span class="line"> <span class="attribute">flex-direction</span>: row <span class="meta">!important</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
|
|
26
|
+
|
|
27
|
+
<hr>
|
|
28
|
+
<blockquote>
|
|
29
|
+
<p>相关链接</p>
|
|
30
|
+
</blockquote>
|
|
31
|
+
<ul>
|
|
32
|
+
<li><a href="/article/47019.html">antd的select选择框的值如何设置为图片</a></li>
|
|
33
|
+
<li><a href="/article/17096.html">umijs中如何引用svg图片</a></li>
|
|
34
|
+
</ul>
|
|
35
|
+
</div><iframe src="/donate/?AliPayQR=https://store.xuehuayu.cn/store/public/alipay_qr.jpg&WeChatQR=https://store.xuehuayu.cn/store/public/wechat_qr.png&UnionPayQR=null&GitHub=null&BTCQR=null&BTCKEY=null&PayPal=https://www.paypal.com/paypalme/OrdinaryPerson" style="overflow-x:hidden; overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者:</strong>雪花雨</li><li class="post-copyright-link"><strong>本文链接:</strong><a href="/article/39309.html">https://xuehuayu.cn/article/39309.html</a></li><li class="post-copyright-license"><strong>版权声明:</strong>① 标为原创的文章为博主原创,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接。② 转载文章来自网络,已标明出处,<a href="mailto:cainiaoblog@126.com">侵删</a>。</li></ul></div><br><div class="tags"><a href="/tags/%E5%8E%9F%E5%88%9B/">原创</a></div><div class="post-nav"><a class="pre" href="/article/47019.html">antd的select选择框的值如何设置为图片</a><a class="next" href="/article/43302.html">react预览pdf和图片遇到的一些坑</a></div><div id="vcomment"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.min.css"><script src="//cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.js"></script><script>const origin = window.location.origin
|
|
36
|
+
const serverURL = origin.includes('cainiaoblog') ? 'https://cmts.cainiaoblog.cn' : 'https://cmts.xuehuayu.cn'
|
|
37
|
+
const locale = {
|
|
38
|
+
placeholder: '请正确填写昵称和邮箱,方便接收回复通知~',
|
|
39
|
+
sofa: '沙发空缺中,还不快抢~',
|
|
40
|
+
};
|
|
41
|
+
Waline.init({
|
|
42
|
+
el: '#vcomment',
|
|
43
|
+
serverURL: serverURL,
|
|
44
|
+
pageSize: '20',
|
|
45
|
+
visitor: true, // 阅读量统计
|
|
46
|
+
requiredMeta: ['nick', 'mail'],
|
|
47
|
+
emoji: [
|
|
48
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/weibo',
|
|
49
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/qq',
|
|
50
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/tw-emoji',
|
|
51
|
+
],
|
|
52
|
+
locale,
|
|
53
|
+
pageview: true
|
|
54
|
+
})
|
|
55
|
+
</script></div></div></div><div class="pure-u-1 pure-u-md-1-4 fixed-search hidden_mid_and_down"><div id="sidebar"><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/search.min.js"></script><div class="widget"><div class="widget-search"><input class="search" type="radio" name="search" value="baidu" id="baidu" checked="checked"/><label class="label" for="baidu" title="百度全站搜索">百度</label><input class="search" type="radio" name="search" value="google" id="google"/><label class="label" for="google" title="谷歌全站搜索">谷歌</label><input class="search" type="radio" name="search" value="self" id="self"/><label class="label" for="self" title="使用站内搜索">站内</label></div><div class="widget" id="search"><form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"/><input type="hidden" name="si" value="xuehuayu.cn"/><input type="hidden" name="cl" value="3"/><input type="hidden" name="ct" value="2097152"/><input type="hidden" name="s" value="on"/><input class="search-submit" type="submit" value=""/></form></div></div><script>$('input[type=radio][name=search]').change(function() {
|
|
56
|
+
var val = $(this).val()
|
|
57
|
+
var self = '<div class="search-form"><input id="local-search-input" placeholder="站内搜索,首次慢" type="search" name="q" results="0"><input class="search-submit" type="submit" value=""/><div id="local-search-result"></div></div>'
|
|
58
|
+
var google = '<form class="search-form" action="//www.google.com/search" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="q" maxlength="30" placeholder="谷歌全站搜索"><input type="hidden" name="sitesearch" value="xuehuayu.cn"><input class="search-submit" type="submit" value=""/></form>'
|
|
59
|
+
var baidu = '<form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"><input type="hidden" name="si" value="xuehuayu.cn"><input type="hidden" name="cl" value="3"><input type="hidden" name="ct" value="2097152"><input type="hidden" name="s" value="on"><input class="search-submit" type="submit" value=""/></form>'
|
|
60
|
+
|
|
61
|
+
if (val === 'self') {
|
|
62
|
+
$('#search').html(self)
|
|
63
|
+
var search_path = 'search.xml';
|
|
64
|
+
if (search_path.length == 0) {
|
|
65
|
+
search_path = 'search.xml';
|
|
66
|
+
}
|
|
67
|
+
var path = 'https://cdn.staticaly.com/gh/npljy/npljy.github.io/main/' + search_path;
|
|
68
|
+
searchFunc(path, 'local-search-input', 'local-search-result');
|
|
69
|
+
} else if (val === 'baidu') {
|
|
70
|
+
$('#search').html(baidu)
|
|
71
|
+
} else if (val === 'google') {
|
|
72
|
+
$('#search').html(google)
|
|
73
|
+
}
|
|
74
|
+
})</script><div class="widget widget-wxmp"><img alt="微信公众号" width="100%" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/mp-mini.jpg"/></div><div class="widget widget-categories"><div class="widget-title"><i class="fa fa-folder-o"> 分类</i></div><ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/CDN/">CDN</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/IDE/">IDE</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/git/">git</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/hexo/">hexo</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%85%AC%E5%85%B1%E8%8A%82%E6%97%A5/">公共节日</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%88%86%E4%BA%AB/">分享</a><span class="category-list-count">29</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/">前端</a><span class="category-list-count">191</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">1</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/">网络协议</a><span class="category-list-count">1</span></li></ul></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%8D%9A%E5%AE%A2/">博客</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B7%A5%E5%85%B7/">工具</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/">广告过滤</a><span class="category-list-count">8</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/%E8%A7%86%E9%A2%91%E7%94%B5%E8%A7%86%E5%B0%8F%E8%AF%B4%E6%BC%AB%E7%94%BB%E8%B5%84%E8%AE%AF%E9%9F%B3%E4%B9%90/">视频电视小说漫画资讯音乐</a><span class="category-list-count">2</span></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%AD%A3%E5%88%99/">正则</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E7%AE%97%E6%B3%95/">算法</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%B5%84%E8%AE%AF/">资讯</a><span class="category-list-count">16</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%BD%BB%E6%9D%BE%E4%B8%80%E5%88%BB/">轻松一刻</a><span class="category-list-count">1</span></li></ul></div><div class="widget widget-tags"><div class="widget-title"><i class="fa fa-star-o"> 标签</i></div><div class="tagcloud"><a href="/tags/%E5%8E%9F%E5%88%9B/" style="font-size: 15px;">原创</a> <a href="/tags/%E8%BD%AC%E8%BD%BD/" style="font-size: 15px;">转载</a> <a href="/tags/%E6%89%8B%E5%86%99/" style="font-size: 15px;">手写</a> <a href="/tags/%E7%96%AB%E6%83%85/" style="font-size: 15px;">疫情</a> <a href="/tags/%E5%A8%B1%E4%B9%90/" style="font-size: 15px;">娱乐</a></div></div><div class="widget widget-recent-posts"><div class="widget-title"><i class="fa fa-file-o"> 最近文章</i></div><ul class="post-list"><li class="post-list-item"><a class="post-list-link" href="/article/c5576490.html">面试准备</a></li><li class="post-list-item"><a class="post-list-link" href="/article/84c9ccd6.html">精读《SolidJS》</a></li><li class="post-list-item"><a class="post-list-link" href="/article/53803e6.html">git提交注释规范</a></li><li class="post-list-item"><a class="post-list-link" href="/article/a4145266.html">前端数组拍平flat一行代码</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bedea419.html">一道前端this面试题</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bf7e7421.html">git多账号配置</a></li></ul></div><div class="widget widget-links"><div class="widget-title"><i class="fa fa-external-link"> 友情链接</i></div><ul></ul><a href="https://github.com/npljy?utm_source=xuehuayu.cn" title="GitHub" target="_blank">GitHub</a><ul></ul><a href="https://laonongmin.online?utm_source=xuehuayu.cn" title="看看" target="_blank">看看</a><ul></ul><a href="https://cainiaoblog.cn?utm_source=xuehuayu.cn" title="菜鸟博客" target="_blank">菜鸟博客</a><ul></ul><a href="mailto:cainiaoblog@126.com" title="友链联系" target="_blank">友链联系</a></div></div></div><div class="pure-u-1 pure-u-md-3-4"><div id="footer"><div class="flex-block justify-center align-center flex-wrap"><a class="gxba-link" id="gxba" rel="nofollow" target="_blank" href="http://beian.miit.gov.cn/">京ICP备20007647号-2</a><a class="gaba-link" id="gaba-link" rel="nofollow" target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031264"><img class="nofancybox" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/gaba.png" alt=""/><span id="gaba">京公网安备 11010802031264号</span><span style="padding-right: 10px;"></span></a><span>Copyright © 2023 </span><a href="/." rel="nofollow">前端壹菜鸟. </a><script>(function(){
|
|
75
|
+
var cnb =window.location.origin.indexOf('cainiaoblog') !==-1
|
|
76
|
+
if (cnb) {
|
|
77
|
+
var gxba =document.getElementById('gxba')
|
|
78
|
+
var gaba =document.getElementById('gaba')
|
|
79
|
+
var gabaLink =document.getElementById('gaba-link')
|
|
80
|
+
gxba.innerText ='京ICP备20007647号-1'
|
|
81
|
+
gaba.innerText ='京公网安备 11010802031254号'
|
|
82
|
+
gabaLink.setAttribute('href','http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031254')
|
|
83
|
+
}
|
|
84
|
+
})()</script></div><div class="flex-block justify-center align-center flex-wrap"><a rel="nofollow" target="_blank" href="https://v6.51.la/s/Guz3lwHCsVme9Cu"><div class="busuanzi_container" id="busuanzi_container"><span class="busuanzi_container_site_pv" id="busuanzi_container_site_pv">访问量:<span id="busuanzi_value_site_pv"><i class="fa fa-spinner"></i></span></span><span class="busuanzi_container_site_uv" id="busuanzi_container_site_uv">访客数:<span id="busuanzi_value_site_uv"><i class="fa fa-spinner"></i></span></span><span style="padding-right: 10px;"></span></div></a><a rel="nofollow" target="_blank" href="https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral"><span style="font-weight:bold;letter-spacing: 1px;">本网站由 </span><img class="nofancybox" height="32" style="vertical-align: middle" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/upy_logo.min.svg" alt=""/><span style="font-weight:bold;letter-spacing: 1px;">提供CDN加速/云存储服务</span></a><span style="padding-right: 10px;"></span><a rel="nofollow" style="font-size:18px;font-weight:bold;vertical-align: middle" target="_blank" title="注册就送代金券可直接使用" href="https://console.upyun.com/register/?invite=HyDsjZHIL">注册</a></div></div></div></div><a class="show" id="rocket" href="#top"></a><div class="darkmode-toggle">🌓</div><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/totop.min.js" async></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/dark.min.js" async></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/codeblock-resizer.min.js"></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/smartresize.min.js"></script></div></body></html>
|