-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
403 lines (229 loc) · 200 KB
/
atom.xml
File metadata and controls
403 lines (229 loc) · 200 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>挨踢极客</title>
<subtitle>show me the code</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="https://blog.itjk.me/"/>
<updated>2020-06-12T06:51:01.729Z</updated>
<id>https://blog.itjk.me/</id>
<author>
<name>挨踢极客</name>
</author>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>Thymeleaf系列(1)Thymeleaf模板表达式</title>
<link href="https://blog.itjk.me/2020/06/04/Thymeleaf%E7%B3%BB%E5%88%97(1)Thymeleaf%E6%A8%A1%E6%9D%BF%E8%A1%A8%E8%BE%BE%E5%BC%8F.html"/>
<id>https://blog.itjk.me/2020/06/04/Thymeleaf%E7%B3%BB%E5%88%97(1)Thymeleaf%E6%A8%A1%E6%9D%BF%E8%A1%A8%E8%BE%BE%E5%BC%8F.html</id>
<published>2020-06-04T09:17:45.000Z</published>
<updated>2020-06-12T06:51:01.729Z</updated>
<content type="html"><![CDATA[<p><img src="https://i.loli.net/2020/06/04/1SFGgUyKTDdHXMN.jpg" alt=""></p><a id="more"></a><blockquote><p>Thymeleaf 常用模板表达式汇总</p></blockquote><h2 id="日期格式、组件提取等"><a href="#日期格式、组件提取等" class="headerlink" title="日期格式、组件提取等"></a>日期格式、组件提取等</h2><figure class="highlight"><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></pre></td><td class="code"><pre><span class="line">${#dates.format(date)}</span><br><span class="line">${#dates.arrayFormat(datesArray)}</span><br><span class="line">${#dates.listFormat(datesList)}</span><br><span class="line">${#dates.setFormat(datesSet)}</span><br><span class="line">${#dates.format(date, 'dd/MMM/yyyy HH:mm')}</span><br><span class="line">${#dates.arrayFormat(datesArray, 'dd/MMM/yyyy HH:mm')}</span><br><span class="line">${#dates.listFormat(datesList, 'dd/MMM/yyyy HH:mm')}</span><br><span class="line">${#dates.setFormat(datesSet, 'dd/MMM/yyyy HH:mm')}</span><br><span class="line">${#dates.day(date)}</span><br><span class="line">${#dates.month(date)}</span><br><span class="line">${#dates.monthName(date)}</span><br><span class="line">${#dates.monthNameShort(date)}</span><br><span class="line">${#dates.year(date)}</span><br><span class="line">${#dates.dayOfWeek(date)}</span><br><span class="line">${#dates.dayOfWeekName(date)}</span><br><span class="line">${#dates.dayOfWeekNameShort(date)}</span><br><span class="line">${#dates.hour(date)}</span><br><span class="line">${#dates.minute(date)}</span><br><span class="line">${#dates.second(date)}</span><br><span class="line">${#dates.millisecond(date)}</span><br><span class="line">${#dates.create(year,month,day)}</span><br><span class="line">${#dates.create(year,month,day,hour,minute)}</span><br><span class="line">${#dates.create(year,month,day,hour,minute,second)}</span><br><span class="line">${#dates.create(year,month,day,hour,minute,second,millisecond)}</span><br><span class="line">${#dates.createNow()}</span><br><span class="line">${#dates.createToday()}</span><br></pre></td></tr></table></figure><h2 id="日历"><a href="#日历" class="headerlink" title="日历"></a>日历</h2><figure class="highlight"><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></pre></td><td class="code"><pre><span class="line">${#calendars.format(cal)}</span><br><span class="line">${#calendars.arrayFormat(calArray)}</span><br><span class="line">${#calendars.listFormat(calList)}</span><br><span class="line">${#calendars.setFormat(calSet)}</span><br><span class="line">${#calendars.format(cal, 'dd/MMM/yyyy HH:mm')}</span><br><span class="line">${#calendars.arrayFormat(calArray, 'dd/MMM/yyyy HH:mm')}</span><br><span class="line">${#calendars.listFormat(calList, 'dd/MMM/yyyy HH:mm')}</span><br><span class="line">${#calendars.setFormat(calSet, 'dd/MMM/yyyy HH:mm')}</span><br><span class="line">${#calendars.day(date)}</span><br><span class="line">${#calendars.month(date)}</span><br><span class="line">${#calendars.monthName(date)}</span><br><span class="line">${#calendars.monthNameShort(date)}</span><br><span class="line">${#calendars.year(date)}</span><br><span class="line">${#calendars.dayOfWeek(date)}</span><br><span class="line">${#calendars.dayOfWeekName(date)}</span><br><span class="line">${#calendars.dayOfWeekNameShort(date)}</span><br><span class="line">${#calendars.hour(date)}</span><br><span class="line">${#calendars.minute(date)}</span><br><span class="line">${#calendars.second(date)}</span><br><span class="line">${#calendars.millisecond(date)}</span><br><span class="line">${#calendars.create(year,month,day)}</span><br><span class="line">${#calendars.create(year,month,day,hour,minute)}</span><br><span class="line">${#calendars.create(year,month,day,hour,minute,second)}</span><br><span class="line">${#calendars.create(year,month,day,hour,minute,second,millisecond)}</span><br><span class="line">${#calendars.createNow()}</span><br><span class="line">${#calendars.createToday()}</span><br></pre></td></tr></table></figure><h2 id="格式化数字对象"><a href="#格式化数字对象" class="headerlink" title="格式化数字对象"></a>格式化数字对象</h2><figure class="highlight"><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></pre></td><td class="code"><pre><span class="line">${#numbers.formatInteger(num,3)}</span><br><span class="line">${#numbers.arrayFormatInteger(numArray,3)}</span><br><span class="line">${#numbers.listFormatInteger(numList,3)}</span><br><span class="line">${#numbers.setFormatInteger(numSet,3)}</span><br><span class="line">${#numbers.formatInteger(num,3,'POINT')}</span><br><span class="line">${#numbers.arrayFormatInteger(numArray,3,'POINT')}</span><br><span class="line">${#numbers.listFormatInteger(numList,3,'POINT')}</span><br><span class="line">${#numbers.setFormatInteger(numSet,3,'POINT')}</span><br><span class="line">${#numbers.formatDecimal(num,3,2)}</span><br><span class="line">${#numbers.arrayFormatDecimal(numArray,3,2)}</span><br><span class="line">${#numbers.listFormatDecimal(numList,3,2)}</span><br><span class="line">${#numbers.setFormatDecimal(numSet,3,2)}</span><br><span class="line">${#numbers.formatDecimal(num,3,2,'COMMA')}</span><br><span class="line">${#numbers.arrayFormatDecimal(numArray,3,2,'COMMA')}</span><br><span class="line">${#numbers.listFormatDecimal(numList,3,2,'COMMA')}</span><br><span class="line">${#numbers.setFormatDecimal(numSet,3,2,'COMMA')}</span><br><span class="line">${#numbers.formatDecimal(num,3,'POINT',2,'COMMA')}</span><br><span class="line">${#numbers.arrayFormatDecimal(numArray,3,'POINT',2,'COMMA')}</span><br><span class="line">${#numbers.listFormatDecimal(numList,3,'POINT',2,'COMMA')}</span><br><span class="line">${#numbers.setFormatDecimal(numSet,3,'POINT',2,'COMMA')}</span><br><span class="line">${#numbers.sequence(from,to)}</span><br><span class="line">${#numbers.sequence(from,to,step)}</span><br></pre></td></tr></table></figure><h2 id="字符串处理"><a href="#字符串处理" class="headerlink" title="字符串处理"></a>字符串处理</h2><figure class="highlight"><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></pre></td><td class="code"><pre><span class="line">${#strings.isEmpty(name)}</span><br><span class="line">${#strings.arrayIsEmpty(nameArr)}</span><br><span class="line">${#strings.listIsEmpty(nameList)}</span><br><span class="line">${#strings.setIsEmpty(nameSet)}</span><br><span class="line">${#strings.defaultString(text,default)}</span><br><span class="line">${#strings.arrayDefaultString(textArr,default)}</span><br><span class="line">${#strings.listDefaultString(textList,default)}</span><br><span class="line">${#strings.setDefaultString(textSet,default)}</span><br><span class="line">${#strings.contains(name,'ez')}</span><br><span class="line">${#strings.containsIgnoreCase(name,'ez')}</span><br><span class="line">${#strings.startsWith(name,'Don')}</span><br><span class="line">${#strings.endsWith(name,endingFragment)}</span><br><span class="line">${#strings.indexOf(name,frag)}</span><br><span class="line">${#strings.substring(name,3,5)}</span><br><span class="line">${#strings.substringAfter(name,prefix)}</span><br><span class="line">${#strings.substringBefore(name,suffix)}</span><br><span class="line">${#strings.replace(name,'las','ler')}</span><br><span class="line">${#strings.prepend(str,prefix)}</span><br><span class="line">${#strings.append(str,suffix)}</span><br><span class="line">${#strings.toUpperCase(name)}</span><br><span class="line">${#strings.toLowerCase(name)}</span><br><span class="line">${#strings.arrayJoin(namesArray,',')}</span><br><span class="line">${#strings.listJoin(namesList,',')}</span><br><span class="line">${#strings.setJoin(namesSet,',')}</span><br><span class="line">${#strings.arraySplit(namesStr,',')}</span><br><span class="line">${#strings.listSplit(namesStr,',')}</span><br><span class="line">${#strings.setSplit(namesStr,',')}</span><br><span class="line">${#strings.trim(str)}</span><br><span class="line">${#strings.length(str)}</span><br><span class="line">${#strings.abbreviate(str,10)}</span><br><span class="line">${#strings.capitalize(str)}</span><br><span class="line">${#strings.unCapitalize(str)} </span><br><span class="line">${#strings.capitalizeWords(str)} </span><br><span class="line">${#strings.capitalizeWords(str,delimiters)}</span><br><span class="line">${#strings.escapeXml(str)} </span><br><span class="line">${#strings.escapeJava(str)}</span><br><span class="line">${#strings.escapeJavaScript(str)} </span><br><span class="line">${#strings.unescapeJava(str)} </span><br><span class="line">${#strings.unescapeJavaScript(str)}</span><br><span class="line">${#strings.equals(str)}</span><br><span class="line">${#strings.equalsIgnoreCase(str)}</span><br><span class="line">${#strings.concat(str)}</span><br><span class="line">${#strings.concatReplaceNulls(str)}</span><br></pre></td></tr></table></figure><h2 id="对象处理"><a href="#对象处理" class="headerlink" title="对象处理"></a>对象处理</h2><figure class="highlight"><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></pre></td><td class="code"><pre><span class="line">${#objects.nullSafe(obj,default)}</span><br><span class="line">${#objects.arrayNullSafe(objArray,default)}</span><br><span class="line">${#objects.listNullSafe(objList,default)}</span><br><span class="line">${#objects.setNullSafe(objSet,default)}</span><br></pre></td></tr></table></figure><h2 id="布尔值相关"><a href="#布尔值相关" class="headerlink" title="布尔值相关"></a>布尔值相关</h2><figure class="highlight"><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></pre></td><td class="code"><pre><span class="line">${#bools.isTrue(obj)}</span><br><span class="line">${#bools.arrayIsTrue(objArray)}</span><br><span class="line">${#bools.listIsTrue(objList)}</span><br><span class="line">${#bools.setIsTrue(objSet)}</span><br><span class="line">${#bools.isFalse(cond)}</span><br><span class="line">${#bools.arrayIsFalse(condArray)}</span><br><span class="line">${#bools.listIsFalse(condList)}</span><br><span class="line">${#bools.setIsFalse(condSet)}</span><br><span class="line">${#bools.arrayAnd(condArray)}</span><br><span class="line">${#bools.listAnd(condList)}</span><br><span class="line">${#bools.setAnd(condSet)}</span><br><span class="line">${#bools.arrayOr(condArray)}</span><br><span class="line">${#bools.listOr(condList)}</span><br><span class="line">${#bools.setOr(condSet)}</span><br></pre></td></tr></table></figure><h2 id="数组相关"><a href="#数组相关" class="headerlink" title="数组相关"></a>数组相关</h2><figure class="highlight"><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></pre></td><td class="code"><pre><span class="line">${#arrays.toArray(object)}</span><br><span class="line">${#arrays.toStringArray(object)}</span><br><span class="line">${#arrays.toIntegerArray(object)}</span><br><span class="line">${#arrays.toLongArray(object)}</span><br><span class="line">${#arrays.toDoubleArray(object)}</span><br><span class="line">${#arrays.toFloatArray(object)}</span><br><span class="line">${#arrays.toBooleanArray(object)}</span><br><span class="line">${#arrays.length(array)}</span><br><span class="line">${#arrays.isEmpty(array)}</span><br><span class="line">${#arrays.contains(array, element)}</span><br><span class="line">${#arrays.containsAll(array, elements)}</span><br></pre></td></tr></table></figure><h2 id="list集合相关"><a href="#list集合相关" class="headerlink" title="list集合相关"></a>list集合相关</h2><figure class="highlight"><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></pre></td><td class="code"><pre><span class="line">${#lists.toList(object)}</span><br><span class="line">${#lists.size(list)}</span><br><span class="line">${#lists.isEmpty(list)}</span><br><span class="line">${#lists.contains(list, element)}</span><br><span class="line">${#lists.containsAll(list, elements)}</span><br><span class="line">${#lists.sort(list)}</span><br><span class="line">${#lists.sort(list, comparator)}</span><br></pre></td></tr></table></figure><h2 id="set集合相关"><a href="#set集合相关" class="headerlink" title="set集合相关"></a>set集合相关</h2><figure class="highlight"><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></pre></td><td class="code"><pre><span class="line">${#sets.toSet(object)}</span><br><span class="line">${#sets.size(set)}</span><br><span class="line">${#sets.isEmpty(set)}</span><br><span class="line">${#sets.contains(set, element)}</span><br><span class="line">${#sets.containsAll(set, elements)}</span><br></pre></td></tr></table></figure><h2 id="map集合相关"><a href="#map集合相关" class="headerlink" title="map集合相关"></a>map集合相关</h2><figure class="highlight"><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></pre></td><td class="code"><pre><span class="line">${#maps.size(map)}</span><br><span class="line">${#maps.isEmpty(map)}</span><br><span class="line">${#maps.containsKey(map, key)}</span><br><span class="line">${#maps.containsAllKeys(map, keys)}</span><br><span class="line">${#maps.containsValue(map, value)}</span><br><span class="line">${#maps.containsAllValues(map, value)}</span><br></pre></td></tr></table></figure><h2 id="聚集,聚合"><a href="#聚集,聚合" class="headerlink" title="聚集,聚合"></a>聚集,聚合</h2><figure class="highlight"><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></pre></td><td class="code"><pre><span class="line">${#aggregates.sum(array)}</span><br><span class="line">${#aggregates.sum(collection)}</span><br><span class="line">${#aggregates.avg(array)}</span><br><span class="line">${#aggregates.avg(collection)}</span><br></pre></td></tr></table></figure><h2 id="获取外部信息内部变量"><a href="#获取外部信息内部变量" class="headerlink" title="获取外部信息内部变量"></a>获取外部信息内部变量</h2><figure class="highlight"><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></pre></td><td class="code"><pre><span class="line">${#messages.msg('msgKey')}</span><br><span class="line">${#messages.msg('msgKey', param1)}</span><br><span class="line">${#messages.msg('msgKey', param1, param2)}</span><br><span class="line">${#messages.msg('msgKey', param1, param2, param3)}</span><br><span class="line">${#messages.msgWithParams('msgKey', new Object[] {param1, param2, param3, param4})}</span><br><span class="line">${#messages.arrayMsg(messageKeyArray)}</span><br><span class="line">${#messages.listMsg(messageKeyList)}</span><br><span class="line">${#messages.setMsg(messageKeySet)}</span><br><span class="line">${#messages.msgOrNull('msgKey')}</span><br><span class="line">${#messages.msgOrNull('msgKey', param1)}</span><br><span class="line">${#messages.msgOrNull('msgKey', param1, param2)}</span><br><span class="line">${#messages.msgOrNull('msgKey', param1, param2, param3)}</span><br><span class="line">${#messages.msgOrNullWithParams('msgKey', new Object[] {param1, param2, param3, param4})}</span><br><span class="line">${#messages.arrayMsgOrNull(messageKeyArray)}</span><br><span class="line">${#messages.listMsgOrNull(messageKeyList)}</span><br><span class="line">${#messages.setMsgOrNull(messageKeySet)}</span><br></pre></td></tr></table></figure><h2 id="处理可能重复的id属性"><a href="#处理可能重复的id属性" class="headerlink" title="处理可能重复的id属性"></a>处理可能重复的id属性</h2><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">${#ids.seq('someId')}</span><br><span class="line">${#ids.next('someId')}</span><br><span class="line">${#ids.prev('someId')}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><img src="https://i.loli.net/2020/06/04/1SFGgUyKTDdHXMN.jpg" alt=""></p>
</summary>
<category term="Java" scheme="https://blog.itjk.me/categories/Java/"/>
<category term="Thymeleaf" scheme="https://blog.itjk.me/categories/Java/Thymeleaf/"/>
<category term="Java" scheme="https://blog.itjk.me/tags/Java/"/>
<category term="Thymeleaf" scheme="https://blog.itjk.me/tags/Thymeleaf/"/>
</entry>
<entry>
<title>知错能改系列(1)Tomcat临时目录不存在</title>
<link href="https://blog.itjk.me/2020/05/25/%E7%9F%A5%E9%94%99%E8%83%BD%E6%94%B9%E7%B3%BB%E5%88%97(1)Tomcat%E4%B8%B4%E6%97%B6%E7%9B%AE%E5%BD%95%E4%B8%8D%E5%AD%98%E5%9C%A8.html"/>
<id>https://blog.itjk.me/2020/05/25/%E7%9F%A5%E9%94%99%E8%83%BD%E6%94%B9%E7%B3%BB%E5%88%97(1)Tomcat%E4%B8%B4%E6%97%B6%E7%9B%AE%E5%BD%95%E4%B8%8D%E5%AD%98%E5%9C%A8.html</id>
<published>2020-05-25T06:52:45.000Z</published>
<updated>2020-06-12T06:51:01.729Z</updated>
<content type="html"><![CDATA[<p><img src="https://i.loli.net/2020/05/25/qDh6WGEaL2v3Mkz.jpg" alt=""></p><a id="more"></a><h2 id="问题场景"><a href="#问题场景" class="headerlink" title="问题场景"></a>问题场景</h2><p>最近项目中的上传文件功能报错,以前使用正常,也没有修改代码</p><h2 id="报错日志"><a href="#报错日志" class="headerlink" title="报错日志"></a>报错日志</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.492329695199971531.8088/work/Tomcat/localhost/ROOT] is not valid</span><br></pre></td></tr></table></figure><h2 id="产生原因"><a href="#产生原因" class="headerlink" title="产生原因"></a>产生原因</h2><p>在linux系统中,springboot应用服务再启动(java -jar 命令启动服务)的时候,会在操作系统的/tmp目录下生成一个tomcat*的文件目录,上传的文件先要转换成临时文件保存在这个文件夹下面。</p><p>由于临时/tmp目录下的文件,在长时间(10天)没有使用的情况下,就会被系统机制自动删除掉。所以如果系统长时间没有使用到临时文件夹,就可能导致上面这个问题。</p><h2 id="解决办法"><a href="#解决办法" class="headerlink" title="解决办法"></a>解决办法</h2><h3 id="临时解决办法-可临时避免出现该问题,一段时间后该问题还会暴露"><a href="#临时解决办法-可临时避免出现该问题,一段时间后该问题还会暴露" class="headerlink" title="临时解决办法(可临时避免出现该问题,一段时间后该问题还会暴露)"></a>临时解决办法(可临时避免出现该问题,一段时间后该问题还会暴露)</h3><ol><li><p>重启项目,就会重新生成一个临时目录</p></li><li><p>新建一个同名文件夹</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mkdir -p /tmp/tomcat.492329695199971531.8088/work/Tomcat/localhost/ROOT</span><br></pre></td></tr></table></figure></li></ol><h3 id="永久解决办法"><a href="#永久解决办法" class="headerlink" title="永久解决办法"></a>永久解决办法</h3><ol><li><p>application.yml 重新配置一个文件目录,然后重启项目</p> <figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 存放Tomcat的日志、Dump等文件的临时文件夹,默认为系统的tmp文件夹</span></span><br><span class="line">server:</span><br><span class="line"> tomcat:</span><br><span class="line"> basedir: /data/apps/temp</span><br></pre></td></tr></table></figure></li><li><p>在application.yml文件中设置multipart location ,并重启项目</p> <figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line">spring:</span><br><span class="line"> servlet:</span><br><span class="line"> multipart:</span><br><span class="line"> location: /data/apps/temp</span><br></pre></td></tr></table></figure></li><li><p>添加启动参数,并重启</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">-java.tmp.dir=/data/apps/temp/</span><br></pre></td></tr></table></figure></li><li><p>配置类配置临时文件存储目录</p> <figure class="highlight java"><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></pre></td><td class="code"><pre><span class="line"><span class="meta">@Bean</span></span><br><span class="line"><span class="function">MultipartConfigElement <span class="title">multipartConfigElement</span><span class="params">()</span> </span>{</span><br><span class="line"> MultipartConfigFactory factory = <span class="keyword">new</span> MultipartConfigFactory();</span><br><span class="line"> factory.setLocation(tmepPath);</span><br><span class="line"> <span class="keyword">return</span> factory.createMultipartConfig();</span><br><span class="line">}</span><br></pre></td></tr></table></figure></li></ol>]]></content>
<summary type="html">
<p><img src="https://i.loli.net/2020/05/25/qDh6WGEaL2v3Mkz.jpg" alt=""></p>
</summary>
<category term="Java" scheme="https://blog.itjk.me/categories/Java/"/>
<category term="Bug" scheme="https://blog.itjk.me/categories/Java/Bug/"/>
<category term="Java" scheme="https://blog.itjk.me/tags/Java/"/>
<category term="Bug" scheme="https://blog.itjk.me/tags/Bug/"/>
</entry>
<entry>
<title>Scrum系列(1)浅谈敏捷开发及Scrum</title>
<link href="https://blog.itjk.me/2020/05/21/Scrum%E7%B3%BB%E5%88%97(1)%E6%B5%85%E8%B0%88%E6%95%8F%E6%8D%B7%E5%BC%80%E5%8F%91%E5%8F%8AScrum.html"/>
<id>https://blog.itjk.me/2020/05/21/Scrum%E7%B3%BB%E5%88%97(1)%E6%B5%85%E8%B0%88%E6%95%8F%E6%8D%B7%E5%BC%80%E5%8F%91%E5%8F%8AScrum.html</id>
<published>2020-05-21T06:52:45.000Z</published>
<updated>2020-06-12T06:51:01.729Z</updated>
<content type="html"><![CDATA[<p><img src="https://i.loli.net/2020/05/25/AE5zxSGUhLgs3Ie.jpg" alt=""></p><a id="more"></a><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>一直在进行传统的项目开发,对当前流行的敏捷开发知之甚少,抱着学习的态度,查阅了大量文章后对敏捷开发有了一定概念,记录下来,当做学习的一个见证。</p>]]></content>
<summary type="html">
<p><img src="https://i.loli.net/2020/05/25/AE5zxSGUhLgs3Ie.jpg" alt=""></p>
</summary>
<category term="敏捷开发" scheme="https://blog.itjk.me/categories/%E6%95%8F%E6%8D%B7%E5%BC%80%E5%8F%91/"/>
<category term="敏捷开发" scheme="https://blog.itjk.me/tags/%E6%95%8F%E6%8D%B7%E5%BC%80%E5%8F%91/"/>
</entry>
<entry>
<title>ES系列(1)基于Docker的ES集群搭建</title>
<link href="https://blog.itjk.me/2019/10/22/ES%E7%B3%BB%E5%88%97(1)%E5%9F%BA%E4%BA%8EDocker%E7%9A%84ES%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA.html"/>
<id>https://blog.itjk.me/2019/10/22/ES%E7%B3%BB%E5%88%97(1)%E5%9F%BA%E4%BA%8EDocker%E7%9A%84ES%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA.html</id>
<published>2019-10-22T09:01:45.000Z</published>
<updated>2020-06-12T06:51:01.729Z</updated>
<content type="html"><![CDATA[<p><img src="https://i.loli.net/2020/05/25/E1Lgx4XMIQHGser.jpg" alt=""></p><a id="more"></a><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>最近项目需要用到ES,以前没搞过,就自己研究折腾了下。经过一段时间的摸索,有了些许心得,写个博客记录下,以备查询。</p><h3 id="版本说明"><a href="#版本说明" class="headerlink" title="版本说明"></a>版本说明</h3><p>此处以 docker 安装 ES 双节点集群为例。<br>elatsicsearch:6.8.3 与springboot-2.1.7版本下的spring-data-elatsicsearch-3.1.10匹配。</p><h2 id="安装准备"><a href="#安装准备" class="headerlink" title="安装准备"></a>安装准备</h2><h3 id="环境要求"><a href="#环境要求" class="headerlink" title="环境要求"></a>环境要求</h3><ol><li>centos7</li><li>docker</li><li>jdk8</li><li>ES6.8.3</li><li>IK中文分词插件</li></ol><h3 id="JVM设置"><a href="#JVM设置" class="headerlink" title="JVM设置"></a>JVM设置</h3><p>调高JVM线程数限制数量,防止因线程数不够而报错</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 使用vim编辑系统配置文件</span></span><br><span class="line">vim /etc/sysctl.conf</span><br><span class="line"><span class="comment"># 在最后添加以下内容并保存退出</span></span><br><span class="line">vm.max_map_count=262144</span><br><span class="line"><span class="comment"># 启用配置</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h3 id="端口设置"><a href="#端口设置" class="headerlink" title="端口设置"></a>端口设置</h3><ul><li>9200: master节点http访问端口</li><li>9300: master节点jar包访问端口</li><li>9201: slave节点http访问端口</li><li>9301: slave节点jar包访问端口</li></ul><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 开放端口</span></span><br><span class="line">firewall-cmd --zone=public --add-port=9200/tcp -permanent</span><br><span class="line">firewall-cmd --zone=public --add-port=9300/tcp -permanent</span><br><span class="line">firewall-cmd --zone=public --add-port=9201/tcp -permanent</span><br><span class="line">firewall-cmd --zone=public --add-port=9301/tcp -permanent</span><br><span class="line"><span class="comment"># 重启防火墙</span></span><br><span class="line">firewall-cmd --reload</span><br></pre></td></tr></table></figure><h3 id="外部挂载-数据及配置-文件创建"><a href="#外部挂载-数据及配置-文件创建" class="headerlink" title="外部挂载 数据及配置 文件创建"></a>外部挂载 数据及配置 文件创建</h3><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line">mkdir -p /home/docker/es</span><br><span class="line"><span class="built_in">cd</span> /home/docker/es</span><br><span class="line">mkdir master-config</span><br><span class="line">mkdir master-data</span><br><span class="line">mkdir master-log</span><br><span class="line">mkdir slave-config</span><br><span class="line">mkdir slave-data</span><br><span class="line">mkdir slave-log</span><br></pre></td></tr></table></figure><h3 id="赋予权限"><a href="#赋予权限" class="headerlink" title="赋予权限"></a>赋予权限</h3><p>6.x版本需要开启777权限,为文件夹下的所有子文件&子文件夹赋予权限</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chmod -R 777 /home/docker/es</span><br></pre></td></tr></table></figure><h2 id="ES-配置文件编写"><a href="#ES-配置文件编写" class="headerlink" title="ES 配置文件编写"></a>ES 配置文件编写</h2><h3 id="master节点配置文件"><a href="#master节点配置文件" class="headerlink" title="master节点配置文件"></a>master节点配置文件</h3><p>位于 <strong>/home/docker/es/master-config/es.yml</strong>,将以下内容写入配置文件:</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># master-config</span></span><br><span class="line">cluster.name: ydool</span><br><span class="line">node.name: master</span><br><span class="line">network.bind_host: 0.0.0.0</span><br><span class="line">network.publish_host: 192.168.1.56</span><br><span class="line">http.port: 9200</span><br><span class="line">transport.tcp.port: 9300</span><br><span class="line">http.cors.enabled: <span class="literal">true</span></span><br><span class="line">http.cors.allow-origin: <span class="string">"*"</span></span><br><span class="line">node.master: <span class="literal">true</span> </span><br><span class="line">node.data: <span class="literal">true</span> </span><br><span class="line">discovery.zen.ping.unicast.hosts: [<span class="string">"192.168.1.56:9300"</span>,<span class="string">"192.168.1.56:9301"</span>]</span><br><span class="line">discovery.zen.minimum_master_nodes: 1</span><br></pre></td></tr></table></figure><h3 id="slave节点配置文件"><a href="#slave节点配置文件" class="headerlink" title="slave节点配置文件"></a>slave节点配置文件</h3><p>位于 <strong>/home/docker/es/slave-config/es.yml</strong>,将以下内容写入配置文件:</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># slave-config</span></span><br><span class="line">cluster.name: ydool</span><br><span class="line">node.name: slave</span><br><span class="line">network.bind_host: 0.0.0.0</span><br><span class="line">network.publish_host: 192.168.1.56</span><br><span class="line">http.port: 9201</span><br><span class="line">transport.tcp.port: 9301</span><br><span class="line">http.cors.enabled: <span class="literal">true</span></span><br><span class="line">http.cors.allow-origin: <span class="string">"*"</span></span><br><span class="line">node.master: <span class="literal">true</span> </span><br><span class="line">node.data: <span class="literal">true</span> </span><br><span class="line">discovery.zen.ping.unicast.hosts: [<span class="string">"192.168.1.56:9300"</span>,<span class="string">"192.168.1.56:9301"</span>]</span><br><span class="line">discovery.zen.minimum_master_nodes: 1</span><br></pre></td></tr></table></figure><h2 id="安装运行-ES-集群"><a href="#安装运行-ES-集群" class="headerlink" title="安装运行 ES 集群"></a>安装运行 ES 集群</h2><h3 id="拉取镜像"><a href="#拉取镜像" class="headerlink" title="拉取镜像"></a>拉取镜像</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker pull elasticsearch:6.8.3</span><br></pre></td></tr></table></figure><h3 id="启动-ES-集群"><a href="#启动-ES-集群" class="headerlink" title="启动 ES 集群"></a>启动 ES 集群</h3><h4 id="启动master节点"><a href="#启动master节点" class="headerlink" title="启动master节点"></a>启动master节点</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker run -d --name es-master --restart=always -p 9200:9200 -p 9300:9300 -v /home/docker/es/master-config/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/docker/es/master-data:/usr/share/elasticsearch/data -v /home/docker/es/master-log:/usr/share/elasticsearch/logs elasticsearch:6.8.3</span><br></pre></td></tr></table></figure><h4 id="启动slave节点"><a href="#启动slave节点" class="headerlink" title="启动slave节点"></a>启动slave节点</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker run -d --name es-slave --restart=always -p 9201:9201 -p 9301:9301 -v /home/docker/es/slave-config/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/docker/es/slave-data:/usr/share/elasticsearch/data -v /home/docker/es/slave-log:/usr/share/elasticsearch/logs elasticsearch:6.8.3</span><br></pre></td></tr></table></figure><p>可附加 <strong>-e ES_JAVA_OPTS=”-Xms256m -Xmx256m”</strong> 参数来调整JVM大小,默认是2G</p><h3 id="访问ES"><a href="#访问ES" class="headerlink" title="访问ES"></a>访问ES</h3><p>访问 192.168.1.56:9200,出现版本信息,则集群启动成功.<br>使用chrome插件 Elastisearch-Head 可以可视化操作.</p><h2 id="安装-IK-中文分词插件"><a href="#安装-IK-中文分词插件" class="headerlink" title="安装 IK 中文分词插件"></a>安装 IK 中文分词插件</h2><h3 id="进入镜像"><a href="#进入镜像" class="headerlink" title="进入镜像"></a>进入镜像</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="built_in">exec</span> -it es-master /bin/bash</span><br></pre></td></tr></table></figure><h3 id="安装插件"><a href="#安装插件" class="headerlink" title="安装插件"></a>安装插件</h3><p>插件版本需要与ES版本对应,可访问下面的地址查看: <strong><a href="https://github.com/medcl/elasticsearch-analysis-ik/releases" target="_blank" rel="noopener">https://github.com/medcl/elasticsearch-analysis-ik/releases</a></strong> </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.3/elasticsearch-analysis-ik-6.8.3.zip</span><br></pre></td></tr></table></figure><h3 id="退出并重启镜像"><a href="#退出并重启镜像" class="headerlink" title="退出并重启镜像"></a>退出并重启镜像</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">exit</span></span><br><span class="line">docker restart es-master</span><br></pre></td></tr></table></figure><h3 id="slave节点执行同样操作"><a href="#slave节点执行同样操作" class="headerlink" title="slave节点执行同样操作"></a>slave节点执行同样操作</h3>]]></content>
<summary type="html">
<p><img src="https://i.loli.net/2020/05/25/E1Lgx4XMIQHGser.jpg" alt=""></p>
</summary>
<category term="Elasticsearch" scheme="https://blog.itjk.me/categories/Elasticsearch/"/>
<category term="Elasticsearch" scheme="https://blog.itjk.me/tags/Elasticsearch/"/>
<category term="Docker" scheme="https://blog.itjk.me/tags/Docker/"/>
</entry>
<entry>
<title>Hexo系列(10)博客同时部署到Coding</title>
<link href="https://blog.itjk.me/2019/07/01/Hexo%E7%B3%BB%E5%88%97(10)%E5%8D%9A%E5%AE%A2%E5%90%8C%E6%97%B6%E9%83%A8%E7%BD%B2%E5%88%B0Coding.html"/>
<id>https://blog.itjk.me/2019/07/01/Hexo%E7%B3%BB%E5%88%97(10)%E5%8D%9A%E5%AE%A2%E5%90%8C%E6%97%B6%E9%83%A8%E7%BD%B2%E5%88%B0Coding.html</id>
<published>2019-07-01T15:32:31.000Z</published>
<updated>2020-06-12T06:51:01.729Z</updated>
<content type="html"><![CDATA[<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190701233152.jpg" alt=""></p><a id="more"></a><h3 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h3><p>因为某些原因,国内访问部署在Github的Hexo博客有些慢,而且有时候还访问不到,不太稳定。并且,因为百度无法索引到github,所以,百度搜索不到博客。就考虑把博客同时部署到coding。折腾了一番,终于成功了。</p><h3 id="配置coding-token"><a href="#配置coding-token" class="headerlink" title="配置coding token"></a>配置coding token</h3><h4 id="博客的部署流程图"><a href="#博客的部署流程图" class="headerlink" title="博客的部署流程图"></a>博客的部署流程图</h4><p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190701222756.jpg" alt=""></p><h4 id="生成coding的token"><a href="#生成coding的token" class="headerlink" title="生成coding的token"></a>生成coding的token</h4><p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190701223130.jpg" alt=""></p><h4 id="复制token"><a href="#复制token" class="headerlink" title="复制token"></a>复制token</h4><p>因为这里的token只会显示一次,所以你必须要将token复制下来,保存到你认为安全的地方,以便复用<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190701223143.jpg" alt=""></p><h4 id="travis-ci-配置coding-token"><a href="#travis-ci-配置coding-token" class="headerlink" title="travis ci 配置coding token"></a>travis ci 配置coding token</h4><p>登录travis,找到博客项目,点击进入博客的详情页,再点击settings,将刚刚复制的coding token配置进去。这里的CO_TOKEN就是配置的coding token。<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190701223158.jpg" alt=""></p><h3 id="修改-travis-yml"><a href="#修改-travis-yml" class="headerlink" title="修改.travis.yml"></a>修改.travis.yml</h3><p>进入Hexo博客根目录,找到.travis.yml文件,修改它。具体内容如下:</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">language: node_js #构建环境</span><br><span class="line">node_js:</span><br><span class="line">- stable #选择当前稳定版本</span><br><span class="line">branches:</span><br><span class="line"> only:</span><br><span class="line"> - dev #这里替换你要监听的分支</span><br><span class="line">cache:</span><br><span class="line"> directories:</span><br><span class="line"> - node_modules #把node_modules文件夹放入缓存,节约每次构建的时间</span><br><span class="line">before_install:</span><br><span class="line">- npm install hexo-cli -g #安装Hexo脚手架工具</span><br><span class="line">install:</span><br><span class="line">- npm install #安装package.json中的依赖</span><br><span class="line">script:</span><br><span class="line">- hexo clean</span><br><span class="line">- hexo generate</span><br><span class="line">after_success: #script阶段成功后执行,构建失败不会执行</span><br><span class="line"> - git clone https://${GH_REF} .deploy_git # GH_REF是最下面配置的仓库地址</span><br><span class="line"> - cd .deploy_git</span><br><span class="line"> - git checkout master</span><br><span class="line"> - cd ../</span><br><span class="line"> - mv .deploy_git/.git/ ./public/ # 这一步之前的操作是为了保留master分支的提交记录,不然每次git init的话只有1条commit</span><br><span class="line"> - cd ./public</span><br><span class="line"> - git init</span><br><span class="line"> - git config user.name "lic"</span><br><span class="line"> - git config user.email "acelichao@163.com"</span><br><span class="line"> - git add .</span><br><span class="line"> - git commit -m "Travis CI Auto Build at `date +"%Y-%m-%d %H:%M:%S"`"</span><br><span class="line"> # Github Pages</span><br><span class="line"> - git push --force --quiet "https://${GH_TOKEN}@${GH_REF}" master:master </span><br><span class="line"> # Coding Pages</span><br><span class="line"> - git push --force --quiet "https://acelichao:${CO_TOKEN}@${CO_REF}" master:master </span><br><span class="line"></span><br><span class="line">env:</span><br><span class="line"> global:</span><br><span class="line"> # Github Pages</span><br><span class="line"> - GH_REF: github.com/LicV587/LicV587.github.io.git</span><br><span class="line"> # Coding Pages</span><br><span class="line"> - CO_REF: git.dev.tencent.com/acelichao/acelichao.coding.me.git</span><br></pre></td></tr></table></figure><p>注意事项:</p><ol><li>CO_REF 项目git地址必须要是https的,并且要将 <strong>https://</strong> 去掉</li><li>git push 语句中,比github语句多了一个用户名,就是 <strong>acelichao:</strong> 这块,这是你的coding用户名</li></ol><h3 id="coding-pages博客仓库配置"><a href="#coding-pages博客仓库配置" class="headerlink" title="coding pages博客仓库配置"></a>coding pages博客仓库配置</h3><h4 id="新建coding-pages仓库"><a href="#新建coding-pages仓库" class="headerlink" title="新建coding pages仓库"></a>新建coding pages仓库</h4><p>博客仓库的名称必须是 xxx.coding.me,这里的xxx就是你的coding用户名。并且我们选择使用空的readme.md文档初始化仓库,因为必须初始化仓库后才能开启coding pages。待仓库配置完成后,可以删除readme.md文档。<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190701225633.png" alt=""></p><h4 id="开启仓库的pages功能"><a href="#开启仓库的pages功能" class="headerlink" title="开启仓库的pages功能"></a>开启仓库的pages功能</h4><p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190701225651.png" alt=""></p><h4 id="配置pages"><a href="#配置pages" class="headerlink" title="配置pages"></a>配置pages</h4><p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190701225703.png" alt=""><br>注意事项:</p><ol><li>我们这里开启强制HTTPS访问</li><li>并且使用自定义域名访问博客,你只需要在绑定域名处输入域名,点击绑定就行了</li></ol><h3 id="域名DNS解析配置"><a href="#域名DNS解析配置" class="headerlink" title="域名DNS解析配置"></a>域名DNS解析配置</h3><p>在上一步中,我们开启了https访问,并设置了自定义域名,但还无法正常访问,我们还要在DNS解析处设置,以支持个人域名同时绑定coding与github。</p><p>github的自定义域名解析式根据博客中的<strong>CNAME</strong>文件判断。<br>coding的自定义域名解析则是根据上面的配置判断的。</p><p>我用的是dnspod,因为腾讯云已经收购了dnspod,所以在腾讯云后台解析也是一样。</p><p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190701230723.png" alt=""></p><p>如上图所示,我们分别设置2个CNAME解析记录指向github与coding,其中,指向coding的是默认类型,国外访问时则指向github。</p><p>注意:</p><ol><li>相同主机记录的CNAME解析类型不能相同</li><li>在上面我们在coding 配置中启用https访问时,我们必须要先将指向github的解析暂时停止,只开启指向coding的解析。这是因为,coding的https证书是向Let’s Encrypt申请的,它会验证我们的域名解析,如果这时开启了github的解析,怎么无法判断到底指向那个域名,导致报错。当证书状态显示正常后,则是证书申请成功,此时可以再次开启github解析了。</li></ol><h3 id="成功"><a href="#成功" class="headerlink" title="成功"></a>成功</h3><p>至此,整个Hexo博客的coding部署就成功了。可以尽情的写博客,然后提交到github仓库,travis会帮我们自动编译,并发布到github和coding仓库。<br>现在再次访问博客,速度真是如火箭般快速。</p>]]></content>
<summary type="html">
<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190701233152.jpg" alt=""></p>
</summary>
<category term="Hexo" scheme="https://blog.itjk.me/categories/Hexo/"/>
<category term="Hexo" scheme="https://blog.itjk.me/tags/Hexo/"/>
</entry>
<entry>
<title>Hexo系列(9)使用TravisCI自动部署Hexo博客</title>
<link href="https://blog.itjk.me/2019/05/29/Hexo%E7%B3%BB%E5%88%97(9)%E4%BD%BF%E7%94%A8TravisCI%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2Hexo%E5%8D%9A%E5%AE%A2.html"/>
<id>https://blog.itjk.me/2019/05/29/Hexo%E7%B3%BB%E5%88%97(9)%E4%BD%BF%E7%94%A8TravisCI%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2Hexo%E5%8D%9A%E5%AE%A2.html</id>
<published>2019-05-29T03:31:09.000Z</published>
<updated>2020-06-12T06:51:01.729Z</updated>
<content type="html"><![CDATA[<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528225537.jpg" alt=""></p><a id="more"></a><p>前面我们已经搭建好了一个人Hexo博客,但是还有一个问题,我们必须在本地写作,然后在编译,最后在推送到GitHub仓库。这其中,编译这一步非常耗时,也很不方便。我们需要写作,git push,之后的步骤都由机器自动执行。这就需要Travis CI出马了。</p><h3 id="持续集成简介"><a href="#持续集成简介" class="headerlink" title="持续集成简介"></a>持续集成简介</h3><p>持续集成(Continuous Integration)是一种软件开发实践。在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次。每次集成会经过自动构建(包括自动测试)的检验,以尽快发现集成错误</p><h3 id="Travis-CI简介"><a href="#Travis-CI简介" class="headerlink" title="Travis CI简介"></a>Travis CI简介</h3><p><a href="https://docs.travis-ci.com/api" target="_blank" rel="noopener">Travis CI</a> 是目前新兴的开源持续集成构建工具,它与jenkins,GO的明显区别在于采用yaml格式,同时它是在线服务,不像jenkins需要搭建本地环境。目前大多数的Github开源项目都已经移入到Travis CI的构建队列中,据说Travis CI每天运行超过4000次完整构建。</p><p>Travis CI分为2个版本:</p><ul><li>免费版(<a href="https://travis-ci.org/" target="_blank" rel="noopener">https://travis-ci.org/</a>)</li><li>收费版(<a href="https://travis-ci.com/" target="_blank" rel="noopener">https://travis-ci.com/</a>)</li></ul><p>这里我们只需要关注免费就可以了,Travis CI与Github集成的程度非常高,对于Github上的开源项目,可以免费在Travis上构建。</p><h3 id="自动部署流程"><a href="#自动部署流程" class="headerlink" title="自动部署流程"></a>自动部署流程</h3><h4 id="Travis-构建-Hexo-的步骤"><a href="#Travis-构建-Hexo-的步骤" class="headerlink" title="Travis 构建 Hexo 的步骤"></a>Travis 构建 Hexo 的步骤</h4><ol><li>首先在Github的博客仓库新建一个<strong>dev</strong>分支,然后把博客的整个源代码托管到这个分支</li><li>每当我们在本地修改博客或者写好博文,将修改push到<strong>dev</strong>分支</li><li>Travis上可以对这个项目的<strong>dev</strong>分支设置钩子,每当检测到push操作的时候,就去<strong>dev</strong>分支clone代码到Travis</li><li>Travis执行构建脚本</li><li>Travis把构建结果push到博客仓库的master分支</li></ol><p>根据上述的自动部署流程,我们唯一需要做的是push我们的博文到<strong>dev</strong>分支,其他的事情交给Travis</p><h4 id="如何将博客源代码提交到-dev-分支下"><a href="#如何将博客源代码提交到-dev-分支下" class="headerlink" title="如何将博客源代码提交到 dev 分支下"></a>如何将博客源代码提交到 dev 分支下</h4><ol><li>首先在本地博客根目录下,执行git init将博客文件夹初始化为一个本地git仓库</li><li>然后配置用户名和邮箱<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">git config user.name “github用户名”</span><br><span class="line">git config user.email “github邮箱”</span><br></pre></td></tr></table></figure></li><li>本地新建一个<strong>dev</strong>分支,并切换到该分支下<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git checkout -b dev</span><br></pre></td></tr></table></figure></li><li>提交本地文件<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">git add .</span><br><span class="line">git commit -m “dev init”</span><br></pre></td></tr></table></figure></li><li>关联远程仓库<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git remote add origin https://github.com/LicV587/LicV587.github.io.git</span><br></pre></td></tr></table></figure></li><li>将本地仓库<strong>dev</strong>分支提交到远程仓库的<strong>dev</strong>,注意这里会在远程仓库新建一个<strong>dev</strong>分支,并与本地的<strong>dev</strong>分支关联起来,以后本地的<strong>dev</strong>分支都会提交到对应的远程仓库<strong>dev</strong>分支<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git push origin dev:dev</span><br></pre></td></tr></table></figure></li></ol><p>至此,我们就将博客源代码提交到GitHub了</p><h3 id="配置Travis"><a href="#配置Travis" class="headerlink" title="配置Travis"></a>配置Travis</h3><h4 id="注册登录Travis"><a href="#注册登录Travis" class="headerlink" title="注册登录Travis"></a>注册登录Travis</h4><p><a href="https://travis-ci.org/" target="_blank" rel="noopener">Travis CI</a>不需要单独注册,直接使用Github账号登录即可。点击左边的Sync account,会同步你的Github账号,然后右边选择你要Activate(激活)的仓库<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190529105126.jpg" alt=""></p><h4 id="生成GitHub-Token"><a href="#生成GitHub-Token" class="headerlink" title="生成GitHub Token"></a>生成GitHub Token</h4><p>我们需要给予Travis CI对我们仓库进行相关操作的权限,所以我们需要生成相应的Token添加到Travis CI中。</p><p>首先,生成Github的Token,进入Github的设置中,如图:<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190529110041.jpg" alt=""></p><p>先给Token取一个名字,然后设置一些权限,其中红框内的权限是必须的,其他可以按需添加,如图:<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190529110226.jpg" alt=""></p><p>生成后的Token只会显示一次,所有需要复制保存 Token<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528171329.png" alt=""></p><h4 id="配置Travis-CI"><a href="#配置Travis-CI" class="headerlink" title="配置Travis CI"></a>配置Travis CI</h4><p>点击进入勾选的仓库,进入设置页面,如图:<br>图1<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190529110756.png" alt=""><br>图2<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190529110937.jpg" alt=""><br>这里设置构建的行为,。然后配置环境变量,起个名字,如:GH_TOKEN,并将刚才复制保存的Token填入,并将Display value in build log设置为OFF,关闭变量显示,避免Token泄露。</p><h3 id="编写-travis-yml文件"><a href="#编写-travis-yml文件" class="headerlink" title="编写.travis.yml文件"></a>编写.travis.yml文件</h3><p>在博客源文件根目录下新建 .travis.yml 文件,然后再文件中写入如下内容:</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">language: node_js #构建环境</span><br><span class="line">node_js:</span><br><span class="line">- stable #选择当前稳定版本</span><br><span class="line">branches:</span><br><span class="line"> only:</span><br><span class="line"> - dev #这里替换你要监听的分支</span><br><span class="line">cache:</span><br><span class="line"> directories:</span><br><span class="line"> - node_modules #把node_modules文件夹放入缓存,节约每次构建的时间</span><br><span class="line">before_install:</span><br><span class="line">- npm install hexo-cli -g #安装Hexo脚手架工具</span><br><span class="line">install:</span><br><span class="line">- npm install #安装package.json中的依赖</span><br><span class="line">script:</span><br><span class="line">- hexo clean</span><br><span class="line">- hexo generate</span><br><span class="line">after_success: #script阶段成功后执行,构建失败不会执行</span><br><span class="line"> - git clone https://${GH_REF} .deploy_git # GH_REF是最下面配置的仓库地址</span><br><span class="line"> - cd .deploy_git</span><br><span class="line"> - git checkout master</span><br><span class="line"> - cd ../</span><br><span class="line"> - mv .deploy_git/.git/ ./public/ # 这一步之前的操作是为了保留master分支的提交记录,不然每次git init的话只有1条commit</span><br><span class="line"> - cd ./public</span><br><span class="line"> - git init</span><br><span class="line"> - git config user.name "你的GitHub用户名"</span><br><span class="line"> - git config user.email "你的GitHub邮箱"</span><br><span class="line"> - git add .</span><br><span class="line"> - git commit -m "Travis CI Auto Build at `date +"%Y-%m-%d %H:%M:%S"`"</span><br><span class="line"> # Github Pages</span><br><span class="line"> - git push --force --quiet "https://${GH_TOKEN}@${GH_REF}" master:master </span><br><span class="line"></span><br><span class="line">env:</span><br><span class="line"> global:</span><br><span class="line"> # Github Pages</span><br><span class="line"> - GH_REF: github.com/LicV587/LicV587.github.io.git</span><br></pre></td></tr></table></figure><p>以后只要将博客提交到<strong>dev</strong>分支,travis就会帮你自动构建并部署。看到下面这张图提示 <strong>passed</strong> 就表示成功了<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190529112101.jpg" alt=""></p><p>至此,Hexo博客集成Travis CI就完成,以后,只需写博客+git push就行了,其他的Travis CI都会自动帮你完成,持续集成的魅力就是这么大</p><h3 id="参考文档"><a href="#参考文档" class="headerlink" title="参考文档"></a>参考文档</h3><ul><li><a href="https://x-d.xyz/2019/04/02/%E4%BD%BF%E7%94%A8Travis-CI%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2Hexo/" target="_blank" rel="noopener">使用Travis CL自动部署Hexo</a></li><li><a href="https://kchen.cc/2016/11/12/hexo-instructions/#Travis-CI-%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90" target="_blank" rel="noopener">基于 Hexo 的全自动博客构建部署系统</a></li><li><a href="https://juejin.im/post/5afe61f5f265da0b8d422a3e" target="_blank" rel="noopener">使用travis-ci自动部署Hexo到github和coding</a></li><li><a href="https://dmego.me/2017/10/13/deylpoy-hexo-with-TravisCI.html" target="_blank" rel="noopener">使用Travis CI自动部署Hexo到GitHub</a></li><li><a href="https://juejin.im/post/596e39916fb9a06baf2ed273" target="_blank" rel="noopener">如何快速搭建一个有域名且持续集成的hexo博客(2.0版)</a></li></ul>]]></content>
<summary type="html">
<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528225537.jpg" alt=""></p>
</summary>
<category term="Hexo" scheme="https://blog.itjk.me/categories/Hexo/"/>
<category term="Hexo" scheme="https://blog.itjk.me/tags/Hexo/"/>
<category term="CI/CD" scheme="https://blog.itjk.me/tags/CI-CD/"/>
</entry>
<entry>
<title>解惑系列(1)JSON到底是什么</title>
<link href="https://blog.itjk.me/2019/05/28/%E8%A7%A3%E6%83%91%E7%B3%BB%E5%88%97(1)JSON%E5%88%B0%E5%BA%95%E6%98%AF%E4%BB%80%E4%B9%88.html"/>
<id>https://blog.itjk.me/2019/05/28/%E8%A7%A3%E6%83%91%E7%B3%BB%E5%88%97(1)JSON%E5%88%B0%E5%BA%95%E6%98%AF%E4%BB%80%E4%B9%88.html</id>
<published>2019-05-28T14:42:45.000Z</published>
<updated>2020-06-12T06:51:01.729Z</updated>
<content type="html"><![CDATA[<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528224203.jpg" alt=""></p><a id="more"></a><p>A: “这个接口我传个 JSON 给你,格式是这样的 ‘[1, 2, 3]’”<br>B: “等下,这不是数组吗,JSON 应该有键啊,类似这样才行’{ “key”: [1, 2, 3] }’”<br>A: “不,这就是 JSON 格式的数据”<br>B: “啊,是吗?”</p><p>如果你对上面的对话也心存疑虑,可以继续往下看。</p><h2 id="什么是-JSON"><a href="#什么是-JSON" class="headerlink" title="什么是 JSON"></a>什么是 JSON</h2><p>首先应该明确JSON是什么,再讨论[1, 2, 3]是不是。</p><blockquote><p>JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。</p></blockquote><p>它仅仅是一种格式,就好比厨师脑中的食谱,这道菜有什么材料。而从原材料变成成品给顾客食用,这个过程食谱并没有实际参与,只是一个指导作用。</p><p>所以JSON也是不存在于我们的程序中,不存在任何地方,只是一个思维,存在我们脑海里。</p><p>这个思维,就是JSON这种格式应该包含哪些元素。</p><h2 id="JSON-格式"><a href="#JSON-格式" class="headerlink" title="JSON 格式"></a>JSON 格式</h2><p>JSON建构于两种结构:</p><blockquote><p>1.“名称/值”对的集合<br>2.值的有序列表</p></blockquote><p>从这里就能看出[1, 2, 3]是符合JSON格式的。</p><blockquote><p>但不能说[1, 2, 3]是一个JSON,它在javascript中可以被转换为数组,也可以在其他语言中被转换为数组(如果有这种类型)。而之所以只有这两种,是因为大部分现代计算机语言都支持。</p></blockquote><p>那[1, 2, undefined, 3]符合JSON格式吗?</p><p>简单一想,</p><blockquote><p>“既然结构要是计算机语言都支持的,那结构中的值也需要吧,而undefined是javascript独有的,其他语言并没有,所以不符合JSON格式。”</p></blockquote><p>bingo!合法的JSON值可以是以下六种:</p><blockquote><p>1.string<br>2.number<br>3.boolean<br>4.null<br>5.object<br>6.array</p></blockquote><p>所以下面的数据格式是合法的JSON:</p><figure class="highlight json"><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></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> <span class="attr">"person"</span>: {</span><br><span class="line"> <span class="attr">"name"</span>: <span class="string">"ltaoo"</span>,</span><br><span class="line"> <span class="attr">"age"</span>: <span class="number">18</span>,</span><br><span class="line"> <span class="attr">"skills"</span>: [<span class="string">"javascript"</span>, <span class="string">"html"</span>, <span class="string">"css"</span>]</span><br><span class="line"> },</span><br><span class="line"> <span class="attr">"happy"</span>: <span class="literal">true</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="JavaScript-中的-JSON"><a href="#JavaScript-中的-JSON" class="headerlink" title="JavaScript 中的 JSON"></a>JavaScript 中的 JSON</h2><h3 id="传递的到底是什么?"><a href="#传递的到底是什么?" class="headerlink" title="传递的到底是什么?"></a>传递的到底是什么?</h3><p>在JavaScript中,如果在请求接口时要传递数据,我们往往会说“传一个JSON”,从上面已经知道JSON只是一个格式,那我们传递的到底是什么?</p><figure class="highlight javascript"><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></pre></td><td class="code"><pre><span class="line"><span class="comment">// 一个简单的 post 请求</span></span><br><span class="line"><span class="keyword">const</span> body = {</span><br><span class="line"> name: <span class="string">'ltaoo'</span>,</span><br><span class="line"> age: <span class="number">18</span></span><br><span class="line">};</span><br><span class="line"></span><br><span class="line">fetch(<span class="string">'https://easy-mock.com/mock/5a1d30028e6ddb24964c2d91/business/api/login'</span>, {</span><br><span class="line"> method: <span class="string">'POST'</span>,</span><br><span class="line"> body,</span><br><span class="line">})</span><br><span class="line"> .then(<span class="function">(<span class="params">res</span>) =></span> res.json())</span><br><span class="line"> .then(<span class="function">(<span class="params">data</span>) =></span> {</span><br><span class="line"> <span class="built_in">console</span>.log(data);</span><br><span class="line"> });</span><br></pre></td></tr></table></figure><p>但实际上并没有将参数传递过去,即Headers中并不存在Request Payload,需要将body使用JSON.stringify()方法转换为一个字符串后,才能成功传递。</p><figure class="highlight javascript"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> body = {</span><br><span class="line"> name: <span class="string">'ltaoo'</span>,</span><br><span class="line"> age: <span class="number">18</span></span><br><span class="line">};</span><br><span class="line"></span><br><span class="line">fetch(<span class="string">'https://easy-mock.com/mock/5a1d30028e6ddb24964c2d91/business/api/login'</span>, {</span><br><span class="line"> method: <span class="string">'POST'</span>,</span><br><span class="line"> body: <span class="built_in">JSON</span>.stringify(body),</span><br><span class="line">})</span><br><span class="line"> .then(<span class="function">(<span class="params">res</span>) =></span> res.json())</span><br><span class="line"> .then(<span class="function">(<span class="params">data</span>) =></span> {</span><br><span class="line"> <span class="built_in">console</span>.log(data);</span><br><span class="line"> });</span><br></pre></td></tr></table></figure><blockquote><p>JSON.stringify()方法是将一个JavaScript值(对象或者数组)转换为一个 JSON 字符串。</p></blockquote><p>所以实际传递的是字符串,更严格来说是“JSON 格式的字符串”。</p><h3 id="JSON-对象"><a href="#JSON-对象" class="headerlink" title="JSON 对象"></a>JSON 对象</h3><blockquote><p>JSON.stringify()里面的JSON是什么?</p></blockquote><p>这是JavaScript中的内置对象,是实际存在的,但不同于之前所说的JSON。</p><p>这是最容易让人混乱的地方了,如果我们的JavaScript中有这么一个对象,由于符合JSON格式,有些人称为”JSON 对象“,但这只是一个普通的对象。</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> jsonObj = {</span><br><span class="line"> <span class="string">"name"</span>: <span class="string">"ltaoo"</span></span><br><span class="line">};</span><br></pre></td></tr></table></figure><h3 id="JSON-stringify"><a href="#JSON-stringify" class="headerlink" title="JSON.stringify"></a>JSON.stringify</h3><p>上面提到,实际传递的是字符串,所以不使用JSON.stringify()而是自己声明一个也是可以的,比如:</p><figure class="highlight javascript"><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></pre></td><td class="code"><pre><span class="line">fetch(<span class="string">'https://easy-mock.com/mock/5a1d30028e6ddb24964c2d91/business/api/login'</span>, {</span><br><span class="line"> method: <span class="string">'POST'</span>,</span><br><span class="line"> body: <span class="string">'{ "name": "ltaoo" }'</span>,</span><br><span class="line">})</span><br><span class="line"> .then(<span class="function">(<span class="params">res</span>) =></span> res.json())</span><br><span class="line"> .then(<span class="function">(<span class="params">data</span>) =></span> {</span><br><span class="line"> <span class="built_in">console</span>.log(data);</span><br><span class="line"> });</span><br></pre></td></tr></table></figure><p>当然这样很蠢。。。而且stringify()方法还有一些额外的”特效“:</p><figure class="highlight javascript"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> body = {</span><br><span class="line"> name: <span class="string">'ltaoo'</span>,</span><br><span class="line"> skills: <span class="literal">undefined</span>,</span><br><span class="line">};</span><br><span class="line"><span class="built_in">console</span>.log(<span class="built_in">JSON</span>.stringify(body));</span><br></pre></td></tr></table></figure><p>你认为结果会是什么?</p><blockquote><p>1.报错,因为undefined不是合法的值<br>2.成功,忽略不合法的值<br>3.成功,将undefined转换为null<br>4.其他</p></blockquote><p>答案是2,最终打印的值是{“name”:”ltaoo”},如果换个格式,结果是一样的吗?</p><figure class="highlight javascript"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> body = {</span><br><span class="line"> name: <span class="string">'ltaoo'</span>,</span><br><span class="line"> skills: [<span class="literal">undefined</span>],</span><br><span class="line">};</span><br><span class="line"><span class="built_in">console</span>.log(<span class="built_in">JSON</span>.stringify(body));</span><br><span class="line"><span class="comment">// 结果是 {"name":"ltaoo"} 还是 {"name":"ltaoo", "skills": []} ?</span></span><br></pre></td></tr></table></figure><p>答案揭晓,是{“name”:”ltaoo”,”skills”:[null]}。</p><p>我们都知道,JavaScript的数组不同于其他语言的数组,元素可以是不同类型的如[1, true, ‘name’]是合法的,使用JSON.stringify()会得到什么结果呢?</p><h3 id="JSON-parse"><a href="#JSON-parse" class="headerlink" title="JSON.parse"></a>JSON.parse</h3><blockquote><p>JSON.parse() 方法用来解析JSON字符串,构造由字符串描述的JavaScript值或对象。</p></blockquote><p>在实际的数据传递中并不常用,因为请求库(axios、isomorphic 等)帮我们做了处理。常见的使用场景是将自己生成的JSON 字符串转换回来,如localStorage存储信息。</p><p>那可以用来判断某个字符串是否符合JSON格式呢?</p><p>可以,而且经常会遇到解析失败导致的报错,类似于:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Uncaught <span class="built_in">SyntaxError</span>: Unexpected token x <span class="keyword">in</span> <span class="built_in">JSON</span> at position x</span><br></pre></td></tr></table></figure><p>如果接口请求得到的结果不符合JSON格式也会有这种报错。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>JSON是日常开发中最常使用的,但仅限于“会用”,实际上JSON的用途已经不局限在“数据交换”,NoSQL、配置文件也有JSON的身影,深入了解是有必要的,毕竟看起来这么“简单”。</p><h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><p>转载自:<br><a href="https://ltaoo.github.io/2017/12/30/json%E5%88%B0%E5%BA%95%E6%98%AF%E4%BB%80%E4%B9%88/" target="_blank" rel="noopener">https://ltaoo.github.io/2017/12/30/json%E5%88%B0%E5%BA%95%E6%98%AF%E4%BB%80%E4%B9%88/</a><br>参考:<br><a href="https://www.cnblogs.com/leejersey/p/3594473.html" target="_blank" rel="noopener">jquery JSON的解析方式</a><br><a href="https://www.cnblogs.com/tingbogiu/p/5826414.html" target="_blank" rel="noopener">jquery中的json操作</a></p>]]></content>
<summary type="html">
<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528224203.jpg" alt=""></p>
</summary>
<category term="Java" scheme="https://blog.itjk.me/categories/Java/"/>
<category term="Java" scheme="https://blog.itjk.me/tags/Java/"/>
<category term="JSON" scheme="https://blog.itjk.me/tags/JSON/"/>
</entry>
<entry>
<title>Hexo系列(8)PicGo和GitHub搭建个人图床工具</title>
<link href="https://blog.itjk.me/2019/05/28/Hexo%E7%B3%BB%E5%88%97(8)PicGo%E5%92%8CGitHub%E6%90%AD%E5%BB%BA%E4%B8%AA%E4%BA%BA%E5%9B%BE%E5%BA%8A%E5%B7%A5%E5%85%B7.html"/>
<id>https://blog.itjk.me/2019/05/28/Hexo%E7%B3%BB%E5%88%97(8)PicGo%E5%92%8CGitHub%E6%90%AD%E5%BB%BA%E4%B8%AA%E4%BA%BA%E5%9B%BE%E5%BA%8A%E5%B7%A5%E5%85%B7.html</id>
<published>2019-05-28T09:34:17.000Z</published>
<updated>2020-06-12T06:51:01.729Z</updated>
<content type="html"><![CDATA[<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528173343.jpg" alt=""></p><a id="more"></a><blockquote><p>最近微博图床限制外链,博客的部分图片挂了。想着使用github作为图床,研究了下怎么弄,记录下来,以备查询。<br>方便程度:★★★★☆<br>配置难度:★★☆☆☆<br>适用环境:win + mac + linux<br>需要工具:GitHub 账号 + PicGo 客户端<br>稳定性:背靠 GitHub 和微软,比自建服务器都稳<br>隐私性:这算是唯一缺点,你的图片别人可以访问</p></blockquote><h3 id="1-PicGo介绍"><a href="#1-PicGo介绍" class="headerlink" title="1. PicGo介绍"></a>1. PicGo介绍</h3><p>这是一款图片上传的工具,目前支持微博图床,七牛图床,腾讯云,又拍云,GitHub等图床,未来将支持更多图床。</p><p>所以解决问题的思路就是,将本地的文件,或者剪切板上面的截图发送图床,然后生成在线图片的链接</p><h3 id="2-下载并安装PicGo"><a href="#2-下载并安装PicGo" class="headerlink" title="2.下载并安装PicGo"></a>2.下载并安装PicGo</h3><h4 id="1-进入下载页面"><a href="#1-进入下载页面" class="headerlink" title="1.进入下载页面"></a>1.进入下载页面</h4><p><a href="https://github.com/Molunerfinn/PicGo/releases" target="_blank" rel="noopener">https://github.com/Molunerfinn/PicGo/releases</a></p><h4 id="2-下载安装包"><a href="#2-下载安装包" class="headerlink" title="2.下载安装包"></a>2.下载安装包</h4><p>选择最新版本就行了,我下载时最新版是2.1.2<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528164711.jpg" alt=""></p><h4 id="3-安装PicGo"><a href="#3-安装PicGo" class="headerlink" title="3.安装PicGo"></a>3.安装PicGo</h4><p>双击下载的安装包,一路默认就行,如果360报错,就允许执行,安装完成后,打开软件如下图所示:<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528165026.png" alt=""></p><h3 id="3-创建GitHub图床"><a href="#3-创建GitHub图床" class="headerlink" title="3.创建GitHub图床"></a>3.创建GitHub图床</h3><h4 id="1-需要注册-登陆GitHub账号"><a href="#1-需要注册-登陆GitHub账号" class="headerlink" title="1.需要注册/登陆GitHub账号"></a>1.需要注册/登陆GitHub账号</h4><p>这个自行注册,不会的百度谷歌下</p><h4 id="2-创建Repository"><a href="#2-创建Repository" class="headerlink" title="2.创建Repository"></a>2.创建Repository</h4><p>随便命名,我的比较简单,直接是img</p><h4 id="3-创建-token-并复制保存"><a href="#3-创建-token-并复制保存" class="headerlink" title="3.创建 token 并复制保存"></a>3.创建 token 并复制保存</h4><p>生成一个Token用于操作GitHub repository<br>Settings -> Developer settings -> Personal access tokens</p><p>1.点击右上角头像,settings,进入设置<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528170352.png" alt=""></p><p>2.在页面最下找到 Developer settings,点击进入<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528170636.png" alt=""></p><p>3.点击Generate new token<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528170920.png" alt=""></p><p>4.Note随便填,勾选复选框 repo ,接着到页面底部 Generate token 就完成了<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528171107.png" alt=""></p><p>5.然后会生成一串字符 token,这个 token 只出现一次,所以要复制保存一下<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528171329.png" alt=""></p><h3 id="4-配置PicGo客户端"><a href="#4-配置PicGo客户端" class="headerlink" title="4.配置PicGo客户端"></a>4.配置PicGo客户端</h3><p>如下图配置:<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528165451.jpg" alt=""></p><p>说明:</p><ul><li>仓库名 即你的仓库名</li><li>分支名 默认 master</li><li>Token 就是刚刚复制的那一串字符</li><li>存储路径 这个可以填也可以不填,填了的话图片就上传到 git 中 picgo这个文件夹</li><li>域名 <a href="https://raw.githubusercontent.com/LicV587/img/master这个要改一下,改成你自己的,格式:https://raw.githubusercontent.com/[仓库名]/master" target="_blank" rel="noopener">https://raw.githubusercontent.com/LicV587/img/master这个要改一下,改成你自己的,格式:https://raw.githubusercontent.com/[仓库名]/master</a></li></ul><p>然后点击确定,在点击设为默认图床,就OK了。</p><h3 id="5-图片压缩工具Imagine使用"><a href="#5-图片压缩工具Imagine使用" class="headerlink" title="5.图片压缩工具Imagine使用"></a>5.图片压缩工具Imagine使用</h3><p>因为github仓库有容量限制,并且为了访问博客时,更快的加载,我们需将博客图片压缩,然后在上传到GitHub图床</p><h4 id="1-压缩工具选择"><a href="#1-压缩工具选择" class="headerlink" title="1.压缩工具选择"></a>1.压缩工具选择</h4><p>常用的图片压缩工具有一些几种:</p><ol><li>TinyPNG<br>TinyPNG是非常著名的图片压缩工具,压缩性能强大,提供在线版,每次最多上传20张图片,最大不超过5M,且要手动下载,比较麻烦。它有客户端版本,但是只要MAC版。</li></ol><p>2.谷歌的Squoosh<br>大名鼎鼎谷歌家的,压缩性能比较强大,在Chrome中可以安装为离线APP</p><p>3.腾讯智图<br>这是腾讯家的图片压缩工具,有离线和在线版,比较老了</p><p>4.Imagine<br>这是个人开发者开发的,离线使用,跨平台,开源,使用简单,最后我选择了这个</p><h4 id="2-下载安装Imagine"><a href="#2-下载安装Imagine" class="headerlink" title="2.下载安装Imagine"></a>2.下载安装Imagine</h4><ol><li>下载地址,选择最新版就行了<br><a href="https://github.com/meowtec/Imagine/releases" target="_blank" rel="noopener">https://github.com/meowtec/Imagine/releases</a></li></ol><ol start="2"><li>下载完成后,双击安装包,一路默认,安装完成,打开软件如下:<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528172805.png" alt=""></li></ol><h4 id="3-使用"><a href="#3-使用" class="headerlink" title="3.使用"></a>3.使用</h4><p>将要压缩的图片拖拽到Imagine中,压缩完成后,再使用PicGo上传到图床,再复制Markdown链接到博客中</p><h3 id="5-参考"><a href="#5-参考" class="headerlink" title="5.参考"></a>5.参考</h3><ul><li><a href="https://blog.csdn.net/yefcion/article/details/88412025" target="_blank" rel="noopener">PicGo + GitHub 搭建个人图床工具</a></li><li><a href="https://blog.csdn.net/wugenqiang/article/details/88931897" target="_blank" rel="noopener">PicGo+GitHub图床,让Markdown飞起</a></li><li><a href="https://www.v2ex.com/t/508416" target="_blank" rel="noopener">TinyPNG 图片无损压缩有什么本地可替代的方案吗?</a></li></ul>]]></content>
<summary type="html">
<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528173343.jpg" alt=""></p>
</summary>
<category term="Hexo" scheme="https://blog.itjk.me/categories/Hexo/"/>
<category term="Hexo" scheme="https://blog.itjk.me/tags/Hexo/"/>
<category term="图床" scheme="https://blog.itjk.me/tags/%E5%9B%BE%E5%BA%8A/"/>
</entry>
<entry>
<title>Hexo系列(7)NexT主题设置封面的方法</title>
<link href="https://blog.itjk.me/2019/05/28/Hexo%E7%B3%BB%E5%88%97(7)NexT%E4%B8%BB%E9%A2%98%E8%AE%BE%E7%BD%AE%E5%B0%81%E9%9D%A2%E7%9A%84%E6%96%B9%E6%B3%95.html"/>
<id>https://blog.itjk.me/2019/05/28/Hexo%E7%B3%BB%E5%88%97(7)NexT%E4%B8%BB%E9%A2%98%E8%AE%BE%E7%BD%AE%E5%B0%81%E9%9D%A2%E7%9A%84%E6%96%B9%E6%B3%95.html</id>
<published>2019-05-28T08:30:46.000Z</published>
<updated>2020-06-12T06:51:01.729Z</updated>
<content type="html"><</span><br><span class="line"></span><br><span class="line">文章摘要</span><br><span class="line"></span><br><span class="line"><!-- more --></span><br><span class="line"></span><br><span class="line">文章正文</span><br></pre></td></tr></table></figure><h3 id="3-参考"><a href="#3-参考" class="headerlink" title="3.参考"></a>3.参考</h3><ul><li><a href="https://wdd.js.org/hexo-next-theme-set-cover.html" target="_blank" rel="noopener">Hexo NexT主题设置封面的方法</a></li><li><a href="https://juejin.im/post/5a71ab9f518825735300ee6c#heading-39" target="_blank" rel="noopener">NexT主题的优化定制修改指南</a></li></ul>]]></content>
<summary type="html">
<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528162957.jpg" alt=""></p>
</summary>
<category term="Hexo" scheme="https://blog.itjk.me/categories/Hexo/"/>
<category term="Hexo" scheme="https://blog.itjk.me/tags/Hexo/"/>
</entry>
<entry>
<title>Java系列(1)实现汉字转拼音</title>
<link href="https://blog.itjk.me/2019/05/24/Java%E7%B3%BB%E5%88%97(1)%E5%AE%9E%E7%8E%B0%E6%B1%89%E5%AD%97%E8%BD%AC%E6%8B%BC%E9%9F%B3.html"/>
<id>https://blog.itjk.me/2019/05/24/Java%E7%B3%BB%E5%88%97(1)%E5%AE%9E%E7%8E%B0%E6%B1%89%E5%AD%97%E8%BD%AC%E6%8B%BC%E9%9F%B3.html</id>
<published>2019-05-24T08:29:44.000Z</published>
<updated>2020-06-12T06:51:01.729Z</updated>
<content type="html"><![CDATA[<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528221454.jpg" alt=""></p><a id="more"></a><blockquote><p>最近遇到汉字转拼音放入场景,研究了下,结合网上的代码,提取出了一个工具方法,在此记录下,以备查询。</p></blockquote><h3 id="1-引入jar包"><a href="#1-引入jar包" class="headerlink" title="1. 引入jar包"></a>1. 引入jar包</h3><p>Java汉字转成汉语拼音工具类,需要用到pinyin4j.jar包,笔者使用的是Maven项目,在pom.xml中引入依赖</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line"><dependency></span><br><span class="line"> <groupId>com.belerweb</groupId></span><br><span class="line"> <artifactId>pinyin4j</artifactId></span><br><span class="line"> <version>2.5.0</version></span><br><span class="line"></dependency></span><br></pre></td></tr></table></figure><h3 id="2-工具类"><a href="#2-工具类" class="headerlink" title="2. 工具类"></a>2. 工具类</h3><figure class="highlight plain"><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><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br></pre></td><td class="code"><pre><span class="line">package com.jikemix.study.util;</span><br><span class="line"></span><br><span class="line">import com.jikemix.study.exception.MyException;</span><br><span class="line">import net.sourceforge.pinyin4j.PinyinHelper;</span><br><span class="line">import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;</span><br><span class="line">import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;</span><br><span class="line">import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;</span><br><span class="line">import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;</span><br><span class="line">import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;</span><br><span class="line"></span><br><span class="line">import java.util.Locale;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/**</span><br><span class="line"> * 汉语拼音处理工具类<br></span><br><span class="line"> * 使用jar:com.belerweb:pinyin4j:2.5.0<br></span><br><span class="line"> * 设置拼音格式化:<br></span><br><span class="line"> * 1、声调格式:<br></span><br><span class="line"> * HanyuPinyinToneType.WITH_TONE_NUMBER 用数字表示声调,例如:liu2<br></span><br><span class="line"> * HanyuPinyinToneType.WITHOUT_TONE 无声调表示,例如:liu<br></span><br><span class="line"> * HanyuPinyinToneType.WITH_TONE_MARK 用声调符号表示,例如:liú<br></span><br><span class="line"> * 2、设置特殊拼音 ü 的显示格式:<br></span><br><span class="line"> * HanyuPinyinVCharType.WITH_U_AND_COLON 以U和一个冒号表示该拼音,例如:lu:<br></span><br><span class="line"> * HanyuPinyinVCharType.WITH_V 以V表示该字符,例如:lv<br></span><br><span class="line"> * HanyuPinyinVCharType.WITH_U_UNICODE 以ü表示<br></span><br><span class="line"> * 3、声调格式:<br></span><br><span class="line"> * HanyuPinyinCaseType.LOWERCASE 转换后以全小写方式输出<br></span><br><span class="line"> * HanyuPinyinCaseType.UPPERCASE 转换后以全大写方式输出<br></span><br><span class="line"> *</span><br><span class="line"> *</span><br><span class="line"> * @author lc</span><br><span class="line"> * @date 2019/5/24 9:59</span><br><span class="line"> */</span><br><span class="line">public class PinyinOperator {</span><br><span class="line"></span><br><span class="line"> private static final Boolean FIRST_LETTER_TRUE = true;</span><br><span class="line"> private static final Boolean FIRST_LETTER_FALSE = false;</span><br><span class="line"> private static final String REG_CHINESE = "[\\u4E00-\\u9FA5]+";</span><br><span class="line"> private static final String REG_NUMBER = "[0-9]+";</span><br><span class="line"> private static final String REG_LETTER = "[a-zA-Z]+";</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"> * @param args</span><br><span class="line"> */</span><br><span class="line"> public static void main(String[] args) {</span><br><span class="line"> String str = "12a%$这是拼音测试ababa%$$#";</span><br><span class="line"> System.out.println(getFirstLetterUp(str));</span><br><span class="line"> System.out.println(getFirstLetterLow(str));</span><br><span class="line"> System.out.println(getPinyinStrUp(str));</span><br><span class="line"> System.out.println(getPinyinStrLow(str));</span><br><span class="line"> System.out.println(getFirstChineseLetterUp(str));</span><br><span class="line"> System.out.println(getFirstChineseLetterLow(str));</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"> * @param chineseStr</span><br><span class="line"> * @return</span><br><span class="line"> */</span><br><span class="line"> public static String getFirstLetterUp(String chineseStr) {</span><br><span class="line"> return toPinyin(chineseStr, FIRST_LETTER_TRUE, HanyuPinyinCaseType.UPPERCASE);</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"> * @param chineseStr</span><br><span class="line"> * @return</span><br><span class="line"> */</span><br><span class="line"> public static String getFirstLetterLow(String chineseStr) {</span><br><span class="line"> return toPinyin(chineseStr, FIRST_LETTER_TRUE, HanyuPinyinCaseType.LOWERCASE);</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"> * @param chineseStr</span><br><span class="line"> * @return</span><br><span class="line"> */</span><br><span class="line"> public static String getPinyinStrUp(String chineseStr) {</span><br><span class="line"> return toPinyin(chineseStr, FIRST_LETTER_FALSE, HanyuPinyinCaseType.UPPERCASE);</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"> * @param chineseStr</span><br><span class="line"> * @return</span><br><span class="line"> */</span><br><span class="line"> public static String getPinyinStrLow(String chineseStr) {</span><br><span class="line"> return toPinyin(chineseStr, FIRST_LETTER_FALSE, HanyuPinyinCaseType.LOWERCASE);</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"> * 获取中文的拼音</span><br><span class="line"> * @param chineseStr 需要获取拼音的中文字符</span><br><span class="line"> * @param isFirstLetter 是否只获取首字母,true获取首字母,false获取全拼</span><br><span class="line"> * @param caseType 拼音格式:大小写类型枚举</span><br><span class="line"> * @return</span><br><span class="line"> */</span><br><span class="line"> private static String toPinyin(String chineseStr, Boolean isFirstLetter, HanyuPinyinCaseType caseType) {</span><br><span class="line"> if (chineseStr==null || "".equals(chineseStr.trim())) {</span><br><span class="line"> return null;</span><br><span class="line"> }</span><br><span class="line"> char[] charArr = chineseStr.trim().toCharArray();</span><br><span class="line"> StringBuilder pinyin = new StringBuilder();</span><br><span class="line"> //设置输出格式</span><br><span class="line"> HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();</span><br><span class="line"> // 设置声调格式,此处为无声调格式</span><br><span class="line"> format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);</span><br><span class="line"> // 设置特殊声调格式,例如“u:”或“v”或“ü”</span><br><span class="line"> format.setVCharType(HanyuPinyinVCharType.WITH_V);</span><br><span class="line"> // 设置大小写格式,此处为大写</span><br><span class="line"> format.setCaseType(caseType);</span><br><span class="line"> try {</span><br><span class="line"> for (int i=0; i<charArr.length; i++) {</span><br><span class="line"> String str = Character.toString(charArr[i]);</span><br><span class="line"> // 如果字符是中文,则将中文转为汉语拼音</span><br><span class="line"> if (str.matches(REG_CHINESE)) {</span><br><span class="line"> String[] pinyinStrArr = PinyinHelper.toHanyuPinyinStringArray(charArr[i], format);</span><br><span class="line"> if (pinyinStrArr != null) {</span><br><span class="line"> if(isFirstLetter){</span><br><span class="line"> // 获取拼音的首字母</span><br><span class="line"> pinyin.append(pinyinStrArr[0].charAt(0));</span><br><span class="line"> } else {</span><br><span class="line"> // 获取拼音的全拼</span><br><span class="line"> pinyin.append(pinyinStrArr[0]);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> // 如果是数字,则直接追加</span><br><span class="line"> } else if (str.matches(REG_NUMBER)) {</span><br><span class="line"> pinyin.append(charArr[i]);</span><br><span class="line"> // 如果是字母,则根据参数转大小写,再追加</span><br><span class="line"> } else if (str.matches(REG_LETTER)) {</span><br><span class="line"> if(caseType == HanyuPinyinCaseType.UPPERCASE){</span><br><span class="line"> pinyin.append(Character.toString(charArr[i]).toUpperCase(Locale.CHINA));</span><br><span class="line"> } else {</span><br><span class="line"> pinyin.append(Character.toString(charArr[i]).toLowerCase(Locale.CHINA));</span><br><span class="line"> }</span><br><span class="line"> // 如果是标点符号等,则不转换</span><br><span class="line"> } else {</span><br><span class="line"></span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> } catch (BadHanyuPinyinOutputFormatCombination e) {</span><br><span class="line"> throw new MyException(e.getMessage());</span><br><span class="line"> }</span><br><span class="line"> return pinyin.toString();</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"> * @param chineseStr</span><br><span class="line"> * @return</span><br><span class="line"> */</span><br><span class="line"> public static String getFirstChineseLetterUp(String chineseStr) {</span><br><span class="line"> return getFirstLetter(chineseStr, HanyuPinyinCaseType.UPPERCASE);</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"> * @param chineseStr</span><br><span class="line"> * @return</span><br><span class="line"> */</span><br><span class="line"> public static String getFirstChineseLetterLow(String chineseStr) {</span><br><span class="line"> return getFirstLetter(chineseStr, HanyuPinyinCaseType.LOWERCASE);</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"> * @param chineseStr 需要获取拼音的中文字符</span><br><span class="line"> * @param caseType 拼音格式:大小写类型枚举</span><br><span class="line"> * @return</span><br><span class="line"> */</span><br><span class="line"> private static String getFirstLetter(String chineseStr, HanyuPinyinCaseType caseType) {</span><br><span class="line"> if (chineseStr==null || "".equals(chineseStr.trim())) {</span><br><span class="line"> return null;</span><br><span class="line"> }</span><br><span class="line"> char[] charArr = chineseStr.trim().toCharArray();</span><br><span class="line"> StringBuilder firstLetter = new StringBuilder();</span><br><span class="line"> //设置输出格式</span><br><span class="line"> HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();</span><br><span class="line"> // 设置声调格式,此处为无声调格式</span><br><span class="line"> format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);</span><br><span class="line"> // 设置特殊声调格式,例如“u:”或“v”或“ü”</span><br><span class="line"> format.setVCharType(HanyuPinyinVCharType.WITH_V);</span><br><span class="line"> // 设置大小写格式,此处为大写</span><br><span class="line"> format.setCaseType(caseType);</span><br><span class="line"> try {</span><br><span class="line"> for (int i=0; i<charArr.length; i++) {</span><br><span class="line"> String str = Character.toString(charArr[i]);</span><br><span class="line"> if (str.matches(REG_CHINESE)) {</span><br><span class="line"> // 如果字符是中文,则将中文转为汉语拼音</span><br><span class="line"> String[] pinyinStrArr = PinyinHelper.toHanyuPinyinStringArray(charArr[i], format);</span><br><span class="line"> if (pinyinStrArr != null) {</span><br><span class="line"> // 获取拼音的首字母</span><br><span class="line"> firstLetter.append(pinyinStrArr[0].charAt(0));</span><br><span class="line"> // 成功获取到第一个汉字的首字母,跳出循环</span><br><span class="line"> break;</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"> } catch (BadHanyuPinyinOutputFormatCombination e) {</span><br><span class="line"> throw new MyException(e.getMessage());</span><br><span class="line"> }</span><br><span class="line"> return firstLetter.toString();</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">}</span><br></pre></td></tr></table></figure><h3 id="3-后注"><a href="#3-后注" class="headerlink" title="3. 后注"></a>3. 后注</h3><p>有博文说 <strong>pinyin4j</strong> 对多音字语句的处理不太理想。<br>需要使用 <strong>com.github.stuxuhai:jpinyin:1.1.8</strong> 这个jar,说是在pinyin4j的jar上进行了优化,可以实现汉字转换为拼音,并自动识别常用多音字,还支持简体转换为繁体,检查是否为简体,是否为繁体,是否为中文字符等功能。这个新的jar还没测试过,有时间测试下。</p><h3 id="4-参考文章"><a href="#4-参考文章" class="headerlink" title="4. 参考文章"></a>4. 参考文章</h3><ul><li><a href="https://blog.csdn.net/weixin_39297312/article/details/80944298" target="_blank" rel="noopener">java获取中文的拼音以及获取中文拼音的首字母</a></li><li><a href="https://blog.csdn.net/moakun/article/details/80719859" target="_blank" rel="noopener">JAVA实现汉字转换为拼音 pinyin4j/JPinyin</a></li><li><a href="https://blog.csdn.net/HG_Harvey/article/details/79035828" target="_blank" rel="noopener">Java汉字转汉语拼音工具类</a></li></ul>]]></content>
<summary type="html">
<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528221454.jpg" alt=""></p>
</summary>
<category term="Java" scheme="https://blog.itjk.me/categories/Java/"/>
<category term="Java" scheme="https://blog.itjk.me/tags/Java/"/>
</entry>
<entry>
<title>Hexo系列(6)Hexo博客绑定自定义域名</title>
<link href="https://blog.itjk.me/2019/04/29/Hexo%E7%B3%BB%E5%88%97(6)Hexo%E5%8D%9A%E5%AE%A2%E7%BB%91%E5%AE%9A%E8%87%AA%E5%AE%9A%E4%B9%89%E5%9F%9F%E5%90%8D.html"/>
<id>https://blog.itjk.me/2019/04/29/Hexo%E7%B3%BB%E5%88%97(6)Hexo%E5%8D%9A%E5%AE%A2%E7%BB%91%E5%AE%9A%E8%87%AA%E5%AE%9A%E4%B9%89%E5%9F%9F%E5%90%8D.html</id>
<published>2019-04-29T02:10:59.000Z</published>
<updated>2020-06-12T06:51:01.729Z</updated>
<content type="html"><![CDATA[<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528160925.jpg" alt=""></p><a id="more"></a><blockquote><p>如果你感觉直接使用 <strong>用户名.github.io</strong> 的域名作为你的博客链接不够专业,不够程序员的话,那么就购买一个域名解析绑定到你的博客</p></blockquote><h3 id="一、-购买域名注册"><a href="#一、-购买域名注册" class="headerlink" title="一、 购买域名注册"></a>一、 购买域名注册</h3><p>购买域名可以到域名服务商去购买,如国内的 <a href="https://wanwang.aliyun.com/" target="_blank" rel="noopener">阿里云</a>、<a href="https://dnspod.cloud.tencent.com/" target="_blank" rel="noopener">腾讯云</a>、国外的<a href="https://sg.godaddy.com/zh/" target="_blank" rel="noopener">Godaddy</a>等。<br>这里推荐 Godaddy ,快速无限备案,没有限制,附上域名注册指南:<a href="https://www.zhudc.com/website/1669" target="_blank" rel="noopener">https://www.zhudc.com/website/1669</a></p><h3 id="二、-配置域名解析"><a href="#二、-配置域名解析" class="headerlink" title="二、 配置域名解析"></a>二、 配置域名解析</h3><p>购买好了域名,我们还要让域名解析到博客的地址。首先,我们去到刚刚刚刚购买域名的服务商那里,进入域名管理的控制台,一般来说,域名服务商会同时提供域名注册和域名解析的服务,在我们购买好域名后,域名服务商会给我们配置上域名解析的服务。但是他们提供的域名解析服务可能收费或者是解析效果不好,这里推荐几个优秀的免费域名解析服务商,国内的有<a href="https://www.dnspod.cn/" target="_blank" rel="noopener">dnspod</a>、<a href="http://www.cloudxns.net/" target="_blank" rel="noopener">cloudxns</a>,国外的有<a href="https://www.cloudflare.com/" target="_blank" rel="noopener">cloudflare</a>。我的域名是从godaddy上购买的,使用的是dnspod的域名解析服务。下面以godaddy域名+dnspod解析来讲解具体操作步骤。</p><h4 id="1-进入godaddy-账户中心,点击DNS,如图:"><a href="#1-进入godaddy-账户中心,点击DNS,如图:" class="headerlink" title="1. 进入godaddy 账户中心,点击DNS,如图:"></a>1. 进入godaddy 账户中心,点击DNS,如图:</h4><p><img src="https://ws1.sinaimg.cn/large/005QTX3hgy1g2j8qa2p4nj31gq0mqjsw.jpg" alt=""></p><h4 id="2-进入DNS管理后,找到域名服务器,点击更改,如图:"><a href="#2-进入DNS管理后,找到域名服务器,点击更改,如图:" class="headerlink" title="2. 进入DNS管理后,找到域名服务器,点击更改,如图:"></a>2. 进入DNS管理后,找到域名服务器,点击更改,如图:</h4><p><img src="https://ws1.sinaimg.cn/large/005QTX3hgy1g2j8u30zqnj31h80ox0us.jpg" alt=""></p><h4 id="3-选择自定义域名,添加dnspod的DNS,保存,如图:"><a href="#3-选择自定义域名,添加dnspod的DNS,保存,如图:" class="headerlink" title="3. 选择自定义域名,添加dnspod的DNS,保存,如图:"></a>3. 选择自定义域名,添加dnspod的DNS,保存,如图:</h4><p><img src="https://ws1.sinaimg.cn/large/005QTX3hgy1g2j8yek6ksj31ci0oitad.jpg" alt=""></p><p>这样,就将我们的域名解析从godaddy转到了dnspod。</p><h4 id="4-进入到dnspod,配置我们需要解析的域名,如图:"><a href="#4-进入到dnspod,配置我们需要解析的域名,如图:" class="headerlink" title="4. 进入到dnspod,配置我们需要解析的域名,如图:"></a>4. 进入到dnspod,配置我们需要解析的域名,如图:</h4><p><img src="https://ws1.sinaimg.cn/large/005QTX3hgy1g2j9h3gbmdj316v0l0q7p.jpg" alt=""></p><h4 id="5-然后点击刚刚添加的域名,进入解析管理,添加一条CNAME记录指向用户名-github-io-博客地址,如图:"><a href="#5-然后点击刚刚添加的域名,进入解析管理,添加一条CNAME记录指向用户名-github-io-博客地址,如图:" class="headerlink" title="5. 然后点击刚刚添加的域名,进入解析管理,添加一条CNAME记录指向用户名.github.io 博客地址,如图:"></a>5. 然后点击刚刚添加的域名,进入解析管理,添加一条CNAME记录指向用户名.github.io 博客地址,如图:</h4><p><img src="https://ws1.sinaimg.cn/large/005QTX3hgy1g2j9kfk1sqj31600ch403.jpg" alt=""></p><h3 id="三、在github-项目中设置我们的域名"><a href="#三、在github-项目中设置我们的域名" class="headerlink" title="三、在github 项目中设置我们的域名"></a>三、在github 项目中设置我们的域名</h3><h4 id="1-在GitHub-项目中,点击settings,如图:"><a href="#1-在GitHub-项目中,点击settings,如图:" class="headerlink" title="1. 在GitHub 项目中,点击settings,如图:"></a>1. 在GitHub 项目中,点击settings,如图:</h4><p><img src="https://ws1.sinaimg.cn/large/005QTX3hgy1g2j9pd6oezj312m0jn40y.jpg" alt=""></p><h4 id="2-找到Github-Pages节点,在Custom-domain处填入自定义域名,再开启强制HTTPS访问"><a href="#2-找到Github-Pages节点,在Custom-domain处填入自定义域名,再开启强制HTTPS访问" class="headerlink" title="2. 找到Github Pages节点,在Custom domain处填入自定义域名,再开启强制HTTPS访问"></a>2. 找到Github Pages节点,在Custom domain处填入自定义域名,再开启强制HTTPS访问</h4><p><img src="https://ws1.sinaimg.cn/large/005QTX3hgy1g2j9pm96zaj311y0mmtae.jpg" alt=""></p><h3 id="四、在Hexo-博客中设置自定义域名"><a href="#四、在Hexo-博客中设置自定义域名" class="headerlink" title="四、在Hexo 博客中设置自定义域名"></a>四、在Hexo 博客中设置自定义域名</h3><h4 id="1-在博客-站点配置文件-中,找到-URL-节点,设置自定义域名"><a href="#1-在博客-站点配置文件-中,找到-URL-节点,设置自定义域名" class="headerlink" title="1. 在博客 站点配置文件 中,找到 URL 节点,设置自定义域名"></a>1. 在博客 站点配置文件 中,找到 URL 节点,设置自定义域名</h4><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line"># URL</span><br><span class="line">## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'</span><br><span class="line">url: https://blog.itjk.me# 自定义域名</span><br><span class="line">root: /</span><br><span class="line">permalink: :year/:month/:day/:title.html</span><br><span class="line"># permalink_defaults: :category/:title.html</span><br></pre></td></tr></table></figure><h4 id="2-git-bash-进入博客根目录,执行下列命令:"><a href="#2-git-bash-进入博客根目录,执行下列命令:" class="headerlink" title="2. git bash 进入博客根目录,执行下列命令:"></a>2. git bash 进入博客根目录,执行下列命令:</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cd source</span><br><span class="line">touch CNAME</span><br></pre></td></tr></table></figure><p>然后打开 新建立的 <strong>CNAME</strong> 文件,在文件中填入自定义域名,如下:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">blog.itjk.me</span><br></pre></td></tr></table></figure><h4 id="3-将更改后的项目执行以下命令行"><a href="#3-将更改后的项目执行以下命令行" class="headerlink" title="3. 将更改后的项目执行以下命令行"></a>3. 将更改后的项目执行以下命令行</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">hexo clean</span><br><span class="line">hexo g -d</span><br></pre></td></tr></table></figure><p>就将博客推送到了github仓库,然后访问 blog.itjk.me,就能看到博客了</p>]]></content>
<summary type="html">
<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528160925.jpg" alt=""></p>
</summary>
<category term="Hexo" scheme="https://blog.itjk.me/categories/Hexo/"/>
<category term="Hexo" scheme="https://blog.itjk.me/tags/Hexo/"/>
</entry>
<entry>
<title>Hexo系列(5)Hexo添加评论系统</title>
<link href="https://blog.itjk.me/2019/04/28/Hexo%E7%B3%BB%E5%88%97(5)Hexo%E6%B7%BB%E5%8A%A0%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F.html"/>
<id>https://blog.itjk.me/2019/04/28/Hexo%E7%B3%BB%E5%88%97(5)Hexo%E6%B7%BB%E5%8A%A0%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F.html</id>
<published>2019-04-28T09:46:36.000Z</published>
<updated>2020-06-12T06:51:01.729Z</updated>
<content type="html"><![CDATA[<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528221439.jpg" alt=""></p><a id="more"></a><blockquote><p>Hexo next主题支持多种评论系统,各有利弊,这里推荐使用Valine,一款基于LeanCloud的快速、简洁且高效的无后端评论系统。</p></blockquote><blockquote><p>Valine 介绍:<a href="https://valine.js.org/" target="_blank" rel="noopener">https://valine.js.org/</a></p></blockquote><h3 id="一、注册LeanCloud"><a href="#一、注册LeanCloud" class="headerlink" title="一、注册LeanCloud"></a>一、注册LeanCloud</h3><h4 id="1-注册一个账号"><a href="#1-注册一个账号" class="headerlink" title="1. 注册一个账号"></a>1. 注册一个账号</h4><p>注册地址:<a href="https://tab.leancloud.cn/dashboard/login.html#/signup" target="_blank" rel="noopener">https://tab.leancloud.cn/dashboard/login.html#/signup</a></p><h4 id="2-创建应用"><a href="#2-创建应用" class="headerlink" title="2. 创建应用"></a>2. 创建应用</h4><p>创建应用<br><img src="https://i.loli.net/2019/04/29/5cc649074a753.png" alt="createapp.png"><br>填写应用信息<br><img src="https://i.loli.net/2019/04/29/5cc6498b7f7f9.png" alt="appinfo.png"><br>在设置里面找到AppId和AppKey,添加到主题配置文件对应的位置<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528150557.jpg" alt=""></p><h3 id="二、Hexo-开启-valine-评论系统"><a href="#二、Hexo-开启-valine-评论系统" class="headerlink" title="二、Hexo 开启 valine 评论系统"></a>二、Hexo 开启 valine 评论系统</h3><h4 id="1-配置-Valine"><a href="#1-配置-Valine" class="headerlink" title="1. 配置 Valine"></a>1. 配置 Valine</h4><p>打开 主题配置文件,路径为:/themes/next/_config.yml 文件,搜索 valine,开启 valine,设置 enable 为 true,如下:</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">valine:</span><br><span class="line"> enable: true # 开启评论</span><br><span class="line"> appid: ~~~ # 刚申请 leancloud 的 appid</span><br><span class="line"> appkey: ~~~ # 刚生情 leancloud 的 appkey</span><br><span class="line"> notify: false # 是否邮件推送 详情看 https://github.com/xCss/Valine/wiki</span><br><span class="line"> verify: false # </span><br><span class="line"> placeholder: Just go go # 评论框里的placeholder信息</span><br><span class="line"> avatar: mm # gravatar style</span><br><span class="line"> guest_info: nick,mail,link # custom comment header</span><br><span class="line"> pageSize: 10 # 一页显示的评论条数</span><br><span class="line"> visitor: false #</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528221439.jpg" alt=""></p>
</summary>
<category term="Hexo" scheme="https://blog.itjk.me/categories/Hexo/"/>
<category term="Hexo" scheme="https://blog.itjk.me/tags/Hexo/"/>
</entry>
<entry>
<title>Hexo系列(4)Hexo主题配置</title>
<link href="https://blog.itjk.me/2019/04/28/Hexo%E7%B3%BB%E5%88%97(4)Hexo%E4%B8%BB%E9%A2%98%E9%85%8D%E7%BD%AE.html"/>
<id>https://blog.itjk.me/2019/04/28/Hexo%E7%B3%BB%E5%88%97(4)Hexo%E4%B8%BB%E9%A2%98%E9%85%8D%E7%BD%AE.html</id>
<published>2019-04-28T09:04:39.000Z</published>
<updated>2020-06-12T06:51:01.729Z</updated>
<content type="html"><</span><br><span class="line"> GitHub: https://github.com/yourname || github</span><br><span class="line"> E-Mail: mailto:yourname@gmail.com || envelope</span><br><span class="line"> Google: https://plus.google.com/yourname || google</span><br><span class="line">social_icons:</span><br><span class="line"> enable: true #显示社交图标</span><br><span class="line"> icons_only: false #只显示图标的开关</span><br><span class="line">#Blog rolls</span><br><span class="line">links_icon: link #友链的图标 参考上文</span><br><span class="line">links_title: Links #友链的title 比如你可以更改为 友情链接</span><br><span class="line">links_layout: block #友链摆放的样式,按块 一行一个</span><br><span class="line">#links_layout: inline #按线摆放,一行很多个 切记 同时只能一种样式</span><br><span class="line">links:</span><br><span class="line"> Title: http://example.com/ #友链的地址</span><br></pre></td></tr></table></figure><h4 id="配置Hexo站点文章摘要"><a href="#配置Hexo站点文章摘要" class="headerlink" title="配置Hexo站点文章摘要"></a>配置Hexo站点文章摘要</h4><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">scroll_to_more: true #点击阅读全文后是否跳到<!--more-->标记处,设为false时点击阅读全文可以从头阅读</span><br><span class="line">auto_excerpt: #是否自动截取摘要</span><br><span class="line"> enable: false #设置为true则自动截取150字当做首页摘要</span><br><span class="line"> length: 150 #自动截取的字数</span><br></pre></td></tr></table></figure><h4 id="配置Hexo文章属性显示创建时间、修改时间、分类"><a href="#配置Hexo文章属性显示创建时间、修改时间、分类" class="headerlink" title="配置Hexo文章属性显示创建时间、修改时间、分类"></a>配置Hexo文章属性显示创建时间、修改时间、分类</h4><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">post_meta:</span><br><span class="line"> item_text: false # 设为true 可以一行显示 文章的所有属性</span><br><span class="line"> created_at: true #显示创建时间</span><br><span class="line"> updated_at:</span><br><span class="line"> enabled: true #显示修改的时间</span><br><span class="line"> another_day: true #设true时 如果创建时间和修改时间一样则显示一个时间</span><br><span class="line"> categories: true #显示分类信息</span><br></pre></td></tr></table></figure><h4 id="hexo中的next增加页面阅读统计-字数统计-阅读时长"><a href="#hexo中的next增加页面阅读统计-字数统计-阅读时长" class="headerlink" title="hexo中的next增加页面阅读统计,字数统计,阅读时长"></a>hexo中的next增加页面阅读统计,字数统计,阅读时长</h4><p>新增busuanzi阅读统计</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">busuanzi_count:</span><br><span class="line"> enable: false #设true 开启</span><br><span class="line"> total_visitors: true #总阅读人数 uv数</span><br><span class="line"> total_visitors_icon: user #阅读总人数的图标</span><br><span class="line"> total_views: true #总阅读次数 pv数</span><br><span class="line"> total_views_icon: eye #阅读总次数的图标</span><br><span class="line"> post_views: true #开启内容阅读次数</span><br><span class="line"> post_views_icon: eye #内容页阅读数的图标</span><br></pre></td></tr></table></figure><p>新增字数统计,阅读时长,先安装插件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-symbols-count-time --save</span><br></pre></td></tr></table></figure><p><strong>主题配置信息</strong> 如下:</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">symbols_count_time:</span><br><span class="line"> separated_meta: true # false 会显示一行</span><br><span class="line"> item_text_post: true # 显示属性名称,设为false后只显示图标和统计数字,不显示属性的文字</span><br><span class="line"> item_text_total: true #底部footer是否显示字数统计属性文字</span><br><span class="line"> awl: 4 #计算字数的一个设置,没设置过</span><br><span class="line"> wpm: 275 #一分钟阅读的字数</span><br></pre></td></tr></table></figure><p><strong>站点配置</strong> 新增如下:</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">symbols_count_time:</span><br><span class="line"> #文章内是否显示</span><br><span class="line"> symbols: true</span><br><span class="line"> time: true</span><br><span class="line"> # 网页底部是否显示</span><br><span class="line"> total_symbols: true</span><br><span class="line"> total_time: true</span><br></pre></td></tr></table></figure><h4 id="hexo中next主题给内容页里的代码块新增复制按钮"><a href="#hexo中next主题给内容页里的代码块新增复制按钮" class="headerlink" title="hexo中next主题给内容页里的代码块新增复制按钮"></a>hexo中next主题给内容页里的代码块新增复制按钮</h4><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">codeblock:</span><br><span class="line"> copy_button:</span><br><span class="line"> enable: true #增加复制按钮的开关</span><br><span class="line"> show_result: true #点击复制完后是否显示 复制成功 结果提示</span><br></pre></td></tr></table></figure><h4 id="hexo中next主题文章主页配置微信公众号"><a href="#hexo中next主题文章主页配置微信公众号" class="headerlink" title="hexo中next主题文章主页配置微信公众号"></a>hexo中next主题文章主页配置微信公众号</h4><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line"># Wechat Subscriber</span><br><span class="line">wechat_subscriber:</span><br><span class="line"> enabled: true</span><br><span class="line"> qcode: /images/wechat-qcode.jpg #微信公众号的二维码</span><br><span class="line"> description: 这是我的公众号 #公众号描述文字</span><br></pre></td></tr></table></figure><h4 id="hexo中next主题配置微信-支付宝打赏"><a href="#hexo中next主题配置微信-支付宝打赏" class="headerlink" title="hexo中next主题配置微信,支付宝打赏"></a>hexo中next主题配置微信,支付宝打赏</h4><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line"># Reward</span><br><span class="line">reward_comment: 一毛也是爱~ #打赏描述</span><br><span class="line">wechatpay: /images/wechat_pay.png #微信支付的二维码图片地址</span><br><span class="line">alipay: /images/ali_pay.png #支付宝的地址</span><br><span class="line">#bitcoin: /images/bitcoin.png #这个是设置比特币的...</span><br></pre></td></tr></table></figure><h4 id="hexo中next主题新增-相关文章推荐"><a href="#hexo中next主题新增-相关文章推荐" class="headerlink" title="hexo中next主题新增 相关文章推荐"></a>hexo中next主题新增 相关文章推荐</h4><p>安装推荐文章的插件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-related-popular-posts --save</span><br></pre></td></tr></table></figure><p><strong>主题配置信息</strong> 如下:</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">related_posts:</span><br><span class="line"> enable: true</span><br><span class="line"> title: 相关文章推荐 # 属性的命名</span><br><span class="line"> display_in_home: false #false代表首页不显示</span><br><span class="line"> params:</span><br><span class="line"> maxCount: 5 #最多5条</span><br><span class="line"> #PPMixingRate: 0.0 #可以看github上 这个相关度介绍</span><br><span class="line"> #isDate: true #是否显示 日期</span><br><span class="line"> #isImage: false #是否显示配图</span><br><span class="line"> isExcerpt: false #是否显示摘要</span><br></pre></td></tr></table></figure><h4 id="hexo中next主题的文章原创申明"><a href="#hexo中next主题的文章原创申明" class="headerlink" title="hexo中next主题的文章原创申明"></a>hexo中next主题的文章原创申明</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">post_copyright:</span><br><span class="line"> enable: true #设置true就开启了</span><br><span class="line"> license: <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" rel="external nofollow" target="_blank">CC BY-NC-SA 4.0</a></span><br></pre></td></tr></table></figure><h4 id="hexo中next主题更改code高亮样式"><a href="#hexo中next主题更改code高亮样式" class="headerlink" title="hexo中next主题更改code高亮样式"></a>hexo中next主题更改code高亮样式</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">highlight_theme: normal #可选值为 normal | night | night eighties | night blue | night bright 这几个挑一个喜欢的</span><br></pre></td></tr></table></figure><h4 id="hexo中next主题配置网页body背景动态效果"><a href="#hexo中next主题配置网页body背景动态效果" class="headerlink" title="hexo中next主题配置网页body背景动态效果"></a>hexo中next主题配置网页body背景动态效果</h4><p>4个效果同时只能开启一个</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">canvas_nest: false</span><br><span class="line">three_waves: false</span><br><span class="line">canvas_lines: false</span><br><span class="line">canvas_sphere: false</span><br></pre></td></tr></table></figure><h4 id="配置Hexo站点文章内页面图片点击放大"><a href="#配置Hexo站点文章内页面图片点击放大" class="headerlink" title="配置Hexo站点文章内页面图片点击放大"></a>配置Hexo站点文章内页面图片点击放大</h4><p><a href="http://fancyapps.com/fancybox/3/" target="_blank" rel="noopener">fancybox</a> 一款优秀的弹出框JQuery插件。Github地址为:<a href="https://github.com/theme-next/theme-next-fancybox3" target="_blank" rel="noopener">https://github.com/theme-next/theme-next-fancybox3</a> 。<br>首先在themes/next目录下执行:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git clone https://github.com/theme-next/theme-next-fancybox3 source/lib/fancybox</span><br></pre></td></tr></table></figure><p>在主题配置文件中开启fancybox</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fancybox: true</span><br></pre></td></tr></table></figure><ul><li><strong>注意</strong>:clone完成后,删除 themes/next/source/lib/fancybox 目录下的 .git文件夹、.gitignore文件,以将主题文件作为本地项目管理</li></ul><h4 id="配置fork-me-on-github"><a href="#配置fork-me-on-github" class="headerlink" title="配置fork me on github"></a>配置fork me on github</h4><p>点击<a href="https://github.blog/2008-12-19-github-ribbons/" target="_blank" rel="noopener">这里</a>挑选喜欢的样式,然后复制代码,粘贴到themes/next/layout/_layout.swig文件中</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><div class="headband"></div></span><br></pre></td></tr></table></figure><p>下面,并把代码内href内的地址更换为你的github地址。</p><h4 id="修改文章底部标签样式"><a href="#修改文章底部标签样式" class="headerlink" title="修改文章底部标签样式"></a>修改文章底部标签样式</h4><p>博客底部的标签样式默认为#tag,将其改为:<br><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528145934.jpg" alt=""><br>只需修改模版 /themes/next/layout/_macro/post.swig,搜索rel=”tag”>#,将 # 换成</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><i class="fa fa-tag"></i>。</span><br></pre></td></tr></table></figure><h4 id="版权声明"><a href="#版权声明" class="headerlink" title="版权声明"></a>版权声明</h4><p>要想开启博客的版权功能,需要设置主题配置文件:</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">creative_commons:</span><br><span class="line"> license: by-nc-sa</span><br><span class="line"> sidebar: true</span><br><span class="line"> post: true</span><br></pre></td></tr></table></figure><h3 id="参考文章"><a href="#参考文章" class="headerlink" title="参考文章"></a>参考文章</h3><ul><li><a href="https://blog.csdn.net/marvinboy/article/details/83350437" target="_blank" rel="noopener">https://blog.csdn.net/marvinboy/article/details/83350437</a></li><li><a href="https://www.cnblogs.com/wsmrzx/p/9439470.html" target="_blank" rel="noopener">https://www.cnblogs.com/wsmrzx/p/9439470.html</a></li><li><a href="https://x-d.xyz/2019/03/02/%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2%E6%8A%98%E8%85%BE%E4%B9%8B%E6%97%85/" target="_blank" rel="noopener">个人博客折腾之旅</a></li></ul>]]></content>
<summary type="html">
<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528221339.jpg" alt=""></p>
</summary>
<category term="Hexo" scheme="https://blog.itjk.me/categories/Hexo/"/>
<category term="Hexo" scheme="https://blog.itjk.me/tags/Hexo/"/>
</entry>
<entry>
<title>Hexo系列(3)站点配置文件详解</title>
<link href="https://blog.itjk.me/2019/04/28/Hexo%E7%B3%BB%E5%88%97(3)%E7%AB%99%E7%82%B9%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E8%AF%A6%E8%A7%A3.html"/>
<id>https://blog.itjk.me/2019/04/28/Hexo%E7%B3%BB%E5%88%97(3)%E7%AB%99%E7%82%B9%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E8%AF%A6%E8%A7%A3.html</id>
<published>2019-04-28T07:06:03.000Z</published>
<updated>2020-06-12T06:51:01.729Z</updated>
<content type="html"><![CDATA[<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528220158.jpg" alt=""></p><a id="more"></a><blockquote><p>Hexo 是一款优秀的博客框架,在使用 Hexo 搭建一个属于自己的博客网站后,我们还需要对其进行配置,使得 Hexo 更能满足自己的需求。</p></blockquote><blockquote><p>Hexo有2个配置文件,名字均为 <strong>_config.yml</strong>。一个是<strong>站点配置文件</strong>,位于站点根目录下。另一个是主题配置文件,位于thmems项目的主题文件夹下,,称作<strong>主题配置文件</strong>。</p></blockquote><blockquote><p>本文所说的配置文件,是<strong>站点配置文件</strong>。</p></blockquote><h3 id="1、Site"><a href="#1、Site" class="headerlink" title="1、Site"></a>1、Site</h3><p>网站的个性化描述,大家需要根据自己的实际情况认真填写</p><table><thead><tr><th>Setting</th><th>描述</th></tr></thead><tbody><tr><td>title</td><td>网站标题</td></tr><tr><td>subtitle</td><td>网站副标题</td></tr><tr><td>description</td><td>网站描述</td></tr><tr><td>keywords</td><td>网站关键字</td></tr><tr><td>author</td><td>网站作者</td></tr><tr><td>language</td><td>网站使用的语言,默认是<strong>en</strong> ,中文网站填 <strong>zh-CN</strong></td></tr><tr><td>timezone</td><td>网站使用的时区,默认为 <strong>计算机的预设置</strong>,可以不填</td></tr></tbody></table><h3 id="2、URL"><a href="#2、URL" class="headerlink" title="2、URL"></a>2、URL</h3><p>关于博客文章 URL 的设置,一般不用进行更改</p><table><thead><tr><th>Setting</th><th>描述</th></tr></thead><tbody><tr><td>url</td><td>网站的网址</td></tr><tr><td>root</td><td>网站的根目录, 也是存放文章的目录</td></tr><tr><td>permalink</td><td>文章的链接格式 ,默认为 <strong>:year/:month/:day/:title/</strong></td></tr><tr><td>permalink_defaults</td><td>永久链接中每个段的默认值</td></tr></tbody></table><h3 id="3、Directory"><a href="#3、Directory" class="headerlink" title="3、Directory"></a>3、Directory</h3><p>关于文件夹的设置,也是一般不用进行更改</p><table><thead><tr><th>Setting</th><th>描述</th></tr></thead><tbody><tr><td>source_dir</td><td>资源文件夹 ,存放用户的资源文件,默认为 <strong>source</strong></td></tr><tr><td>public_dir</td><td>公用文件夹 ,存放生成的静态文件,默认为 <strong>public</strong></td></tr><tr><td>tag_dir</td><td>标签目录 ,默认为 <strong>tags</strong></td></tr><tr><td>archive_dir</td><td>档案目录 ,默认为 <strong>archives</strong></td></tr><tr><td>category_dir</td><td>分类目录 ,默认为 <strong>categories</strong></td></tr><tr><td>code_dir</td><td>代码目录 ,默认为 <strong>downloads/code</strong></td></tr><tr><td>i18n_dir</td><td>i18n目录 ,默认为 <strong>:lang</strong></td></tr><tr><td>skip_render</td><td>储存站长验证文件,跳过指定文件的渲染</td></tr></tbody></table><h3 id="4、Writing"><a href="#4、Writing" class="headerlink" title="4、Writing"></a>4、Writing</h3><p>这里是比较常用的写作设置,可以根据自己的写作习惯随时进行调整</p><table><thead><tr><th>Setting</th><th>描述</th></tr></thead><tbody><tr><td>new_post_name</td><td>文章的文件名格式,默认为 <strong>:title.md</strong></td></tr><tr><td>default_layout</td><td>预设的布局模板,默认为 <strong>post</strong></td></tr><tr><td>titlecase</td><td>标题是否使用首字母大写 ,默认为 <strong>false</strong></td></tr><tr><td>external_link</td><td>链接是否在新标签页中打开,默认为 <strong>true</strong></td></tr><tr><td>filename_case</td><td>将文件名转换为 <strong>1</strong> 小写 或 <strong>2</strong> 大写,默认为 <strong>0</strong></td></tr><tr><td>render_drafts</td><td>是否显示渲染草稿,默认为 false</td></tr><tr><td>post_asset_folder</td><td>是否启用 Asset 文件夹,默认为 <strong>false</strong></td></tr><tr><td>relative_link</td><td>是否建立相对于根文件夹的链接,默认为 <strong>false</strong></td></tr><tr><td>future</td><td>是否显示未来文章,默认为 <strong>true</strong></td></tr><tr><td>highlight</td><td>代码块设置</td></tr></tbody></table><h4 id="highlight"><a href="#highlight" class="headerlink" title="highlight"></a>highlight</h4><table><thead><tr><th>Setting</th><th>描述</th></tr></thead><tbody><tr><td>enable</td><td>是否使用代码高亮 ,默认为 <strong>true</strong></td></tr><tr><td>line_number</td><td>是否显示行号 ,默认为 <strong>true</strong></td></tr><tr><td>auto_detect</td><td>是否自动检测语言 ,默认为 <strong>false</strong></td></tr><tr><td>tab_replace</td><td>tab 替代设置</td></tr></tbody></table><h3 id="5、Home-page-setting"><a href="#5、Home-page-setting" class="headerlink" title="5、Home page setting"></a>5、Home page setting</h3><p>首页设置,可以自己决定每页显示的文章数量和显示文章的顺序</p><table><thead><tr><th>Setting</th><th>描述</th></tr></thead><tbody><tr><td>index_generator</td><td>主页设置</td></tr></tbody></table><h4 id="index-generator"><a href="#index-generator" class="headerlink" title="index_generator"></a>index_generator</h4><table><thead><tr><th>Setting</th><th>描述</th></tr></thead><tbody><tr><td>path</td><td>首页的根目录</td></tr><tr><td>per_page</td><td>每页显示文章的数量,默认为 <strong>10</strong></td></tr><tr><td>order_by</td><td>显示文章的顺序,默认为 <strong>-date</strong></td></tr></tbody></table><h3 id="6、Category-amp-Tag"><a href="#6、Category-amp-Tag" class="headerlink" title="6、Category & Tag"></a>6、Category & Tag</h3><p>这里是关于分类和标签的配置</p><table><thead><tr><th>Setting</th><th>描述</th></tr></thead><tbody><tr><td>default_category</td><td>预设分类,默认为 <strong>uncategorized</strong></td></tr><tr><td>category_map</td><td>分类别名</td></tr><tr><td>tag_map</td><td>标签别名</td></tr></tbody></table><h3 id="7、Date-Time-format"><a href="#7、Date-Time-format" class="headerlink" title="7、Date / Time format"></a>7、Date / Time format</h3><p>时间和日期的显示格式,一般没特殊要求的也不需要改</p><table><thead><tr><th>Setting</th><th>描述</th></tr></thead><tbody><tr><td>date_format</td><td>日期格式,默认为 <strong>YYYY-MM-DD</strong></td></tr><tr><td>time_format</td><td>时间格式,默认为 <strong>HH:mm:ss</strong></td></tr></tbody></table><h3 id="8、Pagination"><a href="#8、Pagination" class="headerlink" title="8、Pagination"></a>8、Pagination</h3><p>这里是分页设置,可以自己决定单个页面上显示的文章数量和分页目录</p><table><thead><tr><th>Setting</th><th>描述</th></tr></thead><tbody><tr><td>per_page</td><td>单个页面上显示的文章数量,默认为 <strong>10</strong> ,用 <strong>0</strong> 表示禁用分页</td></tr><tr><td>pagination_dir</td><td>分页目录,默认为 <strong>page</strong></td></tr></tbody></table><h3 id="9、Extensions"><a href="#9、Extensions" class="headerlink" title="9、Extensions"></a>9、Extensions</h3><p>这里可以设置主题类型和插件,之后的文章讲到更换博客主题时需要进行更改</p><table><thead><tr><th>Setting</th><th>描述</th></tr></thead><tbody><tr><td>theme</td><td>博客使用的主题,默认为 <strong>landscape</strong></td></tr></tbody></table><h3 id="10、Deployment"><a href="#10、Deployment" class="headerlink" title="10、Deployment"></a>10、Deployment</h3><p>这里是关于网站部署的配置,常用的有部署类型和部署地址</p><table><thead><tr><th>Setting</th><th>描述</th></tr></thead><tbody><tr><td>deploy</td><td>网站部署配置</td></tr></tbody></table><h4 id="deploy"><a href="#deploy" class="headerlink" title="deploy"></a>deploy</h4><table><thead><tr><th>Setting</th><th>描述</th></tr></thead><tbody><tr><td>type</td><td>网站部署类型</td></tr><tr><td>repo</td><td>网站部署地址</td></tr><tr><td>branch</td><td>网站部署分支,默认为 <strong>master</strong></td></tr></tbody></table><h3 id="【参考资料】"><a href="#【参考资料】" class="headerlink" title="【参考资料】"></a>【参考资料】</h3><ul><li><a href="https://hexo.io/docs/configuration" target="_blank" rel="noopener">https://hexo.io/docs/configuration</a></li><li><a href="https://www.cnblogs.com/wsmrzx/p/9439393.html" target="_blank" rel="noopener">https://www.cnblogs.com/wsmrzx/p/9439393.html</a></li></ul>]]></content>
<summary type="html">
<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528220158.jpg" alt=""></p>
</summary>
<category term="Hexo" scheme="https://blog.itjk.me/categories/Hexo/"/>
<category term="Hexo" scheme="https://blog.itjk.me/tags/Hexo/"/>
</entry>
<entry>
<title>Hexo系列(2)Hexo常用命令详解</title>
<link href="https://blog.itjk.me/2019/04/28/Hexo%E7%B3%BB%E5%88%97(2)Hexo%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%A7%A3.html"/>
<id>https://blog.itjk.me/2019/04/28/Hexo%E7%B3%BB%E5%88%97(2)Hexo%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%A7%A3.html</id>
<published>2019-04-28T06:11:35.000Z</published>
<updated>2020-06-12T06:51:01.729Z</updated>
<content type="html"><![CDATA[<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528220240.jpg" alt=""></p><a id="more"></a><blockquote><p>Hexo 框架可以帮助我们快速创建一个属于自己的博客网站,熟悉 Hexo 框架提供的命令有利于我们管理博客</p></blockquote><h3 id="1、hexo-init"><a href="#1、hexo-init" class="headerlink" title="1、hexo init"></a>1、hexo init</h3><p><strong>hexo init</strong> 命令用于初始化本地文件夹为网站的根目录</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo init [folder]</span><br></pre></td></tr></table></figure><ul><li><strong>folder</strong> 可选参数,用以指定初始化目录的路径,若无指定则默认为当前目录</li></ul><h3 id="2、hexo-new"><a href="#2、hexo-new" class="headerlink" title="2、hexo new"></a>2、hexo new</h3><p><strong>hexo new</strong> 命令用于新建文章,一般可以简写为 <strong>hexo n</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo new [layout] <title></span><br></pre></td></tr></table></figure><ul><li><strong>layout</strong> 可选参数,用以指定文章类型,若无指定则默认由配置文件中的 default_layout 选项决定</li><li><strong>title</strong> 必填参数,用以指定文章标题,如果参数值中含有空格,则需要使用双引号包围</li></ul><h3 id="3、hexo-generate"><a href="#3、hexo-generate" class="headerlink" title="3、hexo generate"></a>3、hexo generate</h3><p><strong>hexo generate</strong> 命令用于生成静态文件,一般可以简写为 hexo g</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo generate [-d]</span><br></pre></td></tr></table></figure><ul><li><strong>-d</strong> 选项,指定生成后部署,与 hexo d -g 等价<br>详细信息请参考:<a href="https://hexo.io/docs/generating" target="_blank" rel="noopener">https://hexo.io/docs/generating</a></li></ul><h3 id="4、hexo-server"><a href="#4、hexo-server" class="headerlink" title="4、hexo server"></a>4、hexo server</h3><p><strong>hexo server</strong> 命令用于启动本地服务器,一般可以简写为 <strong>hexo s</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo server [-p] [-i] [-s]</span><br></pre></td></tr></table></figure><ul><li><strong>-p</strong> 选项,指定服务器端口,默认为 4000</li><li><strong>-i</strong> 选项,指定服务器 IP 地址,默认为 0.0.0.0</li><li><strong>-s</strong> 选项,静态模式 ,仅提供 public 文件夹中的文件并禁用文件监视</li></ul><p>说明 :运行服务器前需要安装 hexo-server 插件,一般Hexo自带</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-server --save</span><br></pre></td></tr></table></figure><p>详细信息请参考:<a href="https://hexo.io/docs/server.html" target="_blank" rel="noopener">https://hexo.io/docs/server.html</a></p><h3 id="5、hexo-deploy"><a href="#5、hexo-deploy" class="headerlink" title="5、hexo deploy"></a>5、hexo deploy</h3><p><strong>hexo deploy</strong> 命令用于部署网站,一般可以简写为 <strong>hexo d</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo deploy</span><br></pre></td></tr></table></figure><ul><li><strong>-g</strong> 选项,指定生成后部署,与 hexo g -d 等价</li></ul><p><strong>说明</strong> :部署前需要修改 _config.yml 配置文件,下面以 git 为例进行说明</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">deploy:</span><br><span class="line"> type: git</span><br><span class="line"> repo: <repository url></span><br><span class="line"> branch: master</span><br><span class="line"> message: 自定义提交消息,默认为Site updated: {{ now('YYYY-MM-DD HH:mm:ss') }}</span><br></pre></td></tr></table></figure><p>详细信息请参考:<a href="https://hexo.io/docs/deployment.html" target="_blank" rel="noopener">https://hexo.io/docs/deployment.html</a></p><h3 id="6、hexo-clean"><a href="#6、hexo-clean" class="headerlink" title="6、hexo clean"></a>6、hexo clean</h3><p><strong>hexo clean</strong> 命令用于清理缓存文件,是一个比较常用的命令</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo clean</span><br></pre></td></tr></table></figure><p>网站显示异常时可尝试此操作</p><h3 id="7、Option"><a href="#7、Option" class="headerlink" title="7、Option"></a>7、Option</h3><h4 id="(1)hexo-–safe"><a href="#(1)hexo-–safe" class="headerlink" title="(1)hexo –safe"></a>(1)hexo –safe</h4><p><strong>hexo –safe</strong> 表示安全模式,用于禁用加载插件和脚本</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo --safe</span><br></pre></td></tr></table></figure><p>安装新插件时遇到问题可尝试此操作</p><h4 id="(2)hexo-–debug"><a href="#(2)hexo-–debug" class="headerlink" title="(2)hexo –debug"></a>(2)hexo –debug</h4><p><strong>hexo –debug</strong> 表示调试模式,用于将消息详细记录到终端和 debug.log 文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo --debug</span><br></pre></td></tr></table></figure><h4 id="(3)hexo-–silent"><a href="#(3)hexo-–silent" class="headerlink" title="(3)hexo –silent"></a>(3)hexo –silent</h4><p><strong>hexo –silent</strong> 表示静默模式,用于静默输出到终端</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo --silent</span><br></pre></td></tr></table></figure><h3 id="【参考资料】"><a href="#【参考资料】" class="headerlink" title="【参考资料】"></a>【参考资料】</h3><ul><li><a href="https://hexo.io/docs/commands" target="_blank" rel="noopener">https://hexo.io/docs/commands</a></li><li><a href="https://www.cnblogs.com/wsmrzx/p/9439448.html" target="_blank" rel="noopener">https://www.cnblogs.com/wsmrzx/p/9439448.html</a></li></ul>]]></content>
<summary type="html">
<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528220240.jpg" alt=""></p>
</summary>
<category term="Hexo" scheme="https://blog.itjk.me/categories/Hexo/"/>
<category term="Hexo" scheme="https://blog.itjk.me/tags/Hexo/"/>
</entry>
<entry>
<title>Hexo系列(1)Hexo和Github搭建博客</title>
<link href="https://blog.itjk.me/2019/04/28/Hexo%E7%B3%BB%E5%88%97(1)Hexo%E5%92%8CGithub%E6%90%AD%E5%BB%BA%E5%8D%9A%E5%AE%A2.html"/>
<id>https://blog.itjk.me/2019/04/28/Hexo%E7%B3%BB%E5%88%97(1)Hexo%E5%92%8CGithub%E6%90%AD%E5%BB%BA%E5%8D%9A%E5%AE%A2.html</id>
<published>2019-04-28T05:57:07.000Z</published>
<updated>2020-06-12T06:51:01.729Z</updated>
<content type="html"><![CDATA[<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528205023.jpg" alt=""></p><a id="more"></a><p>搭建本博客涉及到以下技术或工具,请知悉。</p><ol><li><a href="https://pages.github.com/" target="_blank" rel="noopener">Github Pages</a>——是Github提供的一种免费的静态网页托管服务,可以用来托管博客、项目官网等静态网页。支持 Jekyll、Hugo、Hexo等 编译静态资源。</li><li><a href="https://hexo.io/zh-cn/" target="_blank" rel="noopener">Hexo</a>——是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。</li><li>本博客的所有操作均基于windows,其他平台类似。</li></ol><h3 id="一、Hexo-环境配置"><a href="#一、Hexo-环境配置" class="headerlink" title="一、Hexo 环境配置"></a>一、Hexo 环境配置</h3><h4 id="1、安装Git"><a href="#1、安装Git" class="headerlink" title="1、安装Git"></a>1、安装Git</h4><p><a href="https://git-scm.com/" target="_blank" rel="noopener">Git</a> 是一个分布式版本控制系统,用于项目的版本控制管理。对于Git的使用,可以学习一下<a href="https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000" target="_blank" rel="noopener">廖雪峰的Git教程</a>。</p><p>下载地址:<a href="https://git-scm.com/download/win" target="_blank" rel="noopener">https://git-scm.com/download/win</a><br>下载完成后,双击安装包,一直选择默认就可,安装好后,在命令行输入以下命令查看git版本号:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git --version</span><br></pre></td></tr></table></figure><p>如果正确显示版本号,则安装成功。<br>对于windows用户,由于众所周知的原因从上面的链接下载git for windows最好挂上一个代理,否则下载速度十分缓慢。也可以参考<a href="https://github.com/waylau/git-for-win" target="_blank" rel="noopener">这个页面</a>,收录了存储于百度云的下载地址。</p><h4 id="2、安装Node-js"><a href="#2、安装Node-js" class="headerlink" title="2、安装Node.js"></a>2、安装Node.js</h4><p><a href="https://nodejs.org/" target="_blank" rel="noopener">NodeJS</a> 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 Hexo是基于Node.JS驱动的一款博客框架。</p><p>下载地址:<a href="http://nodejs.org/" target="_blank" rel="noopener">http://nodejs.org/</a><br>选择 LTS 长期支持版就可,下载后,双击安装包,勾选Add to PATH选项,其他的均默认就可,,安装好后,在命令行输入以下命令查看Node.js版本号:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">node -v</span><br></pre></td></tr></table></figure><p>如果正确显示版本号,则安装成功。</p><h4 id="3、-安装Hexo"><a href="#3、-安装Hexo" class="headerlink" title="3、 安装Hexo"></a>3、 安装Hexo</h4><p>上述环境搭建成功之后,我们就可以使用npm安装Hexo。在命令行输入已下命令:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ npm install -g hexo-cli</span><br></pre></td></tr></table></figure><p>命令行输入以下命令查看Hexo框架的版本号:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo -v</span><br></pre></td></tr></table></figure><p>如果正确显示版本号,则安装成功。<br>注意:由于众所周知的原因,国内使用npm的官方镜像源速度会很慢,甚至连接不上。建议使用国内的 <a href="https://npm.taobao.org/" target="_blank" rel="noopener">淘宝镜像源https://npm.taobao.org/</a></p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line"># 设置npm源为淘宝镜像</span><br><span class="line">npm config set registry http://registry.npm.taobao.org/</span><br><span class="line"># 还原为官方镜像源</span><br><span class="line">npm config set registry https://registry.npmjs.org/</span><br></pre></td></tr></table></figure><p>以后就可以使用cnpm命令替换npm命令。</p><h3 id="二、配置博客本地仓库"><a href="#二、配置博客本地仓库" class="headerlink" title="二、配置博客本地仓库"></a>二、配置博客本地仓库</h3><p>安装 Hexo 完成后,打开命令行,cd 到一个适当的目录,如:c:\workspace\blog,执行下列命令,Hexo 将会在该文件夹中新建所需要的文件。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">hexo init </span><br><span class="line">npm install</span><br></pre></td></tr></table></figure><p>blog 目录即为本地博客存放的文件夹。<br>创建完成后,此文件夹的目录结构如下:</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">├── _config.yml # 网站的配置信息,您可以在此配置大部分的参数。 </span><br><span class="line">├── package.json</span><br><span class="line">├── scaffolds # 模版文件夹</span><br><span class="line">├── source # 资源文件夹,除 _posts 文件,其他以下划线_开头的文件或者文件夹不会被编译打包到public文件夹</span><br><span class="line">| ├── _drafts # 草稿文件</span><br><span class="line">| └── _posts # 文章Markdowm文件 </span><br><span class="line">└── themes # 主题文件夹</span><br></pre></td></tr></table></figure><p>本地预览博客效果:<br>运行 hexo s 命令,其中s是server的缩写,在浏览器输入<a href="http://localhost:4000" target="_blank" rel="noopener">http://localhost:4000</a> 预览博客效果。默认使用的主题是landscape。你可以更换你喜欢的主题。</p><p>至此,你本地的博客就已经成功搭建了,下面就是将其部署到Github Page上了。</p><h3 id="三、-配置Github-Pages-仓库"><a href="#三、-配置Github-Pages-仓库" class="headerlink" title="三、 配置Github Pages 仓库"></a>三、 配置Github Pages 仓库</h3><h4 id="1-注册Github"><a href="#1-注册Github" class="headerlink" title="1. 注册Github"></a>1. 注册Github</h4><p>首先如果你还没有 Github 账号,需要先<a href="https://github.com/join?source=header-home" target="_blank" rel="noopener">注册</a>一个。<br>注册完成之后,在官方的引导页面点击Start a project或者下面的new repository新建一个仓库。需要注意的是,Github 仅能使用一个同名仓库的代码托管一个静态站点。所以,你创建的用来作为Github page的仓库的名称必须为:用户名.github.io。<br>然后打开仓库,创建一个index.html文件。<br>在浏览器访问http://你的用户名.github.io 就可以看到刚创建的index.html网页效果。</p><h4 id="2-配置SSH-key"><a href="#2-配置SSH-key" class="headerlink" title="2. 配置SSH key"></a>2. 配置SSH key</h4><p>要使用git工具将本地博客部署到GithubPage上,需要配置一下SSH key。git bash中输入以下命令:</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line"># 全局配置本地账户</span><br><span class="line">git config --global user.name "用户名"</span><br><span class="line">git config --global user.email "邮箱地址"</span><br><span class="line"># 生成密钥</span><br><span class="line">ssh-keygen -t rsa -C '上面的邮箱'</span><br></pre></td></tr></table></figure><p>按照提示完成密钥的生成。通过查看本地~/.ssh/id_rsa.pub 文件内容,获取到你的 SSH key。<br>首次使用,还需要确认并添加主机到本地SSH可信列表。git bash执行以下命令:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -T git@github.com</span><br></pre></td></tr></table></figure><p>若返回 Hi xxx! You’ve successfully authenticated, but GitHub does not provide shell access. 内容,则证明添加成功。<br>最后,我们还需要在github上添加刚刚生成的SSH key。在github的设置中,创建一个新的SSH key,将前面在本地id_rsa.pub文件中生成的key填到SSH key中。</p><h4 id="3-部署到Github-pages"><a href="#3-部署到Github-pages" class="headerlink" title="3. 部署到Github pages"></a>3. 部署到Github pages</h4><p>Hexo支持 Git/Heroku/Rsync/OpenShift/FTPSync 等部署方式,选择git来部署的话,需要安装hexo-deployer-git插件。</p><p>第一步,在本地安装部署插件<a href="https://github.com/hexojs/hexo-deployer-git" target="_blank" rel="noopener">hexo-deployer-git</a>,执行以下命令行</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-deployer-git --save</span><br></pre></td></tr></table></figure><p>第二步,打开本地项目根目录下的_config.yml配置文件,在文件末尾,填上如下配置。</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">deploy:</span><br><span class="line"> type: git</span><br><span class="line"> repo: git@github.com:用户名/用户名.github.io.git</span><br><span class="line"> branch: master</span><br></pre></td></tr></table></figure><p>上述配置项中,type是部署方式,repo是要部署到的目的仓库,branch是分支。<br>然后执行以下命令,就可以部署上传了。以下 g 是 generate 缩写,用于生成本地静态资源,d是deploy的缩写,用于部署到远程仓库:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo g -d</span><br></pre></td></tr></table></figure><p>部署前最好能先执行一下 hexo clean 命令,清除缓存文件 (db.json) 和已生成的静态文件 (public)。在某些情况(尤其是更换主题后),如果发现您对站点的更改无论如何也不生效,您可能需要运行该命令。<br>稍等一会,在浏览器访问网址: https://用户名.github.io 就会看到你的博客啦!!<br>详细的Hexo常用命令可参考<a href="https://hexo.io/zh-cn/docs/" target="_blank" rel="noopener">Hexo官方文档</a>。</p><h3 id="四、参考文档:"><a href="#四、参考文档:" class="headerlink" title="四、参考文档:"></a>四、参考文档:</h3><ol><li><a href="https://juejin.im/post/5c4730c9f265da61616efeec" target="_blank" rel="noopener">超详细Hexo+Github Page搭建技术博客教程【持续更新】</a></li><li><a href="https://www.cnblogs.com/wsmrzx/p/9439284.html" target="_blank" rel="noopener">Hexo系列(一) 搭建博客网站</a></li><li><a href="https://x-d.xyz/2019/03/02/%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2%E6%8A%98%E8%85%BE%E4%B9%8B%E6%97%85/" target="_blank" rel="noopener">个人博客折腾之旅</a></li></ol>]]></content>
<summary type="html">
<p><img src="https://raw.githubusercontent.com/LicV587/img/master/picgo/20190528205023.jpg" alt=""></p>
</summary>
<category term="Hexo" scheme="https://blog.itjk.me/categories/Hexo/"/>
<category term="Hexo" scheme="https://blog.itjk.me/tags/Hexo/"/>
</entry>
</feed>