cainiaoblog 23.2.348 → 23.2.349
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/{app/manual.html → manual.html} +1 -1
- package/package.json +1 -1
- package/CNAME +0 -1
- package/MP_verify_o6dHCK5mIkxNpzvZ.txt +0 -1
- package/README.md +0 -8
- package/about/index.html +0 -55
- package/ads.txt +0 -1
- package/archives/2018/index.html +0 -48
- package/archives/2019/index.html +0 -48
- package/archives/2019/page/2/index.html +0 -48
- package/archives/2020/index.html +0 -48
- package/archives/2021/index.html +0 -48
- package/archives/2022/index.html +0 -48
- package/archives/2023/index.html +0 -48
- package/archives/index.html +0 -48
- package/archives/page/2/index.html +0 -48
- package/archives/page/3/index.html +0 -48
- package/article/10047.html +0 -148
- package/article/10164.html +0 -65
- package/article/10624.html +0 -436
- package/article/10745.html +0 -586
- package/article/11674.html +0 -71
- package/article/11939.html +0 -72
- package/article/12238.html +0 -86
- package/article/1230.html +0 -533
- package/article/13265.html +0 -69
- package/article/13823.html +0 -78
- package/article/14125.html +0 -72
- package/article/14192.html +0 -561
- package/article/14375.html +0 -85
- package/article/14744.html +0 -83
- package/article/14936.html +0 -451
- package/article/1518.html +0 -250
- package/article/15428.html +0 -71
- package/article/15518.html +0 -288
- package/article/15569.html +0 -418
- package/article/1566.html +0 -122
- package/article/16017.html +0 -156
- package/article/16947.html +0 -440
- package/article/17096.html +0 -82
- package/article/17246.html +0 -89
- package/article/17575.html +0 -350
- package/article/179.html +0 -757
- package/article/18039.html +0 -233
- package/article/18071.html +0 -375
- package/article/18142.html +0 -71
- package/article/19909.html +0 -160
- package/article/20014.html +0 -89
- package/article/20021.html +0 -389
- package/article/20037.html +0 -280
- package/article/20056.html +0 -95
- package/article/20093.html +0 -404
- package/article/2021.html +0 -607
- package/article/20459.html +0 -115
- package/article/20613.html +0 -263
- package/article/20635.html +0 -71
- package/article/21317.html +0 -71
- package/article/21320.html +0 -90
- package/article/21782.html +0 -548
- package/article/22230.html +0 -435
- package/article/22237.html +0 -347
- package/article/22398.html +0 -109
- package/article/22422.html +0 -270
- package/article/22565.html +0 -300
- package/article/23046.html +0 -250
- package/article/23083.html +0 -215
- package/article/23195.html +0 -297
- package/article/23301.html +0 -835
- package/article/23589.html +0 -285
- package/article/23655.html +0 -338
- package/article/23864.html +0 -76
- package/article/23914.html +0 -96
- package/article/24169.html +0 -135
- package/article/24581.html +0 -349
- package/article/2475.html +0 -500
- package/article/24826.html +0 -77
- package/article/24924.html +0 -247
- package/article/25164.html +0 -1495
- package/article/25318.html +0 -394
- package/article/25710.html +0 -1129
- package/article/25734.html +0 -83
- package/article/26083.html +0 -174
- package/article/26147.html +0 -283
- package/article/26291.html +0 -110
- package/article/26354.html +0 -71
- package/article/26624.html +0 -145
- package/article/26639.html +0 -298
- package/article/26850.html +0 -138
- package/article/26940.html +0 -258
- package/article/27796.html +0 -190
- package/article/27800.html +0 -161
- package/article/28963.html +0 -159
- package/article/28976.html +0 -247
- package/article/29042.html +0 -72
- package/article/29596.html +0 -81
- package/article/29619.html +0 -183
- package/article/29623.html +0 -329
- package/article/29829.html +0 -205
- package/article/29abbd1c.html +0 -112
- package/article/30215.html +0 -178
- package/article/30552.html +0 -78
- package/article/30818.html +0 -201
- package/article/31330.html +0 -364
- package/article/3154.html +0 -577
- package/article/31695.html +0 -348
- package/article/31826.html +0 -71
- package/article/31843.html +0 -132
- package/article/32280.html +0 -212
- package/article/32431.html +0 -74
- package/article/32443.html +0 -72
- package/article/32732.html +0 -122
- package/article/3286.html +0 -251
- package/article/32960.html +0 -198
- package/article/33713.html +0 -72
- package/article/33899.html +0 -615
- package/article/34351.html +0 -74
- package/article/34372.html +0 -89
- package/article/34410.html +0 -74
- package/article/34431.html +0 -118
- package/article/3447.html +0 -75
- package/article/34474.html +0 -142
- package/article/34871.html +0 -147
- package/article/35397.html +0 -175
- package/article/3544.html +0 -199
- package/article/35503.html +0 -115
- package/article/35624.html +0 -84
- package/article/35697.html +0 -384
- package/article/35863.html +0 -73
- package/article/36037.html +0 -253
- package/article/36118.html +0 -71
- package/article/3621.html +0 -119
- package/article/36251.html +0 -296
- package/article/36642.html +0 -352
- package/article/37102.html +0 -763
- package/article/37336.html +0 -351
- package/article/37351.html +0 -89
- package/article/3760.html +0 -294
- package/article/37749.html +0 -75
- package/article/37789.html +0 -83
- package/article/38005.html +0 -765
- package/article/38009.html +0 -284
- package/article/38269.html +0 -194
- package/article/38344.html +0 -88
- package/article/38359.html +0 -334
- package/article/38423.html +0 -379
- package/article/38530.html +0 -213
- package/article/38743.html +0 -268
- package/article/38753.html +0 -204
- package/article/38881.html +0 -71
- package/article/39087.html +0 -414
- package/article/39309.html +0 -84
- package/article/39486.html +0 -73
- package/article/39637.html +0 -306
- package/article/39839.html +0 -72
- package/article/39937.html +0 -152
- package/article/39970.html +0 -71
- package/article/402.html +0 -559
- package/article/40698.html +0 -71
- package/article/40811.html +0 -71
- package/article/40964.html +0 -462
- package/article/41011.html +0 -322
- package/article/41152.html +0 -78
- package/article/41696.html +0 -71
- package/article/41717.html +0 -281
- package/article/41777.html +0 -149
- package/article/419.html +0 -985
- package/article/4233.html +0 -136
- package/article/4292.html +0 -86
- package/article/43302.html +0 -96
- package/article/43397.html +0 -106
- package/article/43724.html +0 -281
- package/article/43999.html +0 -224
- package/article/44426.html +0 -77
- package/article/44964.html +0 -137
- package/article/45004.html +0 -123
- package/article/4510.html +0 -83
- package/article/45156.html +0 -320
- package/article/45157.html +0 -52
- package/article/45267.html +0 -87
- package/article/45641.html +0 -207
- package/article/45960.html +0 -75
- package/article/46100.html +0 -1262
- package/article/46366.html +0 -74
- package/article/46771.html +0 -96
- package/article/46911.html +0 -517
- package/article/46948.html +0 -137
- package/article/46ee4850.html +0 -349
- package/article/47019.html +0 -84
- package/article/47532.html +0 -94
- package/article/4783.html +0 -429
- package/article/47972.html +0 -72
- package/article/48216.html +0 -127
- package/article/48252.html +0 -185
- package/article/48520.html +0 -74
- package/article/48722.html +0 -75
- package/article/48807.html +0 -99
- package/article/49126.html +0 -323
- package/article/50001.html +0 -88
- package/article/50058.html +0 -151
- package/article/50343.html +0 -410
- package/article/50510.html +0 -82
- package/article/51082.html +0 -98
- package/article/51677.html +0 -111
- package/article/5204.html +0 -1085
- package/article/52500.html +0 -538
- package/article/52689.html +0 -259
- package/article/52877.html +0 -569
- package/article/53125.html +0 -191
- package/article/53428.html +0 -251
- package/article/53524.html +0 -74
- package/article/53698.html +0 -322
- package/article/53803e6.html +0 -93
- package/article/53924.html +0 -291
- package/article/53962.html +0 -253
- package/article/54006.html +0 -71
- package/article/54018.html +0 -88
- package/article/54161.html +0 -83
- package/article/54178.html +0 -69
- package/article/54258.html +0 -327
- package/article/54295.html +0 -214
- package/article/54313.html +0 -1976
- package/article/54351.html +0 -90
- package/article/54604.html +0 -80
- package/article/54632.html +0 -71
- package/article/54912.html +0 -756
- package/article/54918.html +0 -136
- package/article/55119.html +0 -136
- package/article/55756.html +0 -118
- package/article/55769.html +0 -136
- package/article/55870.html +0 -161
- package/article/56139.html +0 -92
- package/article/56557.html +0 -69
- package/article/56604.html +0 -69
- package/article/56816.html +0 -266
- package/article/56926.html +0 -153
- package/article/57747.html +0 -409
- package/article/57965.html +0 -475
- package/article/58816.html +0 -78
- package/article/59059.html +0 -435
- package/article/59095.html +0 -350
- package/article/59349.html +0 -244
- package/article/59402.html +0 -216
- package/article/59448.html +0 -55
- package/article/59870.html +0 -94
- package/article/59877.html +0 -208
- package/article/5dbb6f41.html +0 -86
- package/article/6008.html +0 -75
- package/article/60327.html +0 -126
- package/article/6035.html +0 -76
- package/article/60428.html +0 -71
- package/article/60544.html +0 -128
- package/article/61319.html +0 -95
- package/article/61367.html +0 -93
- package/article/624d1918.html +0 -292
- package/article/62543.html +0 -71
- package/article/62887.html +0 -169
- package/article/63074.html +0 -120
- package/article/63266.html +0 -311
- package/article/63351.html +0 -74
- package/article/63542.html +0 -104
- package/article/63824.html +0 -275
- package/article/64051.html +0 -653
- package/article/64189b69.html +0 -72
- package/article/64354.html +0 -75
- package/article/64869.html +0 -79
- package/article/64923.html +0 -596
- package/article/65128.html +0 -95
- package/article/65295.html +0 -79
- package/article/6888.html +0 -75
- package/article/7065.html +0 -84
- package/article/7455.html +0 -85
- package/article/7a3ef8f.html +0 -315
- package/article/8140.html +0 -188
- package/article/8190.html +0 -85
- package/article/8225.html +0 -78
- package/article/84c9ccd6.html +0 -159
- package/article/8f9a9ae3.html +0 -82
- package/article/9174.html +0 -73
- package/article/9738.html +0 -294
- package/article/9c3c56c.html +0 -682
- package/article/a4145266.html +0 -71
- package/article/bedea419.html +0 -72
- package/article/bf7e7421.html +0 -78
- package/article/c1867fbf.html +0 -103
- package/article/dcb0db28.html +0 -76
- package/article/fc3b727a.html +0 -79
- package/atom.xml +0 -441
- package/baidusitemap.xml +0 -1079
- package/blocks/dns.txt +0 -291
- package/blocks/filter.txt +0 -1068
- package/blocks/script.js +0 -42
- package/categories/CDN/index.html +0 -48
- package/categories/IDE/index.html +0 -48
- package/categories/git/index.html +0 -48
- package/categories/hexo/index.html +0 -48
- package/categories//345/205/254/345/205/261/350/212/202/346/227/245/index.html +0 -48
- package/categories//345/210/206/344/272/253/index.html +0 -48
- package/categories//345/211/215/347/253/257/index.html +0 -48
- package/categories//345/211/215/347/253/257/page/2/index.html +0 -48
- package/categories//345/211/215/347/253/257//346/265/217/350/247/210/345/231/250/index.html +0 -48
- 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 +0 -48
- package/categories//345/215/232/345/256/242/index.html +0 -48
- package/categories//345/267/245/345/205/267/index.html +0 -48
- package/categories//345/271/277/345/221/212/350/277/207/346/273/244/index.html +0 -48
- package/categories//345/271/277/345/221/212/350/277/207/346/273/244//345/275/261/350/247/206/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 +0 -48
- 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 +0 -48
- package/categories//346/255/243/345/210/231/index.html +0 -48
- package/categories//346/265/217/350/247/210/345/231/250/index.html +0 -48
- package/categories//347/256/227/346/263/225/index.html +0 -48
- package/categories//350/265/204/350/256/257/index.html +0 -48
- package/categories//350/275/273/346/235/276/344/270/200/345/210/273/index.html +0 -48
- package/cdn/css/font-awesome.min.css +0 -4
- package/cdn/css/grids-responsive-min.css +0 -7
- package/cdn/css/normalize.css +0 -349
- package/cdn/css/pure-min.css +0 -11
- package/cdn/fonts/fontawesome-webfont.eot +0 -0
- package/cdn/fonts/fontawesome-webfont.svg +0 -2671
- 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 +0 -17
- package/cdn/js/canvas-nest.js +0 -1
- package/cdn/js/clipboard.min.js +0 -7
- package/cdn/js/crypto-js.js +0 -25
- package/cdn/js/jquery.min.js +0 -2
- package/css/default.css +0 -1144
- package/css/donate.css +0 -338
- package/css/hbe.style.css +0 -749
- package/css/style.css +0 -2095
- package/donate/index.html +0 -40
- package/google917dcf72f6e5c7f5.html +0 -1
- package/guestbook/index.html +0 -68
- package/hosts/ads.txt +0 -149
- package/hosts/flash.txt +0 -9
- package/hosts/github.txt +0 -15
- package/hosts/google.txt +0 -16936
- package/hosts/winrar.txt +0 -2
- package/img/alipay.svg +0 -46
- package/img/bitcoin.svg +0 -135
- package/img/blog.ico +0 -0
- package/img/blog.png +0 -0
- package/img/gaba.png +0 -0
- package/img/github.svg +0 -1
- package/img/like.svg +0 -1
- package/img/mp-mini.jpg +0 -0
- package/img/mp.png +0 -0
- package/img/paypal.svg +0 -63
- package/img/upy_logo.svg +0 -59
- package/img/wechat.svg +0 -49
- package/index.html +0 -48
- package/jd_root.txt +0 -1
- package/js/codeblock-resizer.js +0 -51
- package/js/dark.js +0 -12
- package/js/donate.js +0 -87
- package/js/fixedPage.js +0 -110
- package/js/gitment.browser.js +0 -3751
- package/js/search.js +0 -86
- package/js/share.js +0 -60
- package/js/smartresize.js +0 -32
- package/js/totop.js +0 -12
- package/kankan/index.html +0 -1323
- package/lib/hbe.js +0 -297
- package/page/10/index.html +0 -49
- package/page/11/index.html +0 -59
- package/page/12/index.html +0 -67
- package/page/13/index.html +0 -63
- package/page/14/index.html +0 -66
- package/page/15/index.html +0 -60
- package/page/16/index.html +0 -60
- package/page/17/index.html +0 -62
- package/page/18/index.html +0 -61
- package/page/19/index.html +0 -58
- package/page/2/index.html +0 -48
- package/page/20/index.html +0 -57
- package/page/21/index.html +0 -61
- package/page/22/index.html +0 -55
- package/page/23/index.html +0 -64
- package/page/24/index.html +0 -60
- package/page/25/index.html +0 -58
- package/page/26/index.html +0 -48
- package/page/27/index.html +0 -58
- package/page/3/index.html +0 -48
- package/page/4/index.html +0 -48
- package/page/5/index.html +0 -51
- package/page/6/index.html +0 -51
- package/page/7/index.html +0 -51
- package/page/8/index.html +0 -53
- package/page/9/index.html +0 -48
- package/randomcall/README.html +0 -1
- package/randomcall/lucker.html +0 -290
- package/randomcall/lucky.png +0 -0
- package/robots.txt +0 -22
- package/search.xml +0 -6728
- package/sitemap.xml +0 -2694
- package/tags//345/216/237/345/210/233/index.html +0 -48
- package/tags//345/250/261/344/271/220/index.html +0 -48
- package/tags//346/211/213/345/206/231/index.html +0 -48
- package/tags//347/226/253/346/203/205/index.html +0 -48
- package/tags//350/275/254/350/275/275/index.html +0 -48
- package/tags//350/275/254/350/275/275/page/2/index.html +0 -48
- package/v.html +0 -22
- /package/{appConfigs/config → config} +0 -0
- /package/{extConfigs/extension.json → extension.json} +0 -0
package/article/4233.html
DELETED
|
@@ -1,136 +0,0 @@
|
|
|
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>TypeScript和JavaScript混合开发,这或许是配上单元测试的最佳实践 | 前端壹菜鸟</title><link rel="stylesheet" type="text/css" href="//unpkg.com/cainiaoblog@latest/css/style.css"><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/cainiaoblog@latest/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.jsdelivr.net/npm/cainiaoblog@latest/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">TypeScript和JavaScript混合开发,这或许是配上单元测试的最佳实践</h1><div class="post-meta"><span class="date">2020-02-03</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%88%86%E4%BA%AB/">分享 </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"> 728</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"> 3</span><span class="post-meta-item-text"> 分钟</span></span></span></div><a class="disqus-comment-count" href="/article/4233.html#vcomment"><span class="waline-comment-count" data-path="/article/4233.html"></span><span> 条评论</span></a><div class="post-content"><p><code>作者:前端巅峰 公号 / Peter 谭金杰 原文地址:https://mp.weixin.qq.com/s/L_3z5rlXFTDdwvHpN9tI6g</code><br>既然你选择了TypeScript,那么尽量不要使用any,特殊情况下可以用索引签名或者泛型解决</p>
|
|
20
|
-
<span id="more"></span>
|
|
21
|
-
|
|
22
|
-
<p>索引签名:</p>
|
|
23
|
-
<p>可以用字符串访问 JavaScript 中的对象(TypeScript 中也一样),用来保存对其他对象的引用</p>
|
|
24
|
-
<p>当你声明一个索引签名时,所有明确的成员都必须符合索引签名</p>
|
|
25
|
-
<p>例如:</p>
|
|
26
|
-
<pre><code>// okinterface Foo { [key: string]: number; x: number; y: number;}
|
|
27
|
-
// Errorinterface Bar { [key: string]: number; x: number; y: string; // Error: y 属性必须为 number 类型}
|
|
28
|
-
</code></pre>
|
|
29
|
-
<hr>
|
|
30
|
-
<p>当你有项目需要从javaScript迁移到TypeScript中时,有一部分同学做法是,把所有到文件从.js全部改成.ts,然后加上所有类型为any,这样完成快速迁移,但是其实不需要这样。</p>
|
|
31
|
-
<p>我们可以让TS和JS进行混合开发</p>
|
|
32
|
-
<hr>
|
|
33
|
-
<p>还是不废话了,直接给一套配置吧,其实就是两点:</p>
|
|
34
|
-
<p>一、在项目根路径下使用tsc –init,生成tsconfig.json文件:</p>
|
|
35
|
-
<p>配置allowJs选择为:true</p>
|
|
36
|
-
<pre><code>{ "compilerOptions": { "jsx": "react", "target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */, "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, "allowJs": true, /* Allow javascript files to be compiled. */ "strict": true /* Enable all strict type-checking options. */, "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ } }
|
|
37
|
-
</code></pre>
|
|
38
|
-
<hr>
|
|
39
|
-
<p>然后在webpack.base.config.js文件中配置loader处理.ts .tsx代码文件</p>
|
|
40
|
-
<pre><code> extensions: ['.ts', '.tsx', '.js', '.jsx'],
|
|
41
|
-
{
|
|
42
|
-
test: /\.ts(x?)$/,
|
|
43
|
-
use: [
|
|
44
|
-
{
|
|
45
|
-
loader: 'babel-loader',
|
|
46
|
-
options: { //jsx语法 presets:
|
|
47
|
-
[
|
|
48
|
-
['@babel/preset-env', { modules: false }]
|
|
49
|
-
],
|
|
50
|
-
cacheDirectory: true,
|
|
51
|
-
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
loader: 'awesome-typescript-loader',
|
|
56
|
-
},
|
|
57
|
-
],
|
|
58
|
-
},
|
|
59
|
-
</code></pre>
|
|
60
|
-
<p>这样你就可以使用JS和TS混合开发了,在这过程中,你并不需要使用any去完成快速迁移,因为当你全部使用any后,会导致不可预测的情况出现。而且后期还要重构那一部分。</p>
|
|
61
|
-
<p>当然,单元测试的代码配置也要改变,我平常使用的是JEST</p>
|
|
62
|
-
<hr>
|
|
63
|
-
<p>setupEnzyme.ts文件</p>
|
|
64
|
-
<pre><code>import Enzyme from 'enzyme';
|
|
65
|
-
import Adapter from 'enzyme-adapter-react-16';
|
|
66
|
-
Enzyme.configure({ adapter: new Adapter(),});
|
|
67
|
-
</code></pre>
|
|
68
|
-
<p>_test__文件夹下面的文件,也要改成.tsx .ts为后缀结尾</p>
|
|
69
|
-
<p>jest.config.js文件也要修改</p>
|
|
70
|
-
<pre><code>const path = require('path');
|
|
71
|
-
module.exports = {
|
|
72
|
-
roots: ['<rootDir>/test'],
|
|
73
|
-
testRegex: 'test/(.+)\\.test\\.(jsx?|tsx?)$',
|
|
74
|
-
transform: {
|
|
75
|
-
'^.+\\.tsx?$': 'ts-jest',
|
|
76
|
-
},
|
|
77
|
-
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
|
|
78
|
-
moduleNameMapper: {
|
|
79
|
-
'\\.(css|less)$': 'identity-obj-proxy',
|
|
80
|
-
},
|
|
81
|
-
setupFilesAfterEnv: [path.resolve(__dirname, './setupEnzyme.ts')],
|
|
82
|
-
testEnvironment: 'enzyme',
|
|
83
|
-
};
|
|
84
|
-
</code></pre>
|
|
85
|
-
<p>这样你就可以在JS中愉快的编写TS,互相引用,甚至使用愉快的使用单元测试</p>
|
|
86
|
-
<p>觉得本文对你有帮助?请分享给更多人</p>
|
|
87
|
-
</div><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者:</strong>雪花雨</li><li class="post-copyright-link"><strong>本文链接:</strong><a href="/article/4233.html">https://xuehuayu.cn/article/4233.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/53524.html">两层div,如何使内层div的内容不换行,超出滚动</a><a class="next" href="/article/63266.html">CSS实现自适应分隔线的N种方法</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
|
|
88
|
-
const serverURL = origin.includes('cainiaoblog') ? 'https://cmts.cainiaoblog.cn' : 'https://cmts.xuehuayu.cn'
|
|
89
|
-
const locale = {
|
|
90
|
-
placeholder: '请正确填写昵称和邮箱,方便接收回复通知~',
|
|
91
|
-
sofa: '沙发空缺中,还不快抢~',
|
|
92
|
-
};
|
|
93
|
-
Waline.init({
|
|
94
|
-
el: '#vcomment',
|
|
95
|
-
serverURL: serverURL,
|
|
96
|
-
pageSize: '20',
|
|
97
|
-
visitor: true, // 阅读量统计
|
|
98
|
-
requiredMeta: ['nick', 'mail'],
|
|
99
|
-
emoji: [
|
|
100
|
-
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/weibo',
|
|
101
|
-
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/qq',
|
|
102
|
-
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/tw-emoji',
|
|
103
|
-
],
|
|
104
|
-
locale,
|
|
105
|
-
pageview: true
|
|
106
|
-
})
|
|
107
|
-
</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.jsdelivr.net/npm/cainiaoblog@latest/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() {
|
|
108
|
-
var val = $(this).val()
|
|
109
|
-
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>'
|
|
110
|
-
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>'
|
|
111
|
-
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>'
|
|
112
|
-
|
|
113
|
-
if (val === 'self') {
|
|
114
|
-
$('#search').html(self)
|
|
115
|
-
var search_path = 'search.xml';
|
|
116
|
-
if (search_path.length == 0) {
|
|
117
|
-
search_path = 'search.xml';
|
|
118
|
-
}
|
|
119
|
-
var path = 'https://cdn.staticaly.com/gh/npljy/npljy.github.io/main/' + search_path;
|
|
120
|
-
searchFunc(path, 'local-search-input', 'local-search-result');
|
|
121
|
-
} else if (val === 'baidu') {
|
|
122
|
-
$('#search').html(baidu)
|
|
123
|
-
} else if (val === 'google') {
|
|
124
|
-
$('#search').html(google)
|
|
125
|
-
}
|
|
126
|
-
})</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">190</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/%E5%BD%B1%E8%A7%86%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">1</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/%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">1</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/9c3c56c.html">vue、react、webpack、babel</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(){
|
|
127
|
-
var cnb =window.location.origin.indexOf('cainiaoblog') !==-1
|
|
128
|
-
if (cnb) {
|
|
129
|
-
var gxba =document.getElementById('gxba')
|
|
130
|
-
var gaba =document.getElementById('gaba')
|
|
131
|
-
var gabaLink =document.getElementById('gaba-link')
|
|
132
|
-
gxba.innerText ='京ICP备20007647号-1'
|
|
133
|
-
gaba.innerText ='京公网安备 11010802031254号'
|
|
134
|
-
gabaLink.setAttribute('href','http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031254')
|
|
135
|
-
}
|
|
136
|
-
})()</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.jsdelivr.net/npm/cainiaoblog@latest/js/totop.min.js" async></script><script type="text/javascript" src="//cdn.jsdelivr.net/npm/cainiaoblog@latest/js/dark.min.js" async></script><script type="text/javascript" src="//cdn.jsdelivr.net/npm/cainiaoblog@latest/js/codeblock-resizer.min.js"></script><script type="text/javascript" src="//cdn.jsdelivr.net/npm/cainiaoblog@latest/js/smartresize.min.js"></script></div></body></html>
|
package/article/4292.html
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
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>jsdelivr挂了不能访问替代方案还有哪些免费cdn | 前端壹菜鸟</title><link rel="stylesheet" type="text/css" href="//unpkg.com/cainiaoblog@latest/css/style.css"><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/cainiaoblog@latest/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.jsdelivr.net/npm/cainiaoblog@latest/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">jsdelivr挂了不能访问替代方案还有哪些免费cdn</h1><div class="post-meta"><span class="date">2021-12-20</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/CDN/">CDN </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"> 255</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/4292.html#vcomment"><span class="waline-comment-count" data-path="/article/4292.html"></span><span> 条评论</span></a><div class="post-content"><p>今天是2021.12.20,<code>jsdelivr</code> <code>cdn</code>大陆挂了不能访问了</p>
|
|
20
|
-
<span id="more"></span>
|
|
21
|
-
<p><code>jsdelivr</code>挂了,截止18点前,已经恢复了。</p>
|
|
22
|
-
<h4 id="项目中静态文件替换"><a href="#项目中静态文件替换" class="headerlink" title="项目中静态文件替换"></a>项目中静态文件替换</h4><p><a target="_blank" rel="noopener" href="https://unicloud.dcloud.net.cn/">uniCloud云存储</a></p>
|
|
23
|
-
<p>使用阿里的cdn链接,还是免费的,步骤如下</p>
|
|
24
|
-
<ol>
|
|
25
|
-
<li>创建免费的[阿里云]服务空间</li>
|
|
26
|
-
<li>进入云空间,左侧点击“云存储”</li>
|
|
27
|
-
<li>上传文件后,点击“详情”,复制链接,</li>
|
|
28
|
-
</ol>
|
|
29
|
-
<h4 id="npm库替换"><a href="#npm库替换" class="headerlink" title="npm库替换"></a>npm库替换</h4><p>如果你使用的是<code>npm</code>库,使用<code>unpkg.com</code>替换!<br>什么?<code>unpkg</code>太慢了?好吧,使用知乎的国内镜像<code>unpkg.zhimg.com</code><br><strong>有人反应因为jsdelivr问题导致知乎镜像访问量剧增导致偶尔也会挂掉</strong></p>
|
|
30
|
-
<p>全局搜索<code>cdn.jsdelivr.net/npm</code>替换为<code>unpkg.zhimg.com</code></p>
|
|
31
|
-
<h4 id="github库替换"><a href="#github库替换" class="headerlink" title="github库替换"></a>github库替换</h4><ol>
|
|
32
|
-
<li><p>如果你使用的是<code>github</code>库,可以使用<code>staticaly</code>,请看我这篇文章:<a href="/article/54918.html"><strong>推荐几款免费且不限流量的全球CDN</strong></a></p>
|
|
33
|
-
</li>
|
|
34
|
-
<li><p>如果没有敏感信息,可以使用国内开源中国的<code>gitee</code>和CSDN的<code>gitcode</code>等,将github仓库克隆至<code>gitee</code> <code>gitcode</code>,然后使用<code>raw</code>原始文件</p>
|
|
35
|
-
</li>
|
|
36
|
-
</ol>
|
|
37
|
-
</div><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者:</strong>雪花雨</li><li class="post-copyright-link"><strong>本文链接:</strong><a href="/article/4292.html">https://xuehuayu.cn/article/4292.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/64189b69.html">Hbuilder格式化插件js-beautify配置</a><a class="next" href="/article/37789.html">Promise.any无效?通过Promise.all实现Promise.any</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
|
|
38
|
-
const serverURL = origin.includes('cainiaoblog') ? 'https://cmts.cainiaoblog.cn' : 'https://cmts.xuehuayu.cn'
|
|
39
|
-
const locale = {
|
|
40
|
-
placeholder: '请正确填写昵称和邮箱,方便接收回复通知~',
|
|
41
|
-
sofa: '沙发空缺中,还不快抢~',
|
|
42
|
-
};
|
|
43
|
-
Waline.init({
|
|
44
|
-
el: '#vcomment',
|
|
45
|
-
serverURL: serverURL,
|
|
46
|
-
pageSize: '20',
|
|
47
|
-
visitor: true, // 阅读量统计
|
|
48
|
-
requiredMeta: ['nick', 'mail'],
|
|
49
|
-
emoji: [
|
|
50
|
-
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/weibo',
|
|
51
|
-
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/qq',
|
|
52
|
-
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/tw-emoji',
|
|
53
|
-
],
|
|
54
|
-
locale,
|
|
55
|
-
pageview: true
|
|
56
|
-
})
|
|
57
|
-
</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.jsdelivr.net/npm/cainiaoblog@latest/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() {
|
|
58
|
-
var val = $(this).val()
|
|
59
|
-
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>'
|
|
60
|
-
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>'
|
|
61
|
-
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>'
|
|
62
|
-
|
|
63
|
-
if (val === 'self') {
|
|
64
|
-
$('#search').html(self)
|
|
65
|
-
var search_path = 'search.xml';
|
|
66
|
-
if (search_path.length == 0) {
|
|
67
|
-
search_path = 'search.xml';
|
|
68
|
-
}
|
|
69
|
-
var path = 'https://cdn.staticaly.com/gh/npljy/npljy.github.io/main/' + search_path;
|
|
70
|
-
searchFunc(path, 'local-search-input', 'local-search-result');
|
|
71
|
-
} else if (val === 'baidu') {
|
|
72
|
-
$('#search').html(baidu)
|
|
73
|
-
} else if (val === 'google') {
|
|
74
|
-
$('#search').html(google)
|
|
75
|
-
}
|
|
76
|
-
})</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">190</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/%E5%BD%B1%E8%A7%86%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">1</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/%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">1</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/9c3c56c.html">vue、react、webpack、babel</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(){
|
|
77
|
-
var cnb =window.location.origin.indexOf('cainiaoblog') !==-1
|
|
78
|
-
if (cnb) {
|
|
79
|
-
var gxba =document.getElementById('gxba')
|
|
80
|
-
var gaba =document.getElementById('gaba')
|
|
81
|
-
var gabaLink =document.getElementById('gaba-link')
|
|
82
|
-
gxba.innerText ='京ICP备20007647号-1'
|
|
83
|
-
gaba.innerText ='京公网安备 11010802031254号'
|
|
84
|
-
gabaLink.setAttribute('href','http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031254')
|
|
85
|
-
}
|
|
86
|
-
})()</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.jsdelivr.net/npm/cainiaoblog@latest/js/totop.min.js" async></script><script type="text/javascript" src="//cdn.jsdelivr.net/npm/cainiaoblog@latest/js/dark.min.js" async></script><script type="text/javascript" src="//cdn.jsdelivr.net/npm/cainiaoblog@latest/js/codeblock-resizer.min.js"></script><script type="text/javascript" src="//cdn.jsdelivr.net/npm/cainiaoblog@latest/js/smartresize.min.js"></script></div></body></html>
|
package/article/43302.html
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
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>react预览pdf和图片遇到的一些坑 | 前端壹菜鸟</title><link rel="stylesheet" type="text/css" href="//unpkg.com/cainiaoblog@latest/css/style.css"><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/cainiaoblog@latest/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.jsdelivr.net/npm/cainiaoblog@latest/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">react预览pdf和图片遇到的一些坑</h1><div class="post-meta"><span class="date">2020-04-03</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"> 665</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"> 3</span><span class="post-meta-item-text"> 分钟</span></span></span></div><a class="disqus-comment-count" href="/article/43302.html#vcomment"><span class="waline-comment-count" data-path="/article/43302.html"></span><span> 条评论</span></a><div class="post-content"><p>react中使用pdf和图片预览遇到的一些坑,有啥问题欢迎留言一起讨论</p>
|
|
20
|
-
<span id="more"></span>
|
|
21
|
-
<h4 id="需求"><a href="#需求" class="headerlink" title="需求"></a>需求</h4><p>近期项目中新需求要用到pdf和图片的预览功能,由于项目时间较久,react用的是15.5.4版本,项目接口返回的数据是文件流。</p>
|
|
22
|
-
<h4 id="使用插件"><a href="#使用插件" class="headerlink" title="使用插件"></a>使用插件</h4><p>这里使用<code>react-pdf</code>预览pdf,图片直接使用img标签</p>
|
|
23
|
-
<p>因为react版本是15.5.4,所以不能使用最新版,这里使用的的是 <code>react-pdf@3.0.6</code>,这个是3版本的最后一个版本</p>
|
|
24
|
-
<p>ract-images使用的最新版</p>
|
|
25
|
-
<p>安装</p>
|
|
26
|
-
<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm i -S react-pdf@<span class="number">3.0</span><span class="number">.6</span></span><br></pre></td></tr></table></figure>
|
|
27
|
-
|
|
28
|
-
<h4 id="遇到的坑"><a href="#遇到的坑" class="headerlink" title="遇到的坑"></a>遇到的坑</h4><ul>
|
|
29
|
-
<li>pdf预览的时候 浏览器控制台 network 有个 pdfjs.worker.js 报红 404<br>查看react-pdf文档,1、需要安装 pdfjs-dist,2、忽略pdfjs.worker.js</li>
|
|
30
|
-
</ul>
|
|
31
|
-
<p><code>试了第一种方法,没啥用,仍然报错,所以使用第二种方法</code></p>
|
|
32
|
-
<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> { <span class="title class_">Document</span> } <span class="keyword">from</span> <span class="string">'react-pdf/dist/entry.noworker'</span></span><br></pre></td></tr></table></figure>
|
|
33
|
-
|
|
34
|
-
<ul>
|
|
35
|
-
<li>解决了上面的问题之后,使用本地pdf文件试了正常,完美。。。然而,换了线上地址之后,又双叒叕 报错了</li>
|
|
36
|
-
</ul>
|
|
37
|
-
<p><code>Unexpected server response (500) while retrieving PDF</code></p>
|
|
38
|
-
<p><code>这个问题是由于请求的时候没有发送验证token,无权限导致的,查看了react-pdf的github文档,发现填写链接的file属性可以是一个对象,对象中可以添加请求头信息</code></p>
|
|
39
|
-
<ul>
|
|
40
|
-
<li>Page标签只能显示一个页面,无法展示全部的页面<br>加载成功后使用<code>onDocumentLoadSuccess</code>方法获取总页数,然后循环一下,展示出每一页</li>
|
|
41
|
-
</ul>
|
|
42
|
-
<hr>
|
|
43
|
-
<blockquote>
|
|
44
|
-
<p>搞定,附上 代码</p>
|
|
45
|
-
</blockquote>
|
|
46
|
-
<h4 id="页面代码"><a href="#页面代码" class="headerlink" title="页面代码"></a>页面代码</h4><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br></pre></td><td class="code"><pre><span class="line">import React, {Component} from 'react'</span><br><span class="line">import { Page } from 'react-pdf'</span><br><span class="line">import { Document } from 'react-pdf/dist/entry.noworker'</span><br><span class="line"></span><br><span class="line">class FilePreview extends Component {</span><br><span class="line"></span><br><span class="line"> constructor (props) {</span><br><span class="line"> super(props)</span><br><span class="line"> this.state = {</span><br><span class="line"> numPages: null, //pdf总页数</span><br><span class="line"> pageNumber: 1 // pdf当前页</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> onDocumentLoadSuccess = ({ numPages }) => {</span><br><span class="line"> this.setState({ numPages })</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> render () {</span><br><span class="line"></span><br><span class="line"> const pdf = Util.getPreviewUrl(fileId, applyId)</span><br><span class="line"></span><br><span class="line"> if (fileType === 'images') {</span><br><span class="line"> return (</span><br><span class="line"> <div style={ {width: '100%', height: '100%', padding: '0 5rem 1rem'} }></span><br><span class="line"> <img src={imageUrl} /> // 图片的url,可以是文件链接,也可以是文件流</span><br><span class="line"> </div></span><br><span class="line"> )</span><br><span class="line"> } else if (fileType === 'pdf') {</span><br><span class="line"></span><br><span class="line"> return (</span><br><span class="line"> <div className='pdf-preview' style={ { textAlign: 'center' } }></span><br><span class="line"> <Document</span><br><span class="line"> className='pdf'</span><br><span class="line"> file={ {url: pdf, httpHeaders: { 'Authorization': `Bearer ${token}` }, withCredentials: true} }</span><br><span class="line"> loading=""</span><br><span class="line"> onLoadSuccess={this.onDocumentLoadSuccess}</span><br><span class="line"> ></span><br><span class="line"> { new Array(numPages).fill(' ').map((e, i) => {</span><br><span class="line"> return (</span><br><span class="line"> <Page</span><br><span class="line"> className='page'</span><br><span class="line"> key={i}</span><br><span class="line"> pageNumber={i + 1} //当前页页码</span><br><span class="line"> width={1000}</span><br><span class="line"> /></span><br><span class="line"> )</span><br><span class="line"> })}</span><br><span class="line"> </Document></span><br><span class="line"> </div></span><br><span class="line"> )</span><br><span class="line"> } else {</span><br><span class="line"> return <div>附件不可预览</div></span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">export default FilePreview</span><br></pre></td></tr></table></figure>
|
|
47
|
-
</div><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者:</strong>雪花雨</li><li class="post-copyright-link"><strong>本文链接:</strong><a href="/article/43302.html">https://xuehuayu.cn/article/43302.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/39309.html">antd的select选择框选项水平横向排列</a><a class="next" href="/article/34474.html">超详细JS的事件循环机制</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
|
|
48
|
-
const serverURL = origin.includes('cainiaoblog') ? 'https://cmts.cainiaoblog.cn' : 'https://cmts.xuehuayu.cn'
|
|
49
|
-
const locale = {
|
|
50
|
-
placeholder: '请正确填写昵称和邮箱,方便接收回复通知~',
|
|
51
|
-
sofa: '沙发空缺中,还不快抢~',
|
|
52
|
-
};
|
|
53
|
-
Waline.init({
|
|
54
|
-
el: '#vcomment',
|
|
55
|
-
serverURL: serverURL,
|
|
56
|
-
pageSize: '20',
|
|
57
|
-
visitor: true, // 阅读量统计
|
|
58
|
-
requiredMeta: ['nick', 'mail'],
|
|
59
|
-
emoji: [
|
|
60
|
-
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/weibo',
|
|
61
|
-
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/qq',
|
|
62
|
-
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/tw-emoji',
|
|
63
|
-
],
|
|
64
|
-
locale,
|
|
65
|
-
pageview: true
|
|
66
|
-
})
|
|
67
|
-
</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.jsdelivr.net/npm/cainiaoblog@latest/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() {
|
|
68
|
-
var val = $(this).val()
|
|
69
|
-
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>'
|
|
70
|
-
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>'
|
|
71
|
-
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>'
|
|
72
|
-
|
|
73
|
-
if (val === 'self') {
|
|
74
|
-
$('#search').html(self)
|
|
75
|
-
var search_path = 'search.xml';
|
|
76
|
-
if (search_path.length == 0) {
|
|
77
|
-
search_path = 'search.xml';
|
|
78
|
-
}
|
|
79
|
-
var path = 'https://cdn.staticaly.com/gh/npljy/npljy.github.io/main/' + search_path;
|
|
80
|
-
searchFunc(path, 'local-search-input', 'local-search-result');
|
|
81
|
-
} else if (val === 'baidu') {
|
|
82
|
-
$('#search').html(baidu)
|
|
83
|
-
} else if (val === 'google') {
|
|
84
|
-
$('#search').html(google)
|
|
85
|
-
}
|
|
86
|
-
})</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">190</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/%E5%BD%B1%E8%A7%86%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">1</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/%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">1</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/9c3c56c.html">vue、react、webpack、babel</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(){
|
|
87
|
-
var cnb =window.location.origin.indexOf('cainiaoblog') !==-1
|
|
88
|
-
if (cnb) {
|
|
89
|
-
var gxba =document.getElementById('gxba')
|
|
90
|
-
var gaba =document.getElementById('gaba')
|
|
91
|
-
var gabaLink =document.getElementById('gaba-link')
|
|
92
|
-
gxba.innerText ='京ICP备20007647号-1'
|
|
93
|
-
gaba.innerText ='京公网安备 11010802031254号'
|
|
94
|
-
gabaLink.setAttribute('href','http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031254')
|
|
95
|
-
}
|
|
96
|
-
})()</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.jsdelivr.net/npm/cainiaoblog@latest/js/totop.min.js" async></script><script type="text/javascript" src="//cdn.jsdelivr.net/npm/cainiaoblog@latest/js/dark.min.js" async></script><script type="text/javascript" src="//cdn.jsdelivr.net/npm/cainiaoblog@latest/js/codeblock-resizer.min.js"></script><script type="text/javascript" src="//cdn.jsdelivr.net/npm/cainiaoblog@latest/js/smartresize.min.js"></script></div></body></html>
|