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.
Files changed (403) hide show
  1. package/{app/manual.html → manual.html} +1 -1
  2. package/package.json +1 -1
  3. package/CNAME +0 -1
  4. package/MP_verify_o6dHCK5mIkxNpzvZ.txt +0 -1
  5. package/README.md +0 -8
  6. package/about/index.html +0 -55
  7. package/ads.txt +0 -1
  8. package/archives/2018/index.html +0 -48
  9. package/archives/2019/index.html +0 -48
  10. package/archives/2019/page/2/index.html +0 -48
  11. package/archives/2020/index.html +0 -48
  12. package/archives/2021/index.html +0 -48
  13. package/archives/2022/index.html +0 -48
  14. package/archives/2023/index.html +0 -48
  15. package/archives/index.html +0 -48
  16. package/archives/page/2/index.html +0 -48
  17. package/archives/page/3/index.html +0 -48
  18. package/article/10047.html +0 -148
  19. package/article/10164.html +0 -65
  20. package/article/10624.html +0 -436
  21. package/article/10745.html +0 -586
  22. package/article/11674.html +0 -71
  23. package/article/11939.html +0 -72
  24. package/article/12238.html +0 -86
  25. package/article/1230.html +0 -533
  26. package/article/13265.html +0 -69
  27. package/article/13823.html +0 -78
  28. package/article/14125.html +0 -72
  29. package/article/14192.html +0 -561
  30. package/article/14375.html +0 -85
  31. package/article/14744.html +0 -83
  32. package/article/14936.html +0 -451
  33. package/article/1518.html +0 -250
  34. package/article/15428.html +0 -71
  35. package/article/15518.html +0 -288
  36. package/article/15569.html +0 -418
  37. package/article/1566.html +0 -122
  38. package/article/16017.html +0 -156
  39. package/article/16947.html +0 -440
  40. package/article/17096.html +0 -82
  41. package/article/17246.html +0 -89
  42. package/article/17575.html +0 -350
  43. package/article/179.html +0 -757
  44. package/article/18039.html +0 -233
  45. package/article/18071.html +0 -375
  46. package/article/18142.html +0 -71
  47. package/article/19909.html +0 -160
  48. package/article/20014.html +0 -89
  49. package/article/20021.html +0 -389
  50. package/article/20037.html +0 -280
  51. package/article/20056.html +0 -95
  52. package/article/20093.html +0 -404
  53. package/article/2021.html +0 -607
  54. package/article/20459.html +0 -115
  55. package/article/20613.html +0 -263
  56. package/article/20635.html +0 -71
  57. package/article/21317.html +0 -71
  58. package/article/21320.html +0 -90
  59. package/article/21782.html +0 -548
  60. package/article/22230.html +0 -435
  61. package/article/22237.html +0 -347
  62. package/article/22398.html +0 -109
  63. package/article/22422.html +0 -270
  64. package/article/22565.html +0 -300
  65. package/article/23046.html +0 -250
  66. package/article/23083.html +0 -215
  67. package/article/23195.html +0 -297
  68. package/article/23301.html +0 -835
  69. package/article/23589.html +0 -285
  70. package/article/23655.html +0 -338
  71. package/article/23864.html +0 -76
  72. package/article/23914.html +0 -96
  73. package/article/24169.html +0 -135
  74. package/article/24581.html +0 -349
  75. package/article/2475.html +0 -500
  76. package/article/24826.html +0 -77
  77. package/article/24924.html +0 -247
  78. package/article/25164.html +0 -1495
  79. package/article/25318.html +0 -394
  80. package/article/25710.html +0 -1129
  81. package/article/25734.html +0 -83
  82. package/article/26083.html +0 -174
  83. package/article/26147.html +0 -283
  84. package/article/26291.html +0 -110
  85. package/article/26354.html +0 -71
  86. package/article/26624.html +0 -145
  87. package/article/26639.html +0 -298
  88. package/article/26850.html +0 -138
  89. package/article/26940.html +0 -258
  90. package/article/27796.html +0 -190
  91. package/article/27800.html +0 -161
  92. package/article/28963.html +0 -159
  93. package/article/28976.html +0 -247
  94. package/article/29042.html +0 -72
  95. package/article/29596.html +0 -81
  96. package/article/29619.html +0 -183
  97. package/article/29623.html +0 -329
  98. package/article/29829.html +0 -205
  99. package/article/29abbd1c.html +0 -112
  100. package/article/30215.html +0 -178
  101. package/article/30552.html +0 -78
  102. package/article/30818.html +0 -201
  103. package/article/31330.html +0 -364
  104. package/article/3154.html +0 -577
  105. package/article/31695.html +0 -348
  106. package/article/31826.html +0 -71
  107. package/article/31843.html +0 -132
  108. package/article/32280.html +0 -212
  109. package/article/32431.html +0 -74
  110. package/article/32443.html +0 -72
  111. package/article/32732.html +0 -122
  112. package/article/3286.html +0 -251
  113. package/article/32960.html +0 -198
  114. package/article/33713.html +0 -72
  115. package/article/33899.html +0 -615
  116. package/article/34351.html +0 -74
  117. package/article/34372.html +0 -89
  118. package/article/34410.html +0 -74
  119. package/article/34431.html +0 -118
  120. package/article/3447.html +0 -75
  121. package/article/34474.html +0 -142
  122. package/article/34871.html +0 -147
  123. package/article/35397.html +0 -175
  124. package/article/3544.html +0 -199
  125. package/article/35503.html +0 -115
  126. package/article/35624.html +0 -84
  127. package/article/35697.html +0 -384
  128. package/article/35863.html +0 -73
  129. package/article/36037.html +0 -253
  130. package/article/36118.html +0 -71
  131. package/article/3621.html +0 -119
  132. package/article/36251.html +0 -296
  133. package/article/36642.html +0 -352
  134. package/article/37102.html +0 -763
  135. package/article/37336.html +0 -351
  136. package/article/37351.html +0 -89
  137. package/article/3760.html +0 -294
  138. package/article/37749.html +0 -75
  139. package/article/37789.html +0 -83
  140. package/article/38005.html +0 -765
  141. package/article/38009.html +0 -284
  142. package/article/38269.html +0 -194
  143. package/article/38344.html +0 -88
  144. package/article/38359.html +0 -334
  145. package/article/38423.html +0 -379
  146. package/article/38530.html +0 -213
  147. package/article/38743.html +0 -268
  148. package/article/38753.html +0 -204
  149. package/article/38881.html +0 -71
  150. package/article/39087.html +0 -414
  151. package/article/39309.html +0 -84
  152. package/article/39486.html +0 -73
  153. package/article/39637.html +0 -306
  154. package/article/39839.html +0 -72
  155. package/article/39937.html +0 -152
  156. package/article/39970.html +0 -71
  157. package/article/402.html +0 -559
  158. package/article/40698.html +0 -71
  159. package/article/40811.html +0 -71
  160. package/article/40964.html +0 -462
  161. package/article/41011.html +0 -322
  162. package/article/41152.html +0 -78
  163. package/article/41696.html +0 -71
  164. package/article/41717.html +0 -281
  165. package/article/41777.html +0 -149
  166. package/article/419.html +0 -985
  167. package/article/4233.html +0 -136
  168. package/article/4292.html +0 -86
  169. package/article/43302.html +0 -96
  170. package/article/43397.html +0 -106
  171. package/article/43724.html +0 -281
  172. package/article/43999.html +0 -224
  173. package/article/44426.html +0 -77
  174. package/article/44964.html +0 -137
  175. package/article/45004.html +0 -123
  176. package/article/4510.html +0 -83
  177. package/article/45156.html +0 -320
  178. package/article/45157.html +0 -52
  179. package/article/45267.html +0 -87
  180. package/article/45641.html +0 -207
  181. package/article/45960.html +0 -75
  182. package/article/46100.html +0 -1262
  183. package/article/46366.html +0 -74
  184. package/article/46771.html +0 -96
  185. package/article/46911.html +0 -517
  186. package/article/46948.html +0 -137
  187. package/article/46ee4850.html +0 -349
  188. package/article/47019.html +0 -84
  189. package/article/47532.html +0 -94
  190. package/article/4783.html +0 -429
  191. package/article/47972.html +0 -72
  192. package/article/48216.html +0 -127
  193. package/article/48252.html +0 -185
  194. package/article/48520.html +0 -74
  195. package/article/48722.html +0 -75
  196. package/article/48807.html +0 -99
  197. package/article/49126.html +0 -323
  198. package/article/50001.html +0 -88
  199. package/article/50058.html +0 -151
  200. package/article/50343.html +0 -410
  201. package/article/50510.html +0 -82
  202. package/article/51082.html +0 -98
  203. package/article/51677.html +0 -111
  204. package/article/5204.html +0 -1085
  205. package/article/52500.html +0 -538
  206. package/article/52689.html +0 -259
  207. package/article/52877.html +0 -569
  208. package/article/53125.html +0 -191
  209. package/article/53428.html +0 -251
  210. package/article/53524.html +0 -74
  211. package/article/53698.html +0 -322
  212. package/article/53803e6.html +0 -93
  213. package/article/53924.html +0 -291
  214. package/article/53962.html +0 -253
  215. package/article/54006.html +0 -71
  216. package/article/54018.html +0 -88
  217. package/article/54161.html +0 -83
  218. package/article/54178.html +0 -69
  219. package/article/54258.html +0 -327
  220. package/article/54295.html +0 -214
  221. package/article/54313.html +0 -1976
  222. package/article/54351.html +0 -90
  223. package/article/54604.html +0 -80
  224. package/article/54632.html +0 -71
  225. package/article/54912.html +0 -756
  226. package/article/54918.html +0 -136
  227. package/article/55119.html +0 -136
  228. package/article/55756.html +0 -118
  229. package/article/55769.html +0 -136
  230. package/article/55870.html +0 -161
  231. package/article/56139.html +0 -92
  232. package/article/56557.html +0 -69
  233. package/article/56604.html +0 -69
  234. package/article/56816.html +0 -266
  235. package/article/56926.html +0 -153
  236. package/article/57747.html +0 -409
  237. package/article/57965.html +0 -475
  238. package/article/58816.html +0 -78
  239. package/article/59059.html +0 -435
  240. package/article/59095.html +0 -350
  241. package/article/59349.html +0 -244
  242. package/article/59402.html +0 -216
  243. package/article/59448.html +0 -55
  244. package/article/59870.html +0 -94
  245. package/article/59877.html +0 -208
  246. package/article/5dbb6f41.html +0 -86
  247. package/article/6008.html +0 -75
  248. package/article/60327.html +0 -126
  249. package/article/6035.html +0 -76
  250. package/article/60428.html +0 -71
  251. package/article/60544.html +0 -128
  252. package/article/61319.html +0 -95
  253. package/article/61367.html +0 -93
  254. package/article/624d1918.html +0 -292
  255. package/article/62543.html +0 -71
  256. package/article/62887.html +0 -169
  257. package/article/63074.html +0 -120
  258. package/article/63266.html +0 -311
  259. package/article/63351.html +0 -74
  260. package/article/63542.html +0 -104
  261. package/article/63824.html +0 -275
  262. package/article/64051.html +0 -653
  263. package/article/64189b69.html +0 -72
  264. package/article/64354.html +0 -75
  265. package/article/64869.html +0 -79
  266. package/article/64923.html +0 -596
  267. package/article/65128.html +0 -95
  268. package/article/65295.html +0 -79
  269. package/article/6888.html +0 -75
  270. package/article/7065.html +0 -84
  271. package/article/7455.html +0 -85
  272. package/article/7a3ef8f.html +0 -315
  273. package/article/8140.html +0 -188
  274. package/article/8190.html +0 -85
  275. package/article/8225.html +0 -78
  276. package/article/84c9ccd6.html +0 -159
  277. package/article/8f9a9ae3.html +0 -82
  278. package/article/9174.html +0 -73
  279. package/article/9738.html +0 -294
  280. package/article/9c3c56c.html +0 -682
  281. package/article/a4145266.html +0 -71
  282. package/article/bedea419.html +0 -72
  283. package/article/bf7e7421.html +0 -78
  284. package/article/c1867fbf.html +0 -103
  285. package/article/dcb0db28.html +0 -76
  286. package/article/fc3b727a.html +0 -79
  287. package/atom.xml +0 -441
  288. package/baidusitemap.xml +0 -1079
  289. package/blocks/dns.txt +0 -291
  290. package/blocks/filter.txt +0 -1068
  291. package/blocks/script.js +0 -42
  292. package/categories/CDN/index.html +0 -48
  293. package/categories/IDE/index.html +0 -48
  294. package/categories/git/index.html +0 -48
  295. package/categories/hexo/index.html +0 -48
  296. package/categories//345/205/254/345/205/261/350/212/202/346/227/245/index.html +0 -48
  297. package/categories//345/210/206/344/272/253/index.html +0 -48
  298. package/categories//345/211/215/347/253/257/index.html +0 -48
  299. package/categories//345/211/215/347/253/257/page/2/index.html +0 -48
  300. package/categories//345/211/215/347/253/257//346/265/217/350/247/210/345/231/250/index.html +0 -48
  301. 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
  302. package/categories//345/215/232/345/256/242/index.html +0 -48
  303. package/categories//345/267/245/345/205/267/index.html +0 -48
  304. package/categories//345/271/277/345/221/212/350/277/207/346/273/244/index.html +0 -48
  305. 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
  306. 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
  307. package/categories//346/255/243/345/210/231/index.html +0 -48
  308. package/categories//346/265/217/350/247/210/345/231/250/index.html +0 -48
  309. package/categories//347/256/227/346/263/225/index.html +0 -48
  310. package/categories//350/265/204/350/256/257/index.html +0 -48
  311. package/categories//350/275/273/346/235/276/344/270/200/345/210/273/index.html +0 -48
  312. package/cdn/css/font-awesome.min.css +0 -4
  313. package/cdn/css/grids-responsive-min.css +0 -7
  314. package/cdn/css/normalize.css +0 -349
  315. package/cdn/css/pure-min.css +0 -11
  316. package/cdn/fonts/fontawesome-webfont.eot +0 -0
  317. package/cdn/fonts/fontawesome-webfont.svg +0 -2671
  318. package/cdn/fonts/fontawesome-webfont.ttf +0 -0
  319. package/cdn/fonts/fontawesome-webfont.woff +0 -0
  320. package/cdn/fonts/fontawesome-webfont.woff2 +0 -0
  321. package/cdn/js/Valine.min.js +0 -17
  322. package/cdn/js/canvas-nest.js +0 -1
  323. package/cdn/js/clipboard.min.js +0 -7
  324. package/cdn/js/crypto-js.js +0 -25
  325. package/cdn/js/jquery.min.js +0 -2
  326. package/css/default.css +0 -1144
  327. package/css/donate.css +0 -338
  328. package/css/hbe.style.css +0 -749
  329. package/css/style.css +0 -2095
  330. package/donate/index.html +0 -40
  331. package/google917dcf72f6e5c7f5.html +0 -1
  332. package/guestbook/index.html +0 -68
  333. package/hosts/ads.txt +0 -149
  334. package/hosts/flash.txt +0 -9
  335. package/hosts/github.txt +0 -15
  336. package/hosts/google.txt +0 -16936
  337. package/hosts/winrar.txt +0 -2
  338. package/img/alipay.svg +0 -46
  339. package/img/bitcoin.svg +0 -135
  340. package/img/blog.ico +0 -0
  341. package/img/blog.png +0 -0
  342. package/img/gaba.png +0 -0
  343. package/img/github.svg +0 -1
  344. package/img/like.svg +0 -1
  345. package/img/mp-mini.jpg +0 -0
  346. package/img/mp.png +0 -0
  347. package/img/paypal.svg +0 -63
  348. package/img/upy_logo.svg +0 -59
  349. package/img/wechat.svg +0 -49
  350. package/index.html +0 -48
  351. package/jd_root.txt +0 -1
  352. package/js/codeblock-resizer.js +0 -51
  353. package/js/dark.js +0 -12
  354. package/js/donate.js +0 -87
  355. package/js/fixedPage.js +0 -110
  356. package/js/gitment.browser.js +0 -3751
  357. package/js/search.js +0 -86
  358. package/js/share.js +0 -60
  359. package/js/smartresize.js +0 -32
  360. package/js/totop.js +0 -12
  361. package/kankan/index.html +0 -1323
  362. package/lib/hbe.js +0 -297
  363. package/page/10/index.html +0 -49
  364. package/page/11/index.html +0 -59
  365. package/page/12/index.html +0 -67
  366. package/page/13/index.html +0 -63
  367. package/page/14/index.html +0 -66
  368. package/page/15/index.html +0 -60
  369. package/page/16/index.html +0 -60
  370. package/page/17/index.html +0 -62
  371. package/page/18/index.html +0 -61
  372. package/page/19/index.html +0 -58
  373. package/page/2/index.html +0 -48
  374. package/page/20/index.html +0 -57
  375. package/page/21/index.html +0 -61
  376. package/page/22/index.html +0 -55
  377. package/page/23/index.html +0 -64
  378. package/page/24/index.html +0 -60
  379. package/page/25/index.html +0 -58
  380. package/page/26/index.html +0 -48
  381. package/page/27/index.html +0 -58
  382. package/page/3/index.html +0 -48
  383. package/page/4/index.html +0 -48
  384. package/page/5/index.html +0 -51
  385. package/page/6/index.html +0 -51
  386. package/page/7/index.html +0 -51
  387. package/page/8/index.html +0 -53
  388. package/page/9/index.html +0 -48
  389. package/randomcall/README.html +0 -1
  390. package/randomcall/lucker.html +0 -290
  391. package/randomcall/lucky.png +0 -0
  392. package/robots.txt +0 -22
  393. package/search.xml +0 -6728
  394. package/sitemap.xml +0 -2694
  395. package/tags//345/216/237/345/210/233/index.html +0 -48
  396. package/tags//345/250/261/344/271/220/index.html +0 -48
  397. package/tags//346/211/213/345/206/231/index.html +0 -48
  398. package/tags//347/226/253/346/203/205/index.html +0 -48
  399. package/tags//350/275/254/350/275/275/index.html +0 -48
  400. package/tags//350/275/254/350/275/275/page/2/index.html +0 -48
  401. package/v.html +0 -22
  402. /package/{appConfigs/config → config} +0 -0
  403. /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 &#123; [key: string]: number; x: number; y: number;&#125;
27
- // Errorinterface Bar &#123; [key: string]: number; x: number; y: string; // Error: y 属性必须为 number 类型&#125;
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>&#123; &quot;compilerOptions&quot;: &#123; &quot;jsx&quot;: &quot;react&quot;, &quot;target&quot;: &quot;es5&quot; /* Specify ECMAScript target version: &#39;ES3&#39; (default), &#39;ES5&#39;, &#39;ES2015&#39;, &#39;ES2016&#39;, &#39;ES2017&#39;, &#39;ES2018&#39;, &#39;ES2019&#39; or &#39;ESNEXT&#39;. */, &quot;module&quot;: &quot;commonjs&quot; /* Specify module code generation: &#39;none&#39;, &#39;commonjs&#39;, &#39;amd&#39;, &#39;system&#39;, &#39;umd&#39;, &#39;es2015&#39;, or &#39;ESNext&#39;. */, &quot;allowJs&quot;: true, /* Allow javascript files to be compiled. */ &quot;strict&quot;: true /* Enable all strict type-checking options. */, &quot;forceConsistentCasingInFileNames&quot;: true /* Disallow inconsistently-cased references to the same file. */ &#125; &#125;
37
- </code></pre>
38
- <hr>
39
- <p>然后在webpack.base.config.js文件中配置loader处理.ts .tsx代码文件</p>
40
- <pre><code> extensions: [&#39;.ts&#39;, &#39;.tsx&#39;, &#39;.js&#39;, &#39;.jsx&#39;],
41
- &#123;
42
- test: /\.ts(x?)$/,
43
- use: [
44
- &#123;
45
- loader: &#39;babel-loader&#39;,
46
- options: &#123; //jsx语法 presets:
47
- [
48
- [&#39;@babel/preset-env&#39;, &#123; modules: false &#125;]
49
- ],
50
- cacheDirectory: true,
51
-
52
- &#125;,
53
- &#125;,
54
- &#123;
55
- loader: &#39;awesome-typescript-loader&#39;,
56
- &#125;,
57
- ],
58
- &#125;,
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 &#39;enzyme&#39;;
65
- import Adapter from &#39;enzyme-adapter-react-16&#39;;
66
- Enzyme.configure(&#123; adapter: new Adapter(),&#125;);
67
- </code></pre>
68
- <p>_test__文件夹下面的文件,也要改成.tsx .ts为后缀结尾</p>
69
- <p>jest.config.js文件也要修改</p>
70
- <pre><code>const path = require(&#39;path&#39;);
71
- module.exports = &#123;
72
- roots: [&#39;&lt;rootDir&gt;/test&#39;],
73
- testRegex: &#39;test/(.+)\\.test\\.(jsx?|tsx?)$&#39;,
74
- transform: &#123;
75
- &#39;^.+\\.tsx?$&#39;: &#39;ts-jest&#39;,
76
- &#125;,
77
- moduleFileExtensions: [&#39;ts&#39;, &#39;tsx&#39;, &#39;js&#39;, &#39;jsx&#39;, &#39;json&#39;, &#39;node&#39;],
78
- moduleNameMapper: &#123;
79
- &#39;\\.(css|less)$&#39;: &#39;identity-obj-proxy&#39;,
80
- &#125;,
81
- setupFilesAfterEnv: [path.resolve(__dirname, &#39;./setupEnzyme.ts&#39;)],
82
- testEnvironment: &#39;enzyme&#39;,
83
- &#125;;
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&amp;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&amp;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>
@@ -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> &#123; <span class="title class_">Document</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;react-pdf/dist/entry.noworker&#x27;</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, &#123;Component&#125; from &#x27;react&#x27;</span><br><span class="line">import &#123; Page &#125; from &#x27;react-pdf&#x27;</span><br><span class="line">import &#123; Document &#125; from &#x27;react-pdf/dist/entry.noworker&#x27;</span><br><span class="line"></span><br><span class="line">class FilePreview extends Component &#123;</span><br><span class="line"></span><br><span class="line"> constructor (props) &#123;</span><br><span class="line"> super(props)</span><br><span class="line"> this.state = &#123;</span><br><span class="line"> numPages: null, //pdf总页数</span><br><span class="line"> pageNumber: 1 // pdf当前页</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> onDocumentLoadSuccess = (&#123; numPages &#125;) =&gt; &#123;</span><br><span class="line"> this.setState(&#123; numPages &#125;)</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> render () &#123;</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 === &#x27;images&#x27;) &#123;</span><br><span class="line"> return (</span><br><span class="line"> &lt;div style=&#123; &#123;width: &#x27;100%&#x27;, height: &#x27;100%&#x27;, padding: &#x27;0 5rem 1rem&#x27;&#125; &#125;&gt;</span><br><span class="line"> &lt;img src=&#123;imageUrl&#125; /&gt; // 图片的url,可以是文件链接,也可以是文件流</span><br><span class="line"> &lt;/div&gt;</span><br><span class="line"> )</span><br><span class="line"> &#125; else if (fileType === &#x27;pdf&#x27;) &#123;</span><br><span class="line"></span><br><span class="line"> return (</span><br><span class="line"> &lt;div className=&#x27;pdf-preview&#x27; style=&#123; &#123; textAlign: &#x27;center&#x27; &#125; &#125;&gt;</span><br><span class="line"> &lt;Document</span><br><span class="line"> className=&#x27;pdf&#x27;</span><br><span class="line"> file=&#123; &#123;url: pdf, httpHeaders: &#123; &#x27;Authorization&#x27;: `Bearer $&#123;token&#125;` &#125;, withCredentials: true&#125; &#125;</span><br><span class="line"> loading=&quot;&quot;</span><br><span class="line"> onLoadSuccess=&#123;this.onDocumentLoadSuccess&#125;</span><br><span class="line"> &gt;</span><br><span class="line"> &#123; new Array(numPages).fill(&#x27; &#x27;).map((e, i) =&gt; &#123;</span><br><span class="line"> return (</span><br><span class="line"> &lt;Page</span><br><span class="line"> className=&#x27;page&#x27;</span><br><span class="line"> key=&#123;i&#125;</span><br><span class="line"> pageNumber=&#123;i + 1&#125; //当前页页码</span><br><span class="line"> width=&#123;1000&#125;</span><br><span class="line"> /&gt;</span><br><span class="line"> )</span><br><span class="line"> &#125;)&#125;</span><br><span class="line"> &lt;/Document&gt;</span><br><span class="line"> &lt;/div&gt;</span><br><span class="line"> )</span><br><span class="line"> &#125; else &#123;</span><br><span class="line"> return &lt;div&gt;附件不可预览&lt;/div&gt;</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</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&amp;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>