-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
4589 lines (4045 loc) · 730 KB
/
search.xml
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
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>Linux查看系统资源</title>
<url>/linux/Linux%E6%9F%A5%E7%9C%8B%E7%B3%BB%E7%BB%9F%E8%B5%84%E6%BA%90/</url>
<content><![CDATA[<h1 id="free"><a href="#free" class="headerlink" title="free"></a>free</h1><p>查看内存使用情况</p>
<h1 id="uname"><a href="#uname" class="headerlink" title="uname"></a>uname</h1><p>查看系统与内核相关信息</p>
<h1 id="uptime"><a href="#uptime" class="headerlink" title="uptime"></a>uptime</h1><p>查看洗启动时间与工作负载</p>
<h1 id="netstat"><a href="#netstat" class="headerlink" title="netstat"></a>netstat</h1><p>跟踪网络</p>
<h1 id="dmesg"><a href="#dmesg" class="headerlink" title="dmesg"></a>dmesg</h1><p>分析内核产生的信息</p>
<h1 id="vmstat"><a href="#vmstat" class="headerlink" title="vmstat"></a>vmstat</h1><p>检测CPU 内存 硬盘输入输出状态</p>
<h1 id="fuser"><a href="#fuser" class="headerlink" title="fuser"></a>fuser</h1><p>找出真正使用该文件的程序</p>
<h1 id="lsof"><a href="#lsof" class="headerlink" title="lsof"></a>lsof</h1><p>列出被进程所打开的 文件名</p>
]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux命令</tag>
</tags>
</entry>
<entry>
<title>java 面向对象</title>
<url>/java/java%20%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/</url>
<content><![CDATA[<img src="/java/java%20%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/java.png" class="">
]]></content>
<categories>
<category>java</category>
</categories>
<tags>
<tag>java</tag>
</tags>
</entry>
<entry>
<title>linux中的工作管理</title>
<url>/linux/linux%E4%B8%AD%E7%9A%84%E5%B7%A5%E4%BD%9C%E7%AE%A1%E7%90%86/</url>
<content><![CDATA[<p>工作管理(job controll),在 bash下(登录系统取得的 bash shell),对自身的多个工作的管理</p>
<ul>
<li><p>将命令扔到后台执行: &</p>
<ul>
<li>此时会得到job number和pid</li>
<li>需要处理后台工作的输出信息,防止影响前台操作</li>
</ul>
</li>
<li><p>查看目前的后台工作状态:jobs</p>
</li>
<li><p>将目前的工作丢到后台中暂停: ctrl + z</p>
</li>
<li><p>将后台暂停的工作变成运行状态: bg %jobnumber</p>
</li>
<li><p>将后台工作拿到前台来处理: fg %jobnumber</p>
</li>
</ul>
]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux命令</tag>
</tags>
</entry>
<entry>
<title>Linux中的进程管理</title>
<url>/linux/Linux%E4%B8%AD%E7%9A%84%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86/</url>
<content><![CDATA[<h1 id="查看"><a href="#查看" class="headerlink" title="查看"></a>查看</h1><h2 id="ps"><a href="#ps" class="headerlink" title="ps"></a>ps</h2><p>使用ps查看某个时间点的进程运行情况。ps auxf -> 列出类似于进程树的的程序显示</p>
<h2 id="top"><a href="#top" class="headerlink" title="top"></a>top</h2><p>使用top动态查看进程的变化。top [-d 数字] | top [-bnp]</p>
<p>参数:</p>
<p>-d:配置界面更新的秒数</p>
<p>-b:以批处理的方式处理输出 </p>
<p>-n:与-b搭配,配置执行几次top输出的结果</p>
<p>-p:指定监控的pid</p>
<p>在top执行过程中可以使用的命令</p>
<p>?:显示top中可以输入的按键命令</p>
<p>P:以CPU的使用资源排序</p>
<p>M:以MEM的使用资源排序</p>
<p>N:以PID排序</p>
<p>T:以使用的CPU时间累积(time+)排序</p>
<p>k:给某个PID信号</p>
<p>r:重新配置PID的nice值</p>
<p>q:离开top</p>
<h2 id="pstree"><a href="#pstree" class="headerlink" title="pstree"></a>pstree</h2><p>查看进程间关系。pstree [-A|-U] -[up]</p>
<p>参数:</p>
<p>-A:用ASCII字符来连接进程间关系</p>
<p>-U:用utf-8字符来连接进程间关系</p>
<p>-p:列出PID</p>
<p>-u:列出每个进程所属账号</p>
<h1 id="管理"><a href="#管理" class="headerlink" title="管理"></a>管理</h1><p>通过信号来管理进程</p>
<h2 id="kill"><a href="#kill" class="headerlink" title="kill"></a>kill</h2><p>kill -singnal PID</p>
<h2 id="killall"><a href="#killall" class="headerlink" title="killall"></a>killall</h2><p>killall -signal 命令名称</p>
]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux命令</tag>
</tags>
</entry>
<entry>
<title>java 修饰符</title>
<url>/java/java%20%E4%BF%AE%E9%A5%B0%E7%AC%A6/</url>
<content><![CDATA[<img src="/java/java%20%E4%BF%AE%E9%A5%B0%E7%AC%A6/java.png" class="">
]]></content>
<categories>
<category>java</category>
</categories>
<tags>
<tag>java</tag>
</tags>
</entry>
<entry>
<title>Maven</title>
<url>/maven/Maven/</url>
<content><![CDATA[<h1 id="1-Maven-介绍"><a href="#1-Maven-介绍" class="headerlink" title="1 Maven 介绍"></a>1 Maven 介绍</h1><h2 id="1-1-是什么"><a href="#1-1-是什么" class="headerlink" title="1.1 是什么"></a>1.1 是什么</h2><p>Maven 是一个项目管理工具,可被用于构建和管理各种项目。例如java, C#,Ruby,Scala 和其他语言编写的项目。</p>
<p>Maven 基于项目对象模型(缩写:POM),利用一个中央信息片断能管理一个项目的构建(编译、测试、运行、打包、安装、部署)、依赖管理等。</p>
<h2 id="1-2-Maven-特点"><a href="#1-2-Maven-特点" class="headerlink" title="1.2 Maven 特点"></a>1.2 Maven 特点</h2><ul>
<li>项目设置遵循统一的规则。</li>
<li>任意工程中共享。</li>
<li>依赖管理包括自动更新。</li>
<li>一个庞大且不断增长的库。</li>
<li>可扩展,能够轻松编写 Java 或脚本语言的插件。</li>
<li>只需很少或不需要额外配置即可即时访问新功能。</li>
<li><strong>基于模型的构建</strong> − Maven 能够将任意数量的项目构建到预定义的输出类型中,如 JAR,WAR 或基于项目元数据的分发,而不需要在大多数情况下执行任何脚本。</li>
<li><strong>项目信息的一致性站点</strong> − 使用与构建过程相同的元数据,Maven 能够生成一个网站或PDF,包括您要添加的任何文档,并添加到关于项目开发状态的标准报告中。</li>
<li><strong>发布管理和发布单独的输出</strong> − Maven 将不需要额外的配置,就可以与源代码管理系统(如 Subversion 或 Git)集成,并可以基于某个标签管理项目的发布。它也可以将其发布到分发位置供其他项目使用。Maven 能够发布单独的输出,如 JAR,包含其他依赖和文档的归档,或者作为源代码发布。</li>
<li><strong>向后兼容性</strong> − 您可以很轻松的从旧版本 Maven 的多个模块移植到 Maven 3 中。</li>
<li>子项目使用父项目依赖时,正常情况子项目应该继承父项目依赖,无需使用版本号,</li>
<li><strong>并行构建</strong> − 编译的速度能普遍提高20 - 50 %。</li>
<li><strong>更好的错误报告</strong> − Maven 改进了错误报告,它为您提供了 Maven wiki 页面的链接,您可以点击链接查看错误的完整描述。</li>
</ul>
<h2 id="1-3-项目目录结构"><a href="#1-3-项目目录结构" class="headerlink" title="1.3 项目目录结构"></a>1.3 项目目录结构</h2><p>Maven 提倡按照如下标准目录结构进行配置:</p>
<table>
<thead>
<tr>
<th align="left">目录</th>
<th align="left">目的</th>
</tr>
</thead>
<tbody><tr>
<td align="left">${basedir}</td>
<td align="left">存放 pom.xml 和所有的子目录</td>
</tr>
<tr>
<td align="left">${basedir}/src/main/java</td>
<td align="left">项目的 java 源代码</td>
</tr>
<tr>
<td align="left">${basedir}/src/main/resources</td>
<td align="left">项目的资源,比如说 property 文件,springmvc.xml</td>
</tr>
<tr>
<td align="left">${basedir}/src/test/java</td>
<td align="left">项目的测试类,比如说 Junit 代码</td>
</tr>
<tr>
<td align="left">${basedir}/src/test/resources</td>
<td align="left">测试用的资源</td>
</tr>
<tr>
<td align="left">${basedir}/src/main/webapp/WEB-INF</td>
<td align="left">web 应用文件目录,web 项目的信息,比如存放 web.xml、本地图片、jsp 视图页面</td>
</tr>
<tr>
<td align="left">${basedir}/target</td>
<td align="left">打包输出目录</td>
</tr>
<tr>
<td align="left">${basedir}/target/classes</td>
<td align="left">编译输出目录</td>
</tr>
<tr>
<td align="left">${basedir}/target/test-classes</td>
<td align="left">测试编译输出目录</td>
</tr>
<tr>
<td align="left">Test.java</td>
<td align="left">Maven 只会自动运行符合该命名规则的测试类</td>
</tr>
<tr>
<td align="left">~/.m2/repository</td>
<td align="left">Maven 默认的本地仓库目录位置</td>
</tr>
</tbody></table>
<h1 id="2-Maven-POM"><a href="#2-Maven-POM" class="headerlink" title="2 Maven POM"></a>2 Maven POM</h1><p>Maven 使用 POM(Project Object Model,项目对象模型)用来描述项目基本信息。</p>
<p>执行项目时,Maven 会在当前目录中找并读取 pom.xml 文件,获取所需的配置信息来执行。</p>
<p>所有 pom.xml 都需要有 project 元素和三个必需字段:groupId,artifactId,version。</p>
<table>
<thead>
<tr>
<th align="left">节点</th>
<th align="left">描述</th>
</tr>
</thead>
<tbody><tr>
<td align="left">project</td>
<td align="left">工程的根标签。</td>
</tr>
<tr>
<td align="left">modelVersion</td>
<td align="left">模型版本需要设置为 4.0。</td>
</tr>
<tr>
<td align="left">groupId</td>
<td align="left">这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.companyname.project-group 拥有所有的和银行相关的项目。</td>
</tr>
<tr>
<td align="left">artifactId</td>
<td align="left">这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。</td>
</tr>
<tr>
<td align="left">version</td>
<td align="left">这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。例如:<code>com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1</code></td>
</tr>
</tbody></table>
<h1 id="3-Maven-构建生命周期"><a href="#3-Maven-构建生命周期" class="headerlink" title="3 Maven 构建生命周期"></a>3 Maven 构建生命周期</h1><p>Maven 的典型生命周期由下面几个阶段组成:</p>
<table>
<thead>
<tr>
<th align="left">阶段</th>
<th align="left">处理</th>
<th align="left">描述</th>
</tr>
</thead>
<tbody><tr>
<td align="left">验证 validate</td>
<td align="left">验证项目</td>
<td align="left">验证项目是否正确且所有必须信息是可用的</td>
</tr>
<tr>
<td align="left">编译 compile</td>
<td align="left">执行编译</td>
<td align="left">源代码编译在此阶段完成</td>
</tr>
<tr>
<td align="left">测试 Test</td>
<td align="left">测试</td>
<td align="left">使用适当的单元测试框架(例如JUnit)运行测试。</td>
</tr>
<tr>
<td align="left">包装 package</td>
<td align="left">打包</td>
<td align="left">创建JAR/WAR包如在 pom.xml 中定义提及的包</td>
</tr>
<tr>
<td align="left">检查 verify</td>
<td align="left">检查</td>
<td align="left">对集成测试的结果进行检查,以保证质量达标</td>
</tr>
<tr>
<td align="left">安装 install</td>
<td align="left">安装</td>
<td align="left">安装打包的项目到本地仓库,以供其他项目使用</td>
</tr>
<tr>
<td align="left">部署 deploy</td>
<td align="left">部署</td>
<td align="left">拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程</td>
</tr>
</tbody></table>
<h1 id="4-settings-xml"><a href="#4-settings-xml" class="headerlink" title="4 settings.xml"></a>4 settings.xml</h1><p>settings.xml 是 maven 的全局配置文件,pom.xml 是所在项目的局部配置文件。Settings.xml中包含类似本地仓储位置、修改远程仓储服务器、认证信息等配置。</p>
<p>settings.xml文件一般存在于两个位置:</p>
<ul>
<li>全局配置: ${M2_HOME}/conf/settings.xml</li>
<li>用户配置: user.home/.m2/settings.xml (用户配置优先于全局配置)</li>
</ul>
<p>配置优先级从高到低:pom.xml> user settings > global settings</p>
<h1 id="5-Maven-仓库"><a href="#5-Maven-仓库" class="headerlink" title="5 Maven 仓库"></a>5 Maven 仓库</h1><p>Maven 项目中依赖的第三方库所在的位置叫做仓库。</p>
<p>Maven 仓库有三种类型:</p>
<ul>
<li><p>本地(local)</p>
<ul>
<li><p>Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。</p>
<figure class="highlight xml"><table><tr><td class="code"><pre><span class="line"><span class="tag"><<span class="name">settings</span> <span class="attr">xmlns</span>=<span class="string">"http://maven.apache.org/SETTINGS/1.0.0"</span></span></span><br><span class="line"><span class="tag"> <span class="attr">xmlns:xsi</span>=<span class="string">"http://www.w3.org/2001/XMLSchema-instance"</span></span></span><br><span class="line"><span class="tag"> <span class="attr">xsi:schemaLocation</span>=<span class="string">"http://maven.apache.org/SETTINGS/1.0.0 </span></span></span><br><span class="line"><span class="string"><span class="tag"> http://maven.apache.org/xsd/settings-1.0.0.xsd"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">localRepository</span>></span>C:/MyLocalRepository<span class="tag"></<span class="name">localRepository</span>></span></span><br><span class="line"><span class="tag"></<span class="name">settings</span>></span></span><br></pre></td></tr></table></figure></li>
</ul>
</li>
<li><p>中央(central)</p>
<ul>
<li>这个仓库由 Maven 社区管理,包含了大量常用的库。</li>
<li>不需要配置,需要通过网络才能访问。</li>
</ul>
</li>
<li><p>远程(remote,私服)</p>
<ul>
<li>开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件</li>
</ul>
</li>
</ul>
<h1 id="6-Maven-快照"><a href="#6-Maven-快照" class="headerlink" title="6 Maven 快照"></a>6 Maven 快照</h1><p>快照是模块的临时版本。maven 根据模块的版本号( pom 文件中的 version )中是否带有<code>-SNAPSHOT</code>来判断是快照版本还是正式版本。</p>
<ul>
<li><p>对于快照版本,执行 mvn deploy 时会自动发布到快照版本库中,并覆盖老的快照版本。依赖快照版本的模块,在不更改版本号的情况下,编译打包时,maven 自动从镜像服务器上下载最新的快照版本。</p>
</li>
<li><p>对于正式发布版本,执行 mvn deploy 时会自动发布到正式版本库中。依赖正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块,则<strong>不会</strong>主动去镜像服务器上下载。</p>
</li>
</ul>
<p>在开发阶段,使用快照版本进行开发,能够使依赖快照版本的模块不需要修改 pom 文件版本号也能下载新的版本,从而提升开发效率。</p>
]]></content>
<categories>
<category>Maven</category>
</categories>
<tags>
<tag>Maven</tag>
</tags>
</entry>
<entry>
<title>npx</title>
<url>/npm/npx/</url>
<content><![CDATA[<h1 id="1-npx-是什么"><a href="#1-npx-是什么" class="headerlink" title="1 npx 是什么"></a>1 npx 是什么</h1><p>npx 是 npm v5.2.0 引入的命令,即 npm 自带的命令。</p>
<h1 id="2-npx-有什么作用"><a href="#2-npx-有什么作用" class="headerlink" title="2 npx 有什么作用"></a>2 npx 有什么作用</h1><p>通过 npx 我们可以直接执行依赖包里面的二进制文件,而无需给出依赖包路径,如:</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">npx webpack --config webpack.prod.js</span><br></pre></td></tr></table></figure>
<p>没有 npx 时,当我们想在命令行直接使用依赖包时,需要给出依赖包的路径,如:</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">.\node_modules\.bin\webpack --config webpack.prod.js</span><br></pre></td></tr></table></figure>
<h1 id="3-npx-典型使用场景"><a href="#3-npx-典型使用场景" class="headerlink" title="3 npx 典型使用场景"></a>3 npx 典型使用场景</h1><h2 id="3-1-一次性使用的命令"><a href="#3-1-一次性使用的命令" class="headerlink" title="3.1 一次性使用的命令"></a>3.1 一次性使用的命令</h2><p>对于一些一次性命令,可以直接使用npx,如:</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">npx create-react-app my-app</span><br></pre></td></tr></table></figure>
<p>指定模块运行版本,如下面命令指定 node 的 0.12.8 版本来运行命令 :</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">npx [email protected] -v</span><br></pre></td></tr></table></figure>
<h1 id="4-npx-原理"><a href="#4-npx-原理" class="headerlink" title="4 npx 原理"></a>4 npx 原理</h1><p>npx 运行时,会从 node_modeule/.bin 路径和环境变量 $PATH 中,检测命令是否存在,当不存在时,会直接帮我们安装。</p>
<p>npx 甚至支持运行远程仓库的可执行文件,如:</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">npx github:piuccio/cowsay hello</span><br></pre></td></tr></table></figure>
<p>再比如 <code>npx http-server</code> 可以一句话帮你开启一个静态服务器:</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">npx http-server</span><br></pre></td></tr></table></figure>
<h1 id="5-npx-高级用法"><a href="#5-npx-高级用法" class="headerlink" title="5 npx 高级用法"></a>5 npx 高级用法</h1><h3 id="5-1-强制使用本地模块"><a href="#5-1-强制使用本地模块" class="headerlink" title="5.1 强制使用本地模块"></a>5.1 强制使用本地模块</h3><p>使用 <code>--no-install</code> 参数,不下载远程模块, 强制使用本地模块,当本地不存在此模块时,会报错。</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">npx --no-install http-server</span><br></pre></td></tr></table></figure>
<h3 id="5-2-强制安装远程模块"><a href="#5-2-强制安装远程模块" class="headerlink" title="5.2 强制安装远程模块"></a>5.2 强制安装远程模块</h3><p>使用 <code>--ignore-existing</code> 参数忽略本地同名模块,强制使用远程模块。</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">npx --ignore-existing create-react-app my-react-app</span><br></pre></td></tr></table></figure>
<h3 id="5-3-指定模块的安装版本"><a href="#5-3-指定模块的安装版本" class="headerlink" title="5.3 指定模块的安装版本"></a>5.3 指定模块的安装版本</h3><p>使用 <code>-p</code> 参数可以指定 npx 所要安装的模块。下面命令先安装 node ,再执行<code>node -v</code>。 </p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">npx -p [email protected] node -v </span><br></pre></td></tr></table></figure>
<p><code>-p</code> 参数还可以安装多个模块。</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">npx -p lolcatjs -p cowsay [command]</span><br></pre></td></tr></table></figure>
<h3 id="5-4-执行多条命令"><a href="#5-4-执行多条命令" class="headerlink" title="5.4 执行多条命令"></a>5.4 执行多条命令</h3><p>如果 npx 安装多个模块,默认情况下,所执行的命令之中,只有第一个可执行项会使用 npx 安装的模块,后面的可执行项还是会交给 Shell 解释。</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">npx -p lolcatjs -p cowsay 'cowsay hello | lolcatjs'</span><br><span class="line"><span class="meta">#</span><span class="bash"> 报错</span></span><br></pre></td></tr></table></figure>
<p><code>-c</code>参数可以将所有命令都用 npx 解释。有了它,下面代码就可以正常执行了。</p>
<blockquote>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">npx -p lolcatjs -p cowsay -c <span class="string">'cowsay hello | lolcatjs'</span></span><br></pre></td></tr></table></figure>
</blockquote>
<p>参考:</p>
<p><a href="https://blog.csdn.net/csdn_yudong/article/details/81670477">https://blog.csdn.net/csdn_yudong/article/details/81670477</a></p>
<p><a href="http://www.ruanyifeng.com/blog/2019/02/npx.html">http://www.ruanyifeng.com/blog/2019/02/npx.html</a></p>
]]></content>
<categories>
<category>npm</category>
</categories>
<tags>
<tag>web</tag>
<tag>npm</tag>
</tags>
</entry>
<entry>
<title>npm 常用命令</title>
<url>/npm/npm%20%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/</url>
<content><![CDATA[<h1 id="使用淘宝镜像"><a href="#使用淘宝镜像" class="headerlink" title="使用淘宝镜像"></a>使用淘宝镜像</h1><p>为了能下载依赖包速度快点,推荐使用淘宝镜像,使用下面命令修改镜像地址:</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">npm config <span class="built_in">set</span> registry https://registry.npm.taobao.org</span><br></pre></td></tr></table></figure>
<h1 id="初始化模块"><a href="#初始化模块" class="headerlink" title="初始化模块"></a>初始化模块</h1><p>下面命令初始化一个模块,按提示配置 package.json 中的字段。</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">npm init </span><br></pre></td></tr></table></figure>
<p><code>-y</code> 表示使用默认值配置 package.json 文件中的字段,</p>
<h1 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h1><p>使用下面命令安装模块:</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">npm install (with no args, <span class="keyword">in</span> package dir)</span><br><span class="line">npm install [<@scope>/]<name></span><br><span class="line">npm install [<@scope>/]<name>@<tag></span><br><span class="line">npm install [<@scope>/]<name>@<version></span><br><span class="line">npm install [<@scope>/]<name>@<version range></span><br><span class="line">npm install <<span class="built_in">alias</span>>@npm:<name></span><br><span class="line">npm install <git-host>:<git-user>/<repo-name></span><br><span class="line">npm install <git repo url></span><br><span class="line">npm install <tarball file></span><br><span class="line">npm install <tarball url></span><br><span class="line">npm install <folder></span><br><span class="line"></span><br><span class="line">aliases: npm i, npm add</span><br><span class="line">common options: [-P|--save-prod|-D|--save-dev|] </span><br></pre></td></tr></table></figure>
<p>可选参数:</p>
<ul>
<li><strong>-P, –save-prod</strong>: 表示生产环境依赖包</li>
<li><strong>-D, –save-dev</strong>: 表示开发环境依赖包</li>
</ul>
<p>例子:</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line"><span class="comment">#直接写包名 从镜像地址下载 lodash</span></span><br><span class="line">npm i lodash</span><br><span class="line"><span class="comment">#从git url 下载lodash</span></span><br><span class="line">npm i git+https://github.com/lodash/lodash.git</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<h1 id="更新"><a href="#更新" class="headerlink" title="更新"></a>更新</h1><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">npm update [-g] [<pkg>...]</span><br><span class="line"></span><br><span class="line">aliases: up, upgrade</span><br></pre></td></tr></table></figure>
<p><code>-g</code> 参数表示更新全局安装包</p>
<p>如果不指定包名称,将更新所有的安装包到满足需要的最新版本。</p>
<h1 id="卸载"><a href="#卸载" class="headerlink" title="卸载"></a>卸载</h1><figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">npm uninstall [<@scope>/]<pkg>[@<version>]... [-S|--save|-D|--save-dev|-O|--save-optional|--no-save]</span><br><span class="line"></span><br><span class="line">aliases: remove, rm, r, un, unlink</span><br></pre></td></tr></table></figure>
<p>例子:</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">npm uninstall lodash --no-save</span><br></pre></td></tr></table></figure>
<h1 id="查看已装包列表"><a href="#查看已装包列表" class="headerlink" title="查看已装包列表"></a>查看已装包列表</h1><p>通过下面命令查看已安装列表,带 <code>-g</code> 表示查看全局目录的</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">npm ls [-g]</span><br></pre></td></tr></table></figure>
<h1 id="清理缓存"><a href="#清理缓存" class="headerlink" title="清理缓存"></a>清理缓存</h1><p>使用 <code>-f</code> 参数可以强制清理缓存</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">npm cache clear [-f]</span><br></pre></td></tr></table></figure>
<h1 id="npm-配置"><a href="#npm-配置" class="headerlink" title="npm 配置"></a>npm 配置</h1><figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">npm config <span class="built_in">set</span> <key> <value> [-g|--global]</span><br><span class="line">npm config get <key></span><br><span class="line">npm config delete <key></span><br><span class="line">npm config list [-l] [--json]</span><br><span class="line">npm config edit</span><br><span class="line">npm get <key></span><br><span class="line">npm <span class="built_in">set</span> <key> <value> [-g|--global]</span><br><span class="line"></span><br><span class="line">aliases: c</span><br></pre></td></tr></table></figure>
<p>例子:</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">npm config list <span class="comment">#获取所有配置信息</span></span><br></pre></td></tr></table></figure>
<h1 id="帮助"><a href="#帮助" class="headerlink" title="帮助"></a>帮助</h1><figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">npm <span class="built_in">help</span> <term> [<terms..>]</span><br></pre></td></tr></table></figure>
<p>当指定了具体的命令时,会打开对应命令的文档,如 <code>npm help install</code> 会打开 <code>install</code> 命令的帮助文档。</p>
]]></content>
<categories>
<category>npm</category>
</categories>
<tags>
<tag>web</tag>
<tag>npm</tag>
</tags>
</entry>
<entry>
<title>python 中文编码</title>
<url>/python/python%E4%B8%AD%E6%96%87%E7%BC%96%E7%A0%81/</url>
<content><![CDATA[<p>代码中包含中文,就需要在头部指定编码。</p>
<p>在文件开头加入 <strong># -*- coding: UTF-8 -*-</strong> 或者 <strong># coding=utf-8</strong>,确保读取中文时不会报错。</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#!/usr/bin/python</span></span><br><span class="line"><span class="comment"># -*- coding: UTF-8 -*-</span></span><br><span class="line"> </span><br><span class="line"><span class="built_in">print</span> <span class="string">"你好,世界"</span>;</span><br></pre></td></tr></table></figure>
<p>注意:</p>
<ul>
<li><p>#coding=utf-8 的等号两边不要有空格</p>
</li>
<li><p>python3.x 源码默认使用 utf-8 编码,故能正常解析中文</p>
</li>
<li><p>应将编辑器的存储格式配置为 UTF-8</p>
</li>
</ul>
]]></content>
<categories>
<category>Python</category>
</categories>
</entry>
<entry>
<title>python不同于其他编程语言的语法记录</title>
<url>/python/python%E7%9A%84%E7%9B%B8%E5%AF%B9%E4%BA%8Ejs%E7%9A%84%E5%8F%A6%E7%B1%BB%E8%AF%AD%E6%B3%95/</url>
<content><![CDATA[<p>各种编程语言有很多类似的语法,比如标识符的命名规范、循环、判断等等,下面列出 python 相对于其他编程语言特殊的一些基础语法。</p>
<h2 id="1、关键字-in-的用法"><a href="#1、关键字-in-的用法" class="headerlink" title="1、关键字 in 的用法"></a>1、关键字 in 的用法</h2><p>in通常用来判断 key 是否存在于字典的键,但是 python 中 in 还可以用于判断字符串是否包含某个子串</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="string">'cd'</span> <span class="keyword">in</span> <span class="string">'abcd'</span> </span><br><span class="line"><span class="comment">#返回值为true,表示后者包含前者</span></span><br></pre></td></tr></table></figure>
<h2 id="2、代码块的表示"><a href="#2、代码块的表示" class="headerlink" title="2、代码块的表示"></a>2、代码块的表示</h2><p>通常代码块用大括号 {} 包裹,python 用缩进幅度来表示所在的代码块</p>
<h2 id="3、列表-字符串截取"><a href="#3、列表-字符串截取" class="headerlink" title="3、列表/字符串截取"></a>3、列表/字符串截取</h2><p>list[start:end] 表示截取下标范围 [ start, end ) 的元素</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#list[start:end:step]表示在[start,end)的范围中,且每隔step个提取元素</span></span><br><span class="line">a=[<span class="string">'b'</span>,<span class="string">'c'</span>,<span class="string">'d'</span>,<span class="string">'e'</span>,<span class="string">'f'</span>,<span class="string">'g'</span>];</span><br><span class="line"><span class="built_in">print</span>( a[<span class="number">1</span>:<span class="number">5</span>:<span class="number">2</span>] )</span><br><span class="line"></span><br><span class="line"><span class="comment">#输出为['c', 'e']</span></span><br></pre></td></tr></table></figure>
<h2 id="4、-号用来表示重复"><a href="#4、-号用来表示重复" class="headerlink" title="4、* 号用来表示重复"></a>4、* 号用来表示重复</h2><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">print (['a']*4)</span><br><span class="line"></span><br><span class="line">#输出为 ['a', 'a', 'a', 'a']</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>Python</category>
</categories>
</entry>
<entry>
<title>python 项目环境搭建</title>
<url>/python/python%E9%A1%B9%E7%9B%AE%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/</url>
<content><![CDATA[<p>python 项目环境搭建</p>
<p>1、装所需 python 版本</p>
<p>2、pycharm 配置 python 解释器路径</p>
<p>3、配置 pip 镜像地址(pip.ini放到用户home目录下)</p>
<p>4、pycharm 打开目录从项目根目录打开,requirements.txt 文件会自动被 pycharm 识别</p>
<p>5、按照 pycharm 的提示对所需依赖进行安装</p>
]]></content>
<categories>
<category>Python</category>
</categories>
<tags>
<tag>Python</tag>
</tags>
</entry>
<entry>
<title>修改完github用户名后,在本地pull之前拉的工程,提示没有权限</title>
<url>/tortoisegit/%E4%BF%AE%E6%94%B9%E5%AE%8Cgithub%E7%94%A8%E6%88%B7%E5%90%8D%E5%90%8E%EF%BC%8C%E5%9C%A8%E6%9C%AC%E5%9C%B0pull%E4%B9%8B%E5%89%8D%E6%8B%89%E7%9A%84%E5%B7%A5%E7%A8%8B%EF%BC%8C%E6%8F%90%E7%A4%BA%E6%B2%A1%E6%9C%89%E6%9D%83%E9%99%90/</url>
<content><![CDATA[<h3 id="问题描述"><a href="#问题描述" class="headerlink" title="问题描述"></a>问题描述</h3><p>修改完github用户名后,在本地pull之前的工程,提示”make sure you have the correct access rights”,如图:</p>
<img src="/tortoisegit/%E4%BF%AE%E6%94%B9%E5%AE%8Cgithub%E7%94%A8%E6%88%B7%E5%90%8D%E5%90%8E%EF%BC%8C%E5%9C%A8%E6%9C%AC%E5%9C%B0pull%E4%B9%8B%E5%89%8D%E6%8B%89%E7%9A%84%E5%B7%A5%E7%A8%8B%EF%BC%8C%E6%8F%90%E7%A4%BA%E6%B2%A1%E6%9C%89%E6%9D%83%E9%99%90/1.png" class="">
<h3 id="解决方法"><a href="#解决方法" class="headerlink" title="解决方法"></a>解决方法</h3><img src="/tortoisegit/%E4%BF%AE%E6%94%B9%E5%AE%8Cgithub%E7%94%A8%E6%88%B7%E5%90%8D%E5%90%8E%EF%BC%8C%E5%9C%A8%E6%9C%AC%E5%9C%B0pull%E4%B9%8B%E5%89%8D%E6%8B%89%E7%9A%84%E5%B7%A5%E7%A8%8B%EF%BC%8C%E6%8F%90%E7%A4%BA%E6%B2%A1%E6%9C%89%E6%9D%83%E9%99%90/2.png" class="">
<p>重新pull,就会提示成功</p>
<img src="/tortoisegit/%E4%BF%AE%E6%94%B9%E5%AE%8Cgithub%E7%94%A8%E6%88%B7%E5%90%8D%E5%90%8E%EF%BC%8C%E5%9C%A8%E6%9C%AC%E5%9C%B0pull%E4%B9%8B%E5%89%8D%E6%8B%89%E7%9A%84%E5%B7%A5%E7%A8%8B%EF%BC%8C%E6%8F%90%E7%A4%BA%E6%B2%A1%E6%9C%89%E6%9D%83%E9%99%90/3.png" class="">
]]></content>
<categories>
<category>Git</category>
</categories>
<tags>
<tag>Git</tag>
</tags>
</entry>
<entry>
<title>Tortoisegit pull时,提示Couldn't load this key(unable to open file)</title>
<url>/tortoisegit/Tortoisegit%20pull%E6%97%B6%EF%BC%8C%E6%8F%90%E7%A4%BACouldn't%20load%20this%20key(unable%20to%20open%20file)/</url>
<content><![CDATA[<h3 id="问题描述"><a href="#问题描述" class="headerlink" title="问题描述"></a>问题描述</h3><p>之前新建了个ppk文件,删了旧的,今天在本地执行pull操作时,提示下面错误</p>
<img src="/tortoisegit/Tortoisegit%20pull%E6%97%B6%EF%BC%8C%E6%8F%90%E7%A4%BACouldn't%20load%20this%20key(unable%20to%20open%20file)/error.png" class="">
<h3 id="解决方法"><a href="#解决方法" class="headerlink" title="解决方法"></a>解决方法</h3><p>从网上搜的方法是,配置remote,可惜并没有看到remote选项</p>
<img src="/tortoisegit/Tortoisegit%20pull%E6%97%B6%EF%BC%8C%E6%8F%90%E7%A4%BACouldn't%20load%20this%20key(unable%20to%20open%20file)/png1.png" class="">
<p>于是,通过在pull弹出中,如下图操作,找到remote配置</p>
<img src="/tortoisegit/Tortoisegit%20pull%E6%97%B6%EF%BC%8C%E6%8F%90%E7%A4%BACouldn't%20load%20this%20key(unable%20to%20open%20file)/png2.png" class="">
<p>如下图,选择最新的ppk文件,然后确定</p>
<img src="/tortoisegit/Tortoisegit%20pull%E6%97%B6%EF%BC%8C%E6%8F%90%E7%A4%BACouldn't%20load%20this%20key(unable%20to%20open%20file)/png3.png" class="">
<p>重新pull时,就不会再提示无法加载了key文件了</p>
]]></content>
<categories>
<category>Git</category>
<category>Tortoisegit</category>
</categories>
<tags>
<tag>Tortoisegit</tag>
</tags>
</entry>
<entry>
<title>微服务</title>
<url>/%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E5%BE%AE%E6%9C%8D%E5%8A%A1/</url>
<content><![CDATA[<p>微服务特点:</p>
<ul>
<li>低耦合</li>
<li>弱依赖技术</li>
<li>以业务为单元组织代码</li>
</ul>
]]></content>
<categories>
<category>微服务</category>
</categories>
<tags>
<tag>微服务</tag>
</tags>
</entry>
<entry>
<title>进程 线程 服务</title>
<url>/%E7%BC%96%E7%A8%8B%E9%80%9A%E7%94%A8/%E8%BF%9B%E7%A8%8B%E3%80%81%E7%BA%BF%E7%A8%8B%E3%80%81%E6%9C%8D%E5%8A%A1/</url>
<content><![CDATA[<h1 id="程序"><a href="#程序" class="headerlink" title="程序"></a>程序</h1><p><strong>程序</strong>是计算机指令的集合,以二进制的形式,存储在磁盘上。</p>
<h1 id="进程"><a href="#进程" class="headerlink" title="进程"></a>进程</h1><p><strong>进程</strong>是系统资源申请、调度和独立运行的最小单位,是正在运行的<strong>程序</strong>。</p>
<p>一个程序可以启动多个进程,如每次打开浏览器都会启动新的进程。</p>
<h1 id="线程"><a href="#线程" class="headerlink" title="线程"></a>线程</h1><p>线程是在进程上下文创建的,系统从进程的地址空间中分配资源,供线程使用。真正执行代码的是线程。</p>
<p>创建进程时,操作系统会为此进程创建第一个线程,此线程为主线程,执行 main 或 winmain 函数。</p>
<h1 id="服务"><a href="#服务" class="headerlink" title="服务"></a>服务</h1><p><strong>服务</strong>是<strong>常驻</strong>在内存中的进程。</p>
]]></content>
<categories>
<category>编程通用</category>
</categories>
<tags>
<tag>进程</tag>
<tag>线程</tag>
<tag>服务</tag>
</tags>
</entry>
<entry>
<title>网络基础</title>
<url>/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80%E5%90%8D%E8%AF%8D/</url>
<content><![CDATA[<p>本文主要介绍一些网络名词。</p>
<h2 id="网络性能相关"><a href="#网络性能相关" class="headerlink" title="网络性能相关"></a>网络性能相关</h2><h3 id="比特"><a href="#比特" class="headerlink" title="比特"></a>比特</h3><p>比特( bit )是计算机中<strong>数据量的单位</strong>,来源于 binary digit(二进制数据),因此一个比特就是一个二进制数字中的一个 1 或 0。</p>
<p>通过用**比特率( bit rate )**来描述网络速率,速率的单位是 b / s (比特每秒,或 bit / s),有时写成 bps(即bit per second)。速率高时,可以使用 Kb/s Mb/s Gb/s Tb/s 为单位 。现在人们描述速率时,常常忽略单位中的b/s,如 100M 以太网,表示网络速率是 100Mb/s。</p>
<h3 id="带宽"><a href="#带宽" class="headerlink" title="带宽"></a>带宽</h3><p>在计算机网络中,<strong>带宽</strong>表示网络的通信线路所能传送数据的能力。<strong>网络带宽</strong>表示单位时间内,从网络中的一点到另一点所能通过的<strong>最高数据率</strong>。</p>
<h3 id="吞吐量"><a href="#吞吐量" class="headerlink" title="吞吐量"></a>吞吐量</h3><p>**吞吐量 **表示在单位时间内,通过某个网络(或信道、网口)的数据量。</p>
<h3 id="时延"><a href="#时延" class="headerlink" title="时延"></a>时延</h3><p>**时延 **指数据从网络的一端传送到另一端所需的时间。</p>
<p>总时延 = 发送时延 + 传播时延 + 处理时延 + 排队时延</p>
<h4 id="发送时延"><a href="#发送时延" class="headerlink" title="发送时延"></a>发送时延</h4><p><strong>发送时延</strong> 指发送数据所需要是时间。从发送数据帧的第一个比特算起,到最后一个比特发送完毕所需的时间。 发送时延 = 数据帧长度(b) / 发送速率( b/s )。</p>
<h4 id="传播时延"><a href="#传播时延" class="headerlink" title="传播时延"></a><strong>传播时延</strong></h4><p><strong>传播时延</strong> 指数据在传输信道媒体上需要的时间。</p>
<h4 id="处理时延"><a href="#处理时延" class="headerlink" title="处理时延"></a><strong>处理时延</strong></h4><p><strong>处理时延</strong> 指主机或路由在收到分组后,处理分组的时间。</p>
<h4 id="排队时延"><a href="#排队时延" class="headerlink" title="排队时延"></a>排队时延</h4><p><strong>排队时延</strong> 指分组在传输中,在路由器输入输出队里中等待的时间。</p>
<h3 id="RTT"><a href="#RTT" class="headerlink" title="RTT"></a>RTT</h3><p><strong>往返时间 RTT (Round-Trip Time)</strong> 表示从发送数据开始 ,到发送方收到来自接收方确认所经历的时间。</p>
<h2 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h2><p><strong>ISP</strong></p>
<p>ISP(Internet Service Provider)因特网服务提供商。IP 地址管理机构不会将单个IP直接分配给个人,而是将 IP 地址批量有偿分配给经审查合格的 ISP,机构或个人再有偿从 ISP 获取 IP。</p>
]]></content>
<categories>
<category>计算机网络</category>
</categories>
<tags>
<tag>web</tag>
<tag>计算机网络</tag>
</tags>
</entry>
<entry>
<title>无法将“ssh-keygen”项识别为 cmdlet、函数、脚本文件或可运行程序的名称</title>
<url>/tortoisegit/%E6%97%A0%E6%B3%95%E5%B0%86%E2%80%9Cssh-keygen%E2%80%9D%E9%A1%B9%E8%AF%86%E5%88%AB%E4%B8%BA%20cmdlet%E3%80%81%E5%87%BD%E6%95%B0%E3%80%81%E8%84%9A%E6%9C%AC%E6%96%87%E4%BB%B6%E6%88%96%E5%8F%AF%E8%BF%90%E8%A1%8C%E7%A8%8B%E5%BA%8F%E7%9A%84%E5%90%8D%E7%A7%B0/</url>
<content><![CDATA[<h3 id="问题描述"><a href="#问题描述" class="headerlink" title="问题描述"></a>问题描述</h3><p>无法将“ssh-keygen”项识别为 cmdlet、函数、脚本文件或可运行程序的名称</p>
<h3 id="解决方法"><a href="#解决方法" class="headerlink" title="解决方法"></a>解决方法</h3><p>使用git bash运行ssh-keygen命令即可</p>
]]></content>
<categories>
<category>Git</category>
</categories>
<tags>
<tag>Git</tag>
</tags>
</entry>
<entry>
<title>Axios</title>
<url>/web/axios/Axios/</url>
<content><![CDATA[<h1 id="Axios是什么"><a href="#Axios是什么" class="headerlink" title="Axios是什么"></a>Axios是什么</h1><p>Axios 是一个基于 promise 的 HTTP 库,可以在浏览器和 node.js 中使用。</p>
<h1 id="Axios特点"><a href="#Axios特点" class="headerlink" title="Axios特点"></a>Axios特点</h1><ul>
<li>支持在 浏览器 和 node 中使用</li>
<li>支持 <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise">Promise</a> API</li>
<li>拦截请求和响应</li>
<li>转换请求数据和响应数据</li>
<li>取消请求</li>
<li>自动转换 JSON 数据</li>
<li>客户端支持防御 <a href="http://en.wikipedia.org/wiki/Cross-site_request_forgery">XSRF</a></li>
</ul>
<h1 id="Axios安装"><a href="#Axios安装" class="headerlink" title="Axios安装"></a>Axios安装</h1><figure class="highlight shell"><table><tr><td class="code"><pre><span class="line"><span class="meta">$</span><span class="bash"> npm install axios</span></span><br></pre></td></tr></table></figure>
<h1 id="Axios使用"><a href="#Axios使用" class="headerlink" title="Axios使用"></a>Axios使用</h1><h2 id="axios-…"><a href="#axios-…" class="headerlink" title="axios({…})"></a>axios({…})</h2><p>通过执行 axios({config})来创建请求。下面是 config 参数的可配置值。只有 <code>url</code> 是必需的, <code>method</code>默认使用 <code>get</code> 方法.</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line">{</span><br><span class="line"> <span class="comment">// `url` 是用于请求的服务器 URL</span></span><br><span class="line"> <span class="attr">url</span>: <span class="string">'/user'</span>,</span><br><span class="line"></span><br><span class="line"> <span class="comment">// `method` 是创建请求时使用的方法</span></span><br><span class="line"> <span class="attr">method</span>: <span class="string">'get'</span>, <span class="comment">// 默认是 get</span></span><br><span class="line"></span><br><span class="line"> <span class="comment">// `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。</span></span><br><span class="line"> <span class="comment">// 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL</span></span><br><span class="line"> <span class="attr">baseURL</span>: <span class="string">'https://some-domain.com/api/'</span>,</span><br><span class="line"></span><br><span class="line"> <span class="comment">// `transformRequest` 允许在向服务器发送前,修改请求数据</span></span><br><span class="line"> <span class="comment">// 只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法</span></span><br><span class="line"> <span class="comment">// 后面数组中的函数必须返回一个字符串,或 ArrayBuffer,或 Stream</span></span><br><span class="line"> <span class="attr">transformRequest</span>: [<span class="function"><span class="keyword">function</span> (<span class="params">data</span>) </span>{</span><br><span class="line"> <span class="comment">// 对 data 进行任意转换处理</span></span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> data;</span><br><span class="line"> }],</span><br><span class="line"></span><br><span class="line"> <span class="comment">// `transformResponse` 在传递给 then/catch 前,允许修改响应数据</span></span><br><span class="line"> <span class="attr">transformResponse</span>: [<span class="function"><span class="keyword">function</span> (<span class="params">data</span>) </span>{</span><br><span class="line"> <span class="comment">// 对 data 进行任意转换处理</span></span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> data;</span><br><span class="line"> }],</span><br><span class="line"></span><br><span class="line"> <span class="comment">// `headers` 是即将被发送的自定义请求头</span></span><br><span class="line"> <span class="attr">headers</span>: {<span class="string">'X-Requested-With'</span>: <span class="string">'XMLHttpRequest'</span>},</span><br><span class="line"></span><br><span class="line"> <span class="comment">// `params` 是即将与请求一起发送的 URL 参数</span></span><br><span class="line"> <span class="comment">// 必须是一个无格式对象(plain object)或 URLSearchParams 对象</span></span><br><span class="line"> <span class="attr">params</span>: {</span><br><span class="line"> <span class="attr">ID</span>: <span class="number">12345</span></span><br><span class="line"> },</span><br><span class="line"></span><br><span class="line"> <span class="comment">// `paramsSerializer` 是一个负责 `params` 序列化的函数</span></span><br><span class="line"> <span class="comment">// (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)</span></span><br><span class="line"> <span class="attr">paramsSerializer</span>: <span class="function"><span class="keyword">function</span>(<span class="params">params</span>) </span>{</span><br><span class="line"> <span class="keyword">return</span> Qs.stringify(params, {<span class="attr">arrayFormat</span>: <span class="string">'brackets'</span>})</span><br><span class="line"> },</span><br><span class="line"></span><br><span class="line"> <span class="comment">// `data` 是作为请求主体被发送的数据</span></span><br><span class="line"> <span class="comment">// 只适用于这些请求方法 'PUT', 'POST', 和 'PATCH'</span></span><br><span class="line"> <span class="comment">// 在没有设置 `transformRequest` 时,必须是以下类型之一:</span></span><br><span class="line"> <span class="comment">// - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams</span></span><br><span class="line"> <span class="comment">// - 浏览器专属:FormData, File, Blob</span></span><br><span class="line"> <span class="comment">// - Node 专属: Stream</span></span><br><span class="line"> <span class="attr">data</span>: {</span><br><span class="line"> <span class="attr">firstName</span>: <span class="string">'Fred'</span></span><br><span class="line"> },</span><br><span class="line"></span><br><span class="line"> <span class="comment">// `timeout` 指定请求超时的毫秒数(0 表示无超时时间)</span></span><br><span class="line"> <span class="comment">// 如果请求话费了超过 `timeout` 的时间,请求将被中断</span></span><br><span class="line"> <span class="attr">timeout</span>: <span class="number">1000</span>,</span><br><span class="line"></span><br><span class="line"> <span class="comment">// `withCredentials` 表示跨域请求时是否需要使用凭证</span></span><br><span class="line"> <span class="attr">withCredentials</span>: <span class="literal">false</span>, <span class="comment">// 默认的</span></span><br><span class="line"></span><br><span class="line"> <span class="comment">// `adapter` 允许自定义处理请求,以使测试更轻松</span></span><br><span class="line"> <span class="comment">// 返回一个 promise 并应用一个有效的响应 (查阅 [response docs](#response-api)).</span></span><br><span class="line"> <span class="attr">adapter</span>: <span class="function"><span class="keyword">function</span> (<span class="params">config</span>) </span>{</span><br><span class="line"> <span class="comment">/* ... */</span></span><br><span class="line"> },</span><br><span class="line"></span><br><span class="line"> <span class="comment">// `auth` 表示应该使用 HTTP 基础验证,并提供凭据</span></span><br><span class="line"> <span class="comment">// 这将设置一个 `Authorization` 头,覆写掉现有的任意使用 `headers` 设置的自定义 `Authorization`头</span></span><br><span class="line"> <span class="attr">auth</span>: {</span><br><span class="line"> <span class="attr">username</span>: <span class="string">'janedoe'</span>,</span><br><span class="line"> <span class="attr">password</span>: <span class="string">'s00pers3cret'</span></span><br><span class="line"> },</span><br><span class="line"></span><br><span class="line"> <span class="comment">// `responseType` 表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'</span></span><br><span class="line"> <span class="attr">responseType</span>: <span class="string">'json'</span>, <span class="comment">// 默认的</span></span><br><span class="line"></span><br><span class="line"> <span class="comment">// `xsrfCookieName` 是用作 xsrf token 的值的cookie的名称</span></span><br><span class="line"> <span class="attr">xsrfCookieName</span>: <span class="string">'XSRF-TOKEN'</span>, <span class="comment">// default</span></span><br><span class="line"></span><br><span class="line"> <span class="comment">// `xsrfHeaderName` 是承载 xsrf token 的值的 HTTP 头的名称</span></span><br><span class="line"> <span class="attr">xsrfHeaderName</span>: <span class="string">'X-XSRF-TOKEN'</span>, <span class="comment">// 默认的</span></span><br><span class="line"></span><br><span class="line"> <span class="comment">// `onUploadProgress` 允许为上传处理进度事件</span></span><br><span class="line"> <span class="attr">onUploadProgress</span>: <span class="function"><span class="keyword">function</span> (<span class="params">progressEvent</span>) </span>{</span><br><span class="line"> <span class="comment">// 对原生进度事件的处理</span></span><br><span class="line"> },</span><br><span class="line"></span><br><span class="line"> <span class="comment">// `onDownloadProgress` 允许为下载处理进度事件</span></span><br><span class="line"> <span class="attr">onDownloadProgress</span>: <span class="function"><span class="keyword">function</span> (<span class="params">progressEvent</span>) </span>{</span><br><span class="line"> <span class="comment">// 对原生进度事件的处理</span></span><br><span class="line"> },</span><br><span class="line"></span><br><span class="line"> <span class="comment">// `maxContentLength` 定义允许的响应内容的最大尺寸</span></span><br><span class="line"> <span class="attr">maxContentLength</span>: <span class="number">2000</span>,</span><br><span class="line"></span><br><span class="line"> <span class="comment">// `validateStatus` 定义对于给定的HTTP 响应状态码是 resolve 或 reject promise 。如果 `validateStatus` 返回 `true` (或者设置为 `null` 或 `undefined`),promise 将被 resolve; 否则,promise 将被 rejecte</span></span><br><span class="line"> <span class="attr">validateStatus</span>: <span class="function"><span class="keyword">function</span> (<span class="params">status</span>) </span>{</span><br><span class="line"> <span class="keyword">return</span> status >= <span class="number">200</span> && status < <span class="number">300</span>; <span class="comment">// 默认的</span></span><br><span class="line"> },</span><br><span class="line"></span><br><span class="line"> <span class="comment">// `maxRedirects` 定义在 node.js 中 follow 的最大重定向数目</span></span><br><span class="line"> <span class="comment">// 如果设置为0,将不会 follow 任何重定向</span></span><br><span class="line"> <span class="attr">maxRedirects</span>: <span class="number">5</span>, <span class="comment">// 默认的</span></span><br><span class="line"></span><br><span class="line"> <span class="comment">// `httpAgent` 和 `httpsAgent` 分别在 node.js 中用于定义在执行 http 和 https 时使用的自定义代理。允许像这样配置选项:</span></span><br><span class="line"> <span class="comment">// `keepAlive` 默认没有启用</span></span><br><span class="line"> <span class="attr">httpAgent</span>: <span class="keyword">new</span> http.Agent({ <span class="attr">keepAlive</span>: <span class="literal">true</span> }),</span><br><span class="line"> <span class="attr">httpsAgent</span>: <span class="keyword">new</span> https.Agent({ <span class="attr">keepAlive</span>: <span class="literal">true</span> }),</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 'proxy' 定义代理服务器的主机名称和端口</span></span><br><span class="line"> <span class="comment">// `auth` 表示 HTTP 基础验证应当用于连接代理,并提供凭据</span></span><br><span class="line"> <span class="comment">// 这将会设置一个 `Proxy-Authorization` 头,覆写掉已有的通过使用 `header` 设置的自定义 `Proxy-Authorization` 头。</span></span><br><span class="line"> <span class="attr">proxy</span>: {</span><br><span class="line"> <span class="attr">host</span>: <span class="string">'127.0.0.1'</span>,</span><br><span class="line"> <span class="attr">port</span>: <span class="number">9000</span>,</span><br><span class="line"> <span class="attr">auth</span>: : {</span><br><span class="line"> <span class="attr">username</span>: <span class="string">'mikeymike'</span>,</span><br><span class="line"> <span class="attr">password</span>: <span class="string">'rapunz3l'</span></span><br><span class="line"> }</span><br><span class="line"> },</span><br><span class="line"></span><br><span class="line"> <span class="comment">// `cancelToken` 指定用于取消请求的 cancel token</span></span><br><span class="line"> <span class="comment">// (查看后面的 Cancellation 这节了解更多)</span></span><br><span class="line"> <span class="attr">cancelToken</span>: <span class="keyword">new</span> CancelToken(<span class="function"><span class="keyword">function</span> (<span class="params">cancel</span>) </span>{</span><br><span class="line"> })</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h2 id="可支持请求的别名"><a href="#可支持请求的别名" class="headerlink" title="可支持请求的别名"></a>可支持请求的别名</h2><figure class="highlight js"><table><tr><td class="code"><pre><span class="line">axios.request(config)</span><br><span class="line">axios.get(url[, config])</span><br><span class="line">axios.delete(url[, config])</span><br><span class="line">axios.head(url[, config])</span><br><span class="line">axios.post(url[, data[, config]])</span><br><span class="line">axios.put(url[, data[, config]])</span><br><span class="line">axios.patch(url[, data[, config]])</span><br></pre></td></tr></table></figure>
<h3 id="示例"><a href="#示例" class="headerlink" title="示例"></a>示例</h3><p>get 请求</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="comment">// 为给定 ID 的 user 创建请求</span></span><br><span class="line">axios.get(<span class="string">'/user?ID=12345'</span>)</span><br><span class="line"> .then(<span class="function"><span class="keyword">function</span> (<span class="params">response</span>) </span>{</span><br><span class="line"> <span class="built_in">console</span>.log(response);</span><br><span class="line"> })</span><br><span class="line"> .catch(<span class="function"><span class="keyword">function</span> (<span class="params">error</span>) </span>{</span><br><span class="line"> <span class="built_in">console</span>.log(error);</span><br><span class="line"> });</span><br><span class="line"></span><br><span class="line"><span class="comment">// 可选地,上面的请求可以这样做</span></span><br><span class="line">axios.get(<span class="string">'/user'</span>, {</span><br><span class="line"> <span class="attr">params</span>: {</span><br><span class="line"> <span class="attr">ID</span>: <span class="number">12345</span></span><br><span class="line"> }</span><br><span class="line"> })</span><br><span class="line"> .then(<span class="function"><span class="keyword">function</span> (<span class="params">response</span>) </span>{</span><br><span class="line"> <span class="built_in">console</span>.log(response);</span><br><span class="line"> })</span><br><span class="line"> .catch(<span class="function"><span class="keyword">function</span> (<span class="params">error</span>) </span>{</span><br><span class="line"> <span class="built_in">console</span>.log(error);</span><br><span class="line"> });</span><br></pre></td></tr></table></figure>
<p>post 请求</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line">axios.post(<span class="string">'/user'</span>, {</span><br><span class="line"> <span class="attr">firstName</span>: <span class="string">'Fred'</span>,</span><br><span class="line"> <span class="attr">lastName</span>: <span class="string">'Flintstone'</span></span><br><span class="line"> })</span><br><span class="line"> .then(<span class="function"><span class="keyword">function</span> (<span class="params">response</span>) </span>{</span><br><span class="line"> <span class="built_in">console</span>.log(response);</span><br><span class="line"> })</span><br><span class="line"> .catch(<span class="function"><span class="keyword">function</span> (<span class="params">error</span>) </span>{</span><br><span class="line"> <span class="built_in">console</span>.log(error);</span><br><span class="line"> });</span><br></pre></td></tr></table></figure>
<h2 id="并发请求"><a href="#并发请求" class="headerlink" title="并发请求"></a>并发请求</h2><figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">getUserAccount</span>(<span class="params"></span>) </span>{</span><br><span class="line"> <span class="keyword">return</span> axios.get(<span class="string">'/user/12345'</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">getUserPermissions</span>(<span class="params"></span>) </span>{</span><br><span class="line"> <span class="keyword">return</span> axios.get(<span class="string">'/user/12345/permissions'</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">axios.all([getUserAccount(), getUserPermissions()])</span><br><span class="line"> .then(axios.spread(<span class="function"><span class="keyword">function</span> (<span class="params">acct, perms</span>) </span>{</span><br><span class="line"> <span class="comment">// 两个请求现在都执行完成,acct、perms分别为第一个和第二个请求的返回值</span></span><br><span class="line"> }));</span><br></pre></td></tr></table></figure>
<h2 id="创建实例"><a href="#创建实例" class="headerlink" title="创建实例"></a>创建实例</h2><p>可以使用自定义配置新建一个 axios 实例,axios.create([config])</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="keyword">var</span> instance = axios.create({</span><br><span class="line"> <span class="attr">baseURL</span>: <span class="string">'https://some-domain.com/api/'</span>,</span><br><span class="line"> <span class="attr">timeout</span>: <span class="number">1000</span>,</span><br><span class="line"> <span class="attr">headers</span>: {<span class="string">'X-Custom-Header'</span>: <span class="string">'foobar'</span>}</span><br><span class="line">});</span><br></pre></td></tr></table></figure>
<h2 id="响应结构"><a href="#响应结构" class="headerlink" title="响应结构"></a>响应结构</h2><p>请求的响应包含以下信息</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">{</span><br><span class="line"> // `data` 由服务器提供的响应</span><br><span class="line"> data: {},</span><br><span class="line"></span><br><span class="line"> // `status` 来自服务器响应的 HTTP 状态码</span><br><span class="line"> status: 200,</span><br><span class="line"></span><br><span class="line"> // `statusText` 来自服务器响应的 HTTP 状态信息</span><br><span class="line"> statusText: 'OK',</span><br><span class="line"></span><br><span class="line"> // `headers` 服务器响应的头</span><br><span class="line"> headers: {},</span><br><span class="line"></span><br><span class="line"> // `config` 是为请求提供的配置信息</span><br><span class="line"> config: {}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>使用 <code>then</code> 时,你将接收下面这样的响应:</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line">axios.get(<span class="string">'/user/12345'</span>)</span><br><span class="line"> .then(<span class="function"><span class="keyword">function</span>(<span class="params">response</span>) </span>{</span><br><span class="line"> <span class="built_in">console</span>.log(response.data);</span><br><span class="line"> <span class="built_in">console</span>.log(response.status);</span><br><span class="line"> <span class="built_in">console</span>.log(response.statusText);</span><br><span class="line"> <span class="built_in">console</span>.log(response.headers);</span><br><span class="line"> <span class="built_in">console</span>.log(response.config);</span><br><span class="line"> });</span><br></pre></td></tr></table></figure>
<h2 id="配置默认值"><a href="#配置默认值" class="headerlink" title="配置默认值"></a>配置默认值</h2><h3 id="全局的-axios-默认值"><a href="#全局的-axios-默认值" class="headerlink" title="全局的 axios 默认值"></a>全局的 axios 默认值</h3><figure class="highlight js"><table><tr><td class="code"><pre><span class="line">axios.defaults.baseURL = <span class="string">'https://api.example.com'</span>;</span><br><span class="line">axios.defaults.headers.common[<span class="string">'Authorization'</span>] = AUTH_TOKEN;</span><br><span class="line">axios.defaults.headers.post[<span class="string">'Content-Type'</span>] = <span class="string">'application/x-www-form-urlencoded'</span>;</span><br></pre></td></tr></table></figure>
<h3 id="自定义实例默认值"><a href="#自定义实例默认值" class="headerlink" title="自定义实例默认值"></a>自定义实例默认值</h3><figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="comment">// 创建实例时设置配置的默认值</span></span><br><span class="line"><span class="keyword">var</span> instance = axios.create({</span><br><span class="line"> <span class="attr">baseURL</span>: <span class="string">'https://api.example.com'</span></span><br><span class="line">});</span><br><span class="line"></span><br><span class="line"><span class="comment">// 在实例已创建后修改默认值</span></span><br><span class="line">instance.defaults.headers.common[<span class="string">'Authorization'</span>] = AUTH_TOKEN;</span><br></pre></td></tr></table></figure>
<h3 id="配置的优先顺序"><a href="#配置的优先顺序" class="headerlink" title="配置的优先顺序"></a>配置的优先顺序</h3><p>config参数 > defaults 属性 > lib/defaults.js</p>
<h2 id="拦截器"><a href="#拦截器" class="headerlink" title="拦截器"></a>拦截器</h2><p>在请求或响应被 <code>then</code> 或 <code>catch</code> 处理前拦截它们。</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="comment">// 添加请求拦截器</span></span><br><span class="line">axios.interceptors.request.use(<span class="function"><span class="keyword">function</span> (<span class="params">config</span>) </span>{</span><br><span class="line"> <span class="comment">// 在发送请求之前做些什么</span></span><br><span class="line"> <span class="keyword">return</span> config;</span><br><span class="line"> }, <span class="function"><span class="keyword">function</span> (<span class="params">error</span>) </span>{</span><br><span class="line"> <span class="comment">// 对请求错误做些什么</span></span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">Promise</span>.reject(error);</span><br><span class="line"> });</span><br><span class="line"></span><br><span class="line"><span class="comment">// 添加响应拦截器</span></span><br><span class="line">axios.interceptors.response.use(<span class="function"><span class="keyword">function</span> (<span class="params">response</span>) </span>{</span><br><span class="line"> <span class="comment">// 对响应数据做点什么</span></span><br><span class="line"> <span class="keyword">return</span> response;</span><br><span class="line"> }, <span class="function"><span class="keyword">function</span> (<span class="params">error</span>) </span>{</span><br><span class="line"> <span class="comment">// 对响应错误做点什么</span></span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">Promise</span>.reject(error);</span><br><span class="line"> });</span><br></pre></td></tr></table></figure>
<p>移除拦截:</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="keyword">var</span> myInterceptor = axios.interceptors.request.use(<span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>{<span class="comment">/*...*/</span>});</span><br><span class="line">axios.interceptors.request.eject(myInterceptor);</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>web</category>
<category>Axios</category>
</categories>
<tags>
<tag>node</tag>
</tags>
</entry>
<entry>
<title>angulerjs 调试</title>
<url>/web/angularjs/angularjs%E8%B0%83%E8%AF%95/</url>
<content><![CDATA[<h1 id="将-dom-元素包装成-angular-元素"><a href="#将-dom-元素包装成-angular-元素" class="headerlink" title="将 dom 元素包装成 angular 元素"></a>将 dom 元素包装成 angular 元素</h1><p>将 dom 元素包装成 angular 元素后,可以获取和使用一些 angular 属性和方法。</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="keyword">var</span> dom = <span class="built_in">document</span>.getElementById(<span class="string">'domid'</span>);</span><br><span class="line">$angularEle = angular.element(dom);</span><br></pre></td></tr></table></figure>
<h1 id="通过-angular-元素拿到-scope-对象"><a href="#通过-angular-元素拿到-scope-对象" class="headerlink" title="通过 angular 元素拿到 scope 对象"></a>通过 angular 元素拿到 scope 对象</h1><p>angular 元素的 scope() 方法可以返回离其最近的$scope对象,进而可以获取$scope对象上的属性和方法。</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line">$angularEle.scope();</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>web</category>
<category>angularjs</category>
</categories>
<tags>
<tag>angularjs</tag>
</tags>
</entry>
<entry>
<title>angulerjs 事件</title>
<url>/web/angularjs/angulerjs-%E4%BA%8B%E4%BB%B6/</url>
<content><![CDATA[<h1 id="1-事件的作用"><a href="#1-事件的作用" class="headerlink" title="1 事件的作用"></a>1 事件的作用</h1><p>事件的作用:在组件间进行通信。</p>
<h1 id="2-事件的使用"><a href="#2-事件的使用" class="headerlink" title="2 事件的使用"></a>2 事件的使用</h1><p>事件的使用:事件发生者传播事件,事件关心者监听事件,进而在监听事件中进行相应的操作。</p>
<h2 id="2-1-angularjs-事件和-js-事件区别"><a href="#2-1-angularjs-事件和-js-事件区别" class="headerlink" title="2.1 angularjs 事件和 js 事件区别"></a>2.1 angularjs 事件和 js 事件区别</h2><p>angularjs 事件和原生 js 事件的不同之处在于,angularjs 事件是通过 scope 来监听和传播的,而 js 原生事件是通过 dom 来监听和传播的。</p>
<h2 id="2-2-angularjs-事件传播"><a href="#2-2-angularjs-事件传播" class="headerlink" title="2.2 angularjs 事件传播"></a>2.2 angularjs 事件传播</h2><h3 id="2-2-1-向上传播-scope-emit"><a href="#2-2-1-向上传播-scope-emit" class="headerlink" title="2.2.1 向上传播 scope.$emit"></a>2.2.1 向上传播 scope.$emit</h3><p>通过 scope.$emit(evtName, data ) 把事件通过作用域链向上传播。</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">//在与scope在同一个作用域链上的所有父scope,只要通过 scope.$on添加了监听,都会触发监听器的执行</span><br><span class="line">scope.$emit('progressChange', 20);//20即为要传递给监听器的第二个数据参数</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<h3 id="2-2-2-向下传播-scope-broadcast"><a href="#2-2-2-向下传播-scope-broadcast" class="headerlink" title="2.2.2 向下传播 scope.$broadcast"></a>2.2.2 向下传播 scope.$broadcast</h3><p>通过 scope.$broadcast(evtName, data ) 把事件通过作用域链向下传播。</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="comment">//在与scope在同一个作用域链上的所有子scope,只要通过 scope.$on添加了监听,都会触发监听器的执行</span></span><br><span class="line">scope.$broadcast(<span class="string">'progressChange'</span>, <span class="number">20</span>);<span class="comment">//20即为要传递给监听器的第二个数据参数</span></span><br></pre></td></tr></table></figure>
<h2 id="2-3-angularjs-事件监听"><a href="#2-3-angularjs-事件监听" class="headerlink" title="2.3 angularjs 事件监听"></a>2.3 angularjs 事件监听</h2><h3 id="2-3-1-监听方法"><a href="#2-3-1-监听方法" class="headerlink" title="2.3.1 监听方法"></a>2.3.1 监听方法</h3><p>通过 scope.$on(evtName, handleFun) 方法,可以为指定事件注册监听器。</p>
<p>scope.$on函数返回值为反注册函数,我们可以调用它来取消监听器。</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="keyword">var</span> cancelHandle = scope.$on(<span class="string">'progressChange'</span>, changeHandle);</span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">handleHandle</span>(<span class="params">evt, data</span>)</span>{</span><br><span class="line"> <span class="comment">//data为传播者传递过来的数据</span></span><br><span class="line"> <span class="comment">//进行刷新组件内容等操作</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">cancelHandle();<span class="comment">//可以取消监听器</span></span><br></pre></td></tr></table></figure>
<h3 id="2-3-2-事件对象"><a href="#2-3-2-事件对象" class="headerlink" title="2.3.2 事件对象"></a>2.3.2 事件对象</h3><p>事件监听器的第一个参数即事件对象,事件对象有以下属性,可以通过事件对象属性对事件进行一些操作。</p>
<p>1、targetScope(作用域对象)</p>
<p> 发送或广播事件的作用域</p>
<p>2、currentScope(作用域对象)</p>
<p> 当前处理事件的作用域</p>
<p>3、name(字符串)</p>
<p> 事件名称</p>
<p>4、stopPropagation(函数)</p>
<p> 当事件通过$emit进行传播时,可以通过 stopPropagation 取消后续的传播</p>
<p>5、preventDefault(函数)</p>
<p> preventDafault 执行后不会阻止事件传播,但是会把 defaultPrevented 标记设置为 true,子作用域可以通过此字段来决定是否需要再处理这个事件。</p>
<p>6、defaultPrevented(布尔值)</p>
<p> 可以通过 defaultPrevented 来决定是否需要处理此事件</p>
]]></content>
<categories>
<category>web</category>
<category>angularjs</category>
</categories>
<tags>
<tag>angularjs</tag>
</tags>
</entry>
<entry>
<title>angulerjs 作用域</title>
<url>/web/angularjs/angulerjs-%E4%BD%9C%E7%94%A8%E5%9F%9F/</url>
<content><![CDATA[<h1 id="作用域的作用"><a href="#作用域的作用" class="headerlink" title="作用域的作用"></a>作用域的作用</h1><p>在 angularjs 中,作用域 $scope 充当 MVC 中 M 的角色,将视图和控制器连接在了一起。$scope 的所有属性,都能被视图自动访问到。</p>
<p>angularjs 在启动时,会将 $rootScope 和 ng-app 绑定在一起, $rootScope 在所有 $scope 的顶层,是根作用域。</p>
<p>作用域具有的功能:</p>
<ol>
<li>给表达式提供上下文</li>
<li>隔离业务功能和数据</li>
<li>监视数据模型变化,将变化通知给整个应用</li>
</ol>
<h1 id=""><a href="#" class="headerlink" title=""></a></h1>]]></content>
<categories>
<category>web</category>
<category>angularjs</category>
</categories>
<tags>
<tag>angularjs</tag>
</tags>
</entry>
<entry>
<title>angulerjs 模块</title>
<url>/web/angularjs/angulerjs-%E6%A8%A1%E5%9D%97/</url>
<content><![CDATA[<h2 id="angularjs模块的作用"><a href="#angularjs模块的作用" class="headerlink" title="angularjs模块的作用"></a>angularjs模块的作用</h2><p>在angularjs中,一个应用可以包含多个模块,每个模块定义了具体的功能。</p>
<p>模块的作用:</p>
<ol>
<li>保持命名空间清洁</li>
<li>编写测试代码方法</li>
<li>代码复用</li>
<li>使应用可以按照任意顺序加载代码</li>
</ol>
<h2 id="模块的定义"><a href="#模块的定义" class="headerlink" title="模块的定义"></a>模块的定义</h2><p>angular.module( appName’, [])这个方法可以用来定义模块,相当于模块的 setter 方法。</p>
<p>第一个参数是模块名称</p>
<p>第二个参数是模块依赖列表,数组的每个元素都是模块名称,这些依赖会在本模块加载前由注入器进行预加载。</p>
<h2 id="模块的引用"><a href="#模块的引用" class="headerlink" title="模块的引用"></a>模块的引用</h2><p>angular.module( ‘appName’ ) 这个方法用来引用模块,相当于模块的 getter 方法。</p>
]]></content>
<categories>
<category>web</category>
<category>angularjs</category>
</categories>
<tags>
<tag>angularjs</tag>
</tags>
</entry>
<entry>
<title>css 定位控制页面布局</title>
<url>/web/css/css%20%E5%AE%9A%E4%BD%8D%E6%8E%A7%E5%88%B6%E9%A1%B5%E9%9D%A2%E5%B8%83%E5%B1%80/</url>
<content><![CDATA[<p>浮动布局的优势在于灵活,却无法实现精确定位,很多布局效果无法实现。</p>
<p>css 定位(css position)可以实现精确定位网页元素的位置。当把元素的 css 属性 position 配置为非 static 后,我们称此元素为 <strong>定位元素</strong> 。<strong>定位元素</strong> 可通过设置坐标值 left、top、right、bottom 来精确控制元素在文档中的位置。</p>
<h1 id="position-属性值"><a href="#position-属性值" class="headerlink" title="position 属性值"></a>position 属性值</h1><h2 id="static"><a href="#static" class="headerlink" title="static"></a>static</h2><p>静态定位是自然流元素,是position 的默认值,表示按照文档流顺序定位元素,不能通过 left、top、right、bottom来改变元素位置。 </p>
<h2 id="relative"><a href="#relative" class="headerlink" title="relative"></a>relative</h2><p>相对定位,不脱离文档流,可以通过修改坐标值来调整元素位置。</p>
<p>坐标值的参考物为元素的原始位置。</p>
<h2 id="absolute"><a href="#absolute" class="headerlink" title="absolute"></a>absolute</h2><p>绝对定位,当绝对定位元素设置了坐标值后,该元素才会在对应方向脱离文档流,否则不会脱离文档流。</p>
<p>坐标值的参照物为离其最近的为 <strong>定位元素</strong> 的<strong>父元素</strong>。</p>
<p>如果绝对定位元素只设置了 absolute,而没有设置坐标值时,则该元素没有脱离文档流,其位置依旧会被直接父元素所影响。下面示例中的绝对定位元素 .child 只设置了 left,所以其垂直方向没有脱离文档流,其位置依旧会受父元素位置的影响。</p>
<figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="meta"><!DOCTYPE <span class="meta-keyword">html</span>></span></span><br><span class="line"><span class="tag"><<span class="name">html</span> <span class="attr">lang</span>=<span class="string">"en"</span>></span></span><br><span class="line"></span><br><span class="line"><span class="tag"><<span class="name">head</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"viewport"</span> <span class="attr">content</span>=<span class="string">"width=device-width, initial-scale=1.0"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">title</span>></span>Document<span class="tag"></<span class="name">title</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">style</span>></span><span class="css"></span></span><br><span class="line"><span class="css"> <span class="selector-class">.relative</span> {</span></span><br><span class="line"><span class="css"> <span class="attribute">position</span>: relative;</span></span><br><span class="line"><span class="css"> <span class="attribute">background-color</span>: lime;</span></span><br><span class="line"><span class="css"> <span class="attribute">height</span>: <span class="number">300px</span>;</span></span><br><span class="line"><span class="css"> <span class="attribute">width</span>: <span class="number">300px</span>;</span></span><br><span class="line"><span class="css"> <span class="attribute">padding</span>: <span class="number">30px</span>;</span></span><br><span class="line"><span class="css"> }</span></span><br><span class="line"><span class="css"></span></span><br><span class="line"><span class="css"> <span class="selector-class">.wrapper</span> {</span></span><br><span class="line"><span class="css"> <span class="attribute">background-color</span>: lightblue;</span></span><br><span class="line"><span class="css"> <span class="attribute">height</span>: <span class="number">200px</span>;</span></span><br><span class="line"><span class="css"> <span class="attribute">width</span>: <span class="number">200px</span>;</span></span><br><span class="line"><span class="css"> }</span></span><br><span class="line"><span class="css"></span></span><br><span class="line"><span class="css"> <span class="selector-class">.child</span> {</span></span><br><span class="line"><span class="css"> <span class="attribute">background-color</span>: lightcoral;</span></span><br><span class="line"><span class="css"> <span class="attribute">height</span>: <span class="number">80px</span>;</span></span><br><span class="line"><span class="css"> <span class="attribute">width</span>: <span class="number">80px</span>;</span></span><br><span class="line"><span class="css"> <span class="attribute">position</span>: absolute;</span></span><br><span class="line"><span class="css"> <span class="attribute">left</span>: <span class="number">30px</span>;</span></span><br><span class="line"><span class="css"> }</span></span><br><span class="line"><span class="css"> </span><span class="tag"></<span class="name">style</span>></span></span><br><span class="line"><span class="tag"></<span class="name">head</span>></span></span><br><span class="line"></span><br><span class="line"><span class="tag"><<span class="name">body</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"relative"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"wrapper"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"child"</span>></span>absolute 只设置了left<span class="tag"></<span class="name">div</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">div</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">div</span>></span></span><br><span class="line"></span><br><span class="line"><span class="tag"></<span class="name">body</span>></span></span><br><span class="line"></span><br><span class="line"><span class="tag"></<span class="name">html</span>></span></span><br></pre></td></tr></table></figure>
<img src="/web/css/css%20%E5%AE%9A%E4%BD%8D%E6%8E%A7%E5%88%B6%E9%A1%B5%E9%9D%A2%E5%B8%83%E5%B1%80/absolute-1.png" class="">
<p>当给其父元素 .wrapper 设置属性 ‘margin:30’ 后,父元素会在垂直方向影响到元素 .child 的位置,因为 .child 在水平方向已脱离文档流(设置了 left 属性),故水平方向并不受父元素影响,效果如下所示:</p>
<img src="/web/css/css%20%E5%AE%9A%E4%BD%8D%E6%8E%A7%E5%88%B6%E9%A1%B5%E9%9D%A2%E5%B8%83%E5%B1%80/absolute-2.png" class="">
<h2 id="fixed"><a href="#fixed" class="headerlink" title="fixed"></a>fixed</h2><p>固定定位,是绝对定位的特性形式。</p>
<p>坐标值的参考物为浏览器窗口。</p>
]]></content>
<categories>
<category>web</category>
<category>css</category>
</categories>
<tags>
<tag>css</tag>
</tags>
</entry>
<entry>
<title>css 之 Flex 布局</title>
<url>/web/css/Flex/</url>
<content><![CDATA[<h1 id="1-概要"><a href="#1-概要" class="headerlink" title="1 概要"></a>1 概要</h1><p>Flex 布局是 w3c2009 年提出的方案,目前已得到所有浏览器的支持。</p>
<p>Flex(Flexible Box)为弹性布局。采用 Flex 布局的元素被称为<strong>容器</strong>,其<strong>直接子元素</strong>被称为<strong>成员</strong>。成员元素的 float 、clear、vertical-align 属性将失效。</p>
<p>容器有<strong>主轴</strong>和<strong>副轴(副轴和主轴垂直)</strong>,主轴默认为 x 轴,副轴默认为 y 轴,容器左上角为 主、副轴的默认起始点。</p>
<p>下面将元素的 <code>display</code> 属性设置成 <code>flex</code> 或 <code>inline-flex</code> ,即创建了一个 Flex 容器:</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="selector-class">.container</span> {</span><br><span class="line"> diaplay:flex;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="selector-class">.container</span> {</span><br><span class="line"><span class="attribute">display</span>: inline-flex;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h1 id="2-可以解决什么问题"><a href="#2-可以解决什么问题" class="headerlink" title="2 可以解决什么问题"></a>2 可以解决什么问题</h1><p>Flex 布局可以解决如下问题:</p>
<ul>
<li>响应式设计</li>
<li>列等高问题</li>
<li>内容居中</li>
</ul>
<h1 id="3-使用方法"><a href="#3-使用方法" class="headerlink" title="3 使用方法"></a>3 使用方法</h1><h2 id="3-1-容器可配置属性"><a href="#3-1-容器可配置属性" class="headerlink" title="3.1 容器可配置属性"></a>3.1 容器可配置属性</h2><h3 id="3-1-1-flex-direction"><a href="#3-1-1-flex-direction" class="headerlink" title="3.1.1 flex-direction"></a>3.1.1 flex-direction</h3><p>此属性用来配置<strong>主轴方向</strong> 和 <strong>成员排列方向</strong>,默认主轴为 x 轴,成员沿 x 轴从左到右依次排序。</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="attribute">flex-direction</span>: row | //默认值,配置 x 轴为主轴,成员沿 x 轴,从左到右排列</span><br><span class="line"> row-reverse | //配置 x 轴为主轴,表示成员沿 x 轴,从右到左排列</span><br><span class="line"> column | //表示成员沿 y 轴,从上到下排列</span><br><span class="line"> column-reverse; //表示成员沿 y 轴,从下到上排列</span><br></pre></td></tr></table></figure>
<p>下面图依次展示了不同值的排列效果:</p>
<img src="/web/css/Flex/flex-direction.png" class="">
<h3 id="3-1-2-flex-wrap"><a href="#3-1-2-flex-wrap" class="headerlink" title="3.1.2 flex-wrap"></a>3.1.2 flex-wrap</h3><p>当一行排不下时,可以用此属性设置成员是否要换行。默认值为不换行,各成员缩小比例避免溢出容器。</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="selector-class">.box</span>{</span><br><span class="line"> <span class="attribute">flex-wrap</span>: nowrap | //默认值,不换行</span><br><span class="line"> wrap | // 换行</span><br><span class="line"> wrap-reverse; //反方向换行</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>下面图依次展示了 nowap、wrap、wrap-reverse 的设置效果:</p>
<img src="/web/css/Flex/flex-wrap.png" class="">
<h3 id="3-1-3-flex-flow"><a href="#3-1-3-flex-flow" class="headerlink" title="3.1.3 flex-flow"></a>3.1.3 flex-flow</h3><p><code>flex-flow</code> 是 <code>flex-direction</code> 属性和 <code>flex-wrap</code> 属性的简写形式,默认值为<code>row nowrap</code>。</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="selector-class">.box</span> {</span><br><span class="line"> <span class="attribute">flex-flow</span>: <flex-direction> || <flex-wrap>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h3 id="3-1-4-justify-content"><a href="#3-1-4-justify-content" class="headerlink" title="3.1.4 justify-content"></a>3.1.4 justify-content</h3><p>此属性用来设置成员在主轴上的对齐方式。</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="selector-class">.box</span> {</span><br><span class="line"> <span class="attribute">justify-content</span>: flex-start | //默认值,左对齐</span><br><span class="line"> flex-end | //右对齐</span><br><span class="line"> center | //居中</span><br><span class="line"> space-between | //两端对齐,成员间的间隔相同 </span><br><span class="line"> space-around;//成员间的间隔相同,成员间的间隔比成员和边框的距离大</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>下面是假设主轴为水平方向时各个值的设置效果</p>
<img src="/web/css/Flex/justify-content.png" class="">
<h3 id="3-1-5-align-items"><a href="#3-1-5-align-items" class="headerlink" title="3.1.5 align-items"></a>3.1.5 align-items</h3><p>此属性用来设置成员在副轴上的对齐方式。默认值为 stretch,使得当成员没有设置副轴方向大小(或设置为auto)时,则成员撑满副轴方向的空间。</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="selector-class">.box</span> {</span><br><span class="line"> <span class="attribute">align-items</span>: stretch |//默认值,当成员没设置高度或设置为auto时,成员会填满副轴方向的空间</span><br><span class="line"> center | //在副轴方向居中</span><br><span class="line"> flex-start |//与副轴的起点对齐</span><br><span class="line"> flex-end | //与副轴的终点对齐</span><br><span class="line"> baseline | //成员的第一行文字基线对齐 </span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>下面是假设主轴为水平方向时,各值的设置效果</p>
<img src="/web/css/Flex/align-items.png" class="">
<h3 id="3-1-6-align-content"><a href="#3-1-6-align-content" class="headerlink" title="3.1.6 align-content"></a>3.1.6 align-content</h3><p>当 flex-wrap 配置了 wrap 时,可通过 align-content 来配置多根轴线在副轴的对齐方式。</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="selector-class">.box</span> {</span><br><span class="line"> <span class="attribute">align-content</span>: stretch | //在副轴沾满整个空间</span><br><span class="line"> flex-start | //与副轴的开始对齐</span><br><span class="line"> flex-end | //与副轴的终点对齐</span><br><span class="line"> center | //在副轴巨中</span><br><span class="line"> space-between | //与副轴两端对齐,轴线之间的间隔平均分布 </span><br><span class="line"> space-around //每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍 </span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<img src="/web/css/Flex/align-content.png" class="">
<h2 id="3-2-成员可配置属性"><a href="#3-2-成员可配置属性" class="headerlink" title="3.2 成员可配置属性"></a>3.2 成员可配置属性</h2><h3 id="3-2-1-order"><a href="#3-2-1-order" class="headerlink" title="3.2.1 order"></a>3.2.1 order</h3><p>此属性定义成员的排列顺序。数值越小,排列越靠前,默认为0。</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="selector-class">.item</span> {</span><br><span class="line"> <span class="attribute">order</span>: <integer>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h3 id="3-2-2-flex-grow"><a href="#3-2-2-flex-grow" class="headerlink" title="3.2.2 flex-grow"></a>3.2.2 flex-grow</h3><p>此属性用来定义成员的放大比例,默认值为 0,即如果存在剩余空间成员也不放大。</p>
<p>如果所有项目的<code>flex-grow</code>属性都为1,则它们将等分剩余空间(如果有的话)。</p>
<p>如果一个项目的<code>flex-grow</code>属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="selector-class">.item</span> {</span><br><span class="line"> <span class="attribute">flex-grow</span>: <number>; <span class="comment">/* default 0 */</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<img src="/web/css/Flex/flex-grow.png" class="">
<h3 id="3-2-3-flex-shrink"><a href="#3-2-3-flex-shrink" class="headerlink" title="3.2.3 flex-shrink"></a>3.2.3 flex-shrink</h3><p>此属性定义了成员的缩小比例,默认为1,即如果空间不足,该项目将缩小。</p>
<p>如果所有项目的<code>flex-shrink</code>属性都为1,当空间不足时,都将等比例缩小。</p>
<p>如果一个项目的<code>flex-shrink</code>属性为0,其他项目都为1,则空间不足时,前者不缩小。</p>
<p>负值对该属性无效。</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="selector-class">.item</span> {</span><br><span class="line"> <span class="attribute">flex-shrink</span>: <number>; <span class="comment">/* default 1 */</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<img src="/web/css/Flex/flex-shrink.png" class="">
<h3 id="3-2-3-flex-base"><a href="#3-2-3-flex-base" class="headerlink" title="3.2.3 flex-base"></a>3.2.3 flex-base</h3><p>此属性用来给成员预分配主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为<code>auto</code>,即项目的本来大小。</p>
<p>它可以设为跟<code>width</code>或<code>height</code>属性一样的值(比如350px),则项目将占据固定空间。</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="selector-class">.item</span> {</span><br><span class="line"> <span class="attribute">flex-basis</span>: <length> | auto; <span class="comment">/* default auto */</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h3 id="3-2-4-flex"><a href="#3-2-4-flex" class="headerlink" title="3.2.4 flex"></a>3.2.4 flex</h3><p>此属性是<code>flex-grow</code>, <code>flex-shrink</code> 和 <code>flex-basis</code>的简写,默认值为<code>0 1 auto</code>。后两个属性可选。</p>
<p>该属性有两个快捷值:<code>auto</code> (<code>1 1 auto</code>) 和 none (<code>0 0 auto</code>)。</p>
<p>建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="selector-class">.item</span> {</span><br><span class="line"> <span class="attribute">flex</span>: none | [ <<span class="string">'flex-grow'</span>> <<span class="string">'flex-shrink'</span>>? || <<span class="string">'flex-basis'</span>> ]</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h3 id="3-2-5-align-self"><a href="#3-2-5-align-self" class="headerlink" title="3.2.5 align-self"></a>3.2.5 align-self</h3><p>此属性允许单个成员配置与其他成员不一样的对齐方式(在副轴方向),可覆盖<code>align-items</code>属性。默认值为<code>auto</code>,表示继承父元素的<code>align-items</code>属性,如果没有父元素,则等同于<code>stretch</code>。</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="selector-class">.item</span> {</span><br><span class="line"> <span class="attribute">align-self</span>: auto | flex-start | flex-end | center | baseline | stretch;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h1 id="4-示例"><a href="#4-示例" class="headerlink" title="4 示例"></a>4 示例</h1><h2 id="4-1-居中"><a href="#4-1-居中" class="headerlink" title="4.1 居中"></a>4.1 居中</h2><p>给 flex 布局的成员设置 margin:auto 时 ,自动的外边距会占据全部的可用空间,从而达到居中的效果。</p>
<figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"containerCenter"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"center"</span>></span>center<span class="tag"></<span class="name">div</span>></span></span><br><span class="line"><span class="tag"></<span class="name">div</span>></span></span><br></pre></td></tr></table></figure>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="selector-class">.containerCenter</span> {</span><br><span class="line"> <span class="attribute">height</span>: <span class="number">500px</span>;</span><br><span class="line"> <span class="attribute">display</span>: flex;</span><br><span class="line"> <span class="attribute">background-color</span>: greenyellow;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.center</span> {</span><br><span class="line"> <span class="attribute">background-color</span>: hotpink;</span><br><span class="line"> <span class="attribute">margin</span>: auto;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>参考链接:</p>
<p><a href="http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html">http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html</a></p>
<p><a href="https://developer.mozilla.org/zh-CN/docs/Web/CSS/flex">https://developer.mozilla.org/zh-CN/docs/Web/CSS/flex</a></p>
<p><a href="https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Flexible_Box_Layout/Mixins">https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Flexible_Box_Layout/Mixins</a></p>
]]></content>
<categories>
<category>web</category>
<category>css</category>
</categories>
<tags>
<tag>css flex 自适应</tag>
</tags>
</entry>
<entry>
<title>css 图片样式</title>
<url>/web/css/css%E5%9B%BE%E7%89%87%E6%A0%B7%E5%BC%8F/</url>
<content><![CDATA[<h1 id="img元素"><a href="#img元素" class="headerlink" title="img元素"></a>img元素</h1><p>使用 img 元素时,可以使用边框( border)、大小(width、height)、横向对齐(设置父元素的text-align)、纵向对齐(vertical-align)、文字环绕(float)等一些效果。 </p>
<p>当只设置图片的宽或高时,图片整体大小会等比例自动修改。</p>
<figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="meta"><!DOCTYPE <span class="meta-keyword">html</span>></span></span><br><span class="line"><span class="tag"><<span class="name">html</span> <span class="attr">lang</span>=<span class="string">"en"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">head</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span> /></span></span><br><span class="line"> <span class="tag"><<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"viewport"</span> <span class="attr">content</span>=<span class="string">"width=device-width, initial-scale=1.0"</span> /></span></span><br><span class="line"> <span class="tag"><<span class="name">title</span>></span>Document<span class="tag"></<span class="name">title</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">style</span>></span><span class="css"></span></span><br><span class="line"><span class="css"> <span class="selector-class">.wrapper</span> {</span></span><br><span class="line"><span class="css"> <span class="attribute">text-align</span>: center;</span></span><br><span class="line"><span class="css"> }</span></span><br><span class="line"><span class="css"></span></span><br><span class="line"><span class="css"> <span class="selector-class">.imgItem</span> {</span></span><br><span class="line"><span class="css"> <span class="attribute">width</span>: <span class="number">100px</span>; <span class="comment">/*只设置宽度时,高度会等比例自动调整*/</span></span></span><br><span class="line"><span class="css"> }</span></span><br><span class="line"><span class="css"> </span><span class="tag"></<span class="name">style</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">head</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">body</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"wrapper"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">img</span> <span class="attr">class</span>=<span class="string">"imgItem"</span> <span class="attr">src</span>=<span class="string">"../img/1.jpg"</span> <span class="attr">alt</span>=<span class="string">""</span> /></span></span><br><span class="line"> <span class="tag"></<span class="name">div</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">body</span>></span></span><br><span class="line"><span class="tag"></<span class="name">html</span>></span></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>img 是行内元素(line),当和其他行内元素(如包含在 span 内的文字)在同一行时,有时需要调整 img 的位置,从而使得图片和文字的位置和谐一些,可以配置 img 为相对定位,然后再进行 img 位置的微调整。</p>
<figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="meta"><!DOCTYPE <span class="meta-keyword">html</span>></span></span><br><span class="line"><span class="tag"><<span class="name">html</span> <span class="attr">lang</span>=<span class="string">"en"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">head</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span> /></span></span><br><span class="line"> <span class="tag"><<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"viewport"</span> <span class="attr">content</span>=<span class="string">"width=device-width, initial-scale=1.0"</span> /></span></span><br><span class="line"> <span class="tag"><<span class="name">title</span>></span>Document<span class="tag"></<span class="name">title</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">style</span>></span><span class="css"></span></span><br><span class="line"><span class="css"> <span class="selector-class">.imgItem</span> {</span></span><br><span class="line"><span class="css"> <span class="attribute">width</span>: <span class="number">1rem</span>; <span class="comment">/*只设置宽度时,高度会等比例自动调整*/</span></span></span><br><span class="line"><span class="css"> <span class="attribute">position</span>: relative;</span></span><br><span class="line"><span class="css"> <span class="attribute">top</span>: <span class="number">2px</span>; <span class="comment">/*微调top值,使img到达理想位置*/</span></span></span><br><span class="line"><span class="css"> }</span></span><br><span class="line"><span class="css"> </span><span class="tag"></<span class="name">style</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">head</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">body</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">img</span> <span class="attr">class</span>=<span class="string">"imgItem"</span> <span class="attr">src</span>=<span class="string">"../img/1.jpg"</span> <span class="attr">alt</span>=<span class="string">""</span> /></span>我是文字</span><br><span class="line"> <span class="tag"></<span class="name">body</span>></span></span><br><span class="line"><span class="tag"></<span class="name">html</span>></span></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<h1 id="背景图"><a href="#背景图" class="headerlink" title="背景图"></a>背景图</h1><p>background-size 设置背景图片大小。</p>
<p>1、值为 contain</p>
<p> 缩放背景,将图片完全装入背景区(保持图片宽高比例),背景区有可能会出现空白。</p>
<p>2、值为 cover </p>
<p> 缩放背景,使其完全覆盖背景区(保持图片的宽高比),当背景图和背景区大小不同时,背景图有些部分会被裁剪掉</p>
<p>3、值为宽度和高度</p>
<p> 如果只设置一个值,则该值为宽度,高度值为 auto</p>
<p> 如果设置两个值,则第一个为宽度,第二个为高度</p>
<p>当设定多个图片时,需要提供多个值,通过逗号分隔</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">background-size: 50% 25%, contain, 3em;</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>web</category>
<category>css</category>
</categories>
<tags>
<tag>css</tag>
</tags>
</entry>
<entry>
<title>css 居中</title>
<url>/web/css/css%E5%B1%85%E4%B8%AD/</url>
<content><![CDATA[<p>要实现一个页面效果其实可以用很多方法来实现,下面从使用场景的角度来列出常用方法。</p>
<h1 id="1-水平居中"><a href="#1-水平居中" class="headerlink" title="1 水平居中"></a>1 水平居中</h1><h2 id="1-1-容器居中(margin)"><a href="#1-1-容器居中(margin)" class="headerlink" title="1.1 容器居中(margin)"></a>1.1 容器居中(margin)</h2><p>容器自身居中,给容器使用 <code>margin:0 auto</code> 就可以达到效果。</p>
<figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="meta"><!DOCTYPE <span class="meta-keyword">html</span>></span></span><br><span class="line"><span class="tag"><<span class="name">html</span> <span class="attr">lang</span>=<span class="string">"en"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">head</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span> /></span></span><br><span class="line"> <span class="tag"><<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"viewport"</span> <span class="attr">content</span>=<span class="string">"width=device-width, initial-scale=1.0"</span> /></span></span><br><span class="line"> <span class="tag"><<span class="name">title</span>></span>Document<span class="tag"></<span class="name">title</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">style</span>></span><span class="css"></span></span><br><span class="line"><span class="css"> <span class="selector-class">.container</span> {</span></span><br><span class="line"><span class="css"> <span class="attribute">background-color</span>: yellow;</span></span><br><span class="line"><span class="css"> <span class="attribute">margin</span>: <span class="number">0</span> auto;</span></span><br><span class="line"><span class="css"> <span class="attribute">width</span>: <span class="built_in">calc</span>(<span class="number">100%</span> - <span class="number">4rem</span>);</span></span><br><span class="line"><span class="css"> }</span></span><br><span class="line"><span class="css"> </span><span class="tag"></<span class="name">style</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">head</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">body</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"container"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">span</span>></span>hello<span class="tag"></<span class="name">span</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">div</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">body</span>></span></span><br><span class="line"><span class="tag"></<span class="name">html</span>></span></span><br></pre></td></tr></table></figure>
<h2 id="1-2-容器内子元素-flex"><a href="#1-2-容器内子元素-flex" class="headerlink" title="1.2 容器内子元素(flex)"></a>1.2 容器内子元素(flex)</h2><p>给 flex 布局的成员设置 margin:auto 时 ,自动的外边距会占据全部的可用空间,从而达到居中的效果。</p>
<figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="meta"><!DOCTYPE <span class="meta-keyword">html</span>></span></span><br><span class="line"><span class="tag"><<span class="name">html</span> <span class="attr">lang</span>=<span class="string">"en"</span>></span></span><br><span class="line"></span><br><span class="line"><span class="tag"><<span class="name">head</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"viewport"</span> <span class="attr">content</span>=<span class="string">"width=device-width, initial-scale=1.0"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">title</span>></span>Document<span class="tag"></<span class="name">title</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">style</span>></span><span class="css"></span></span><br><span class="line"><span class="css"> <span class="selector-class">.containerCenter</span> {</span></span><br><span class="line"><span class="css"> <span class="attribute">height</span>: <span class="number">500px</span>;</span></span><br><span class="line"><span class="css"> <span class="attribute">display</span>: flex;</span></span><br><span class="line"><span class="css"> <span class="attribute">background-color</span>: greenyellow;</span></span><br><span class="line"><span class="css"> }</span></span><br><span class="line"><span class="css"></span></span><br><span class="line"><span class="css"> <span class="selector-class">.center</span> {</span></span><br><span class="line"><span class="css"> <span class="attribute">background-color</span>: hotpink;</span></span><br><span class="line"><span class="css"> <span class="attribute">margin</span>: auto;</span></span><br><span class="line"><span class="css"> }</span></span><br><span class="line"><span class="css"> </span><span class="tag"></<span class="name">style</span>></span></span><br><span class="line"><span class="tag"></<span class="name">head</span>></span></span><br><span class="line"></span><br><span class="line"><span class="tag"><<span class="name">body</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"containerCenter"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"center"</span>></span>center<span class="tag"></<span class="name">div</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">div</span>></span></span><br><span class="line"><span class="tag"></<span class="name">body</span>></span></span><br><span class="line"></span><br><span class="line"><span class="tag"></<span class="name">html</span>></span></span><br></pre></td></tr></table></figure>
<h2 id="1-3-文本居中-text-align"><a href="#1-3-文本居中-text-align" class="headerlink" title="1.3 文本居中(text-align)"></a>1.3 文本居中(text-align)</h2><p>让文本居中,可以在块级容器上使用 <code>text-aligin:center</code> 来达到效果。</p>
<figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="meta"><!DOCTYPE <span class="meta-keyword">html</span>></span></span><br><span class="line"><span class="tag"><<span class="name">html</span> <span class="attr">lang</span>=<span class="string">"en"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">head</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span> /></span></span><br><span class="line"> <span class="tag"><<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"viewport"</span> <span class="attr">content</span>=<span class="string">"width=device-width, initial-scale=1.0"</span> /></span></span><br><span class="line"> <span class="tag"><<span class="name">title</span>></span>Document<span class="tag"></<span class="name">title</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">head</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">body</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"container"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">div</span> <span class="attr">style</span>=<span class="string">"text-align: center;"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">span</span>></span>给块状的父元素设置 text-align: center<span class="tag"></<span class="name">span</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">div</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">div</span> <span class="attr">style</span>=<span class="string">"text-align: center;"</span>></span></span><br><span class="line"> 给块状的父元素设置 text-align: center</span><br><span class="line"> <span class="tag"></<span class="name">div</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">div</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">body</span>></span></span><br><span class="line"><span class="tag"></<span class="name">html</span>></span></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<h1 id="2-垂直居中"><a href="#2-垂直居中" class="headerlink" title="2 垂直居中"></a>2 垂直居中</h1><h2 id="2-1-遮罩(position)"><a href="#2-1-遮罩(position)" class="headerlink" title="2.1 遮罩(position)"></a>2.1 遮罩(position)</h2><p>这个方法可以适用于遮罩场景。使用 position,将其值配置为 fixed 、 relative 或 absolute 使得元素位置可移动。再通过 top left 等属性调整元素位置。下面例子中,当配置值为 relative 时,需要将html body 的高度都设置为 100% 才能达到让 .center 元素垂直居中的效果,所以下面使用 absolute 来举例。</p>
<figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="meta"><!DOCTYPE <span class="meta-keyword">html</span>></span></span><br><span class="line"><span class="tag"><<span class="name">html</span> <span class="attr">lang</span>=<span class="string">"en"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">head</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span> /></span></span><br><span class="line"> <span class="tag"><<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"viewport"</span> <span class="attr">content</span>=<span class="string">"width=device-width, initial-scale=1.0"</span> /></span></span><br><span class="line"> <span class="tag"><<span class="name">title</span>></span>Document<span class="tag"></<span class="name">title</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">style</span>></span><span class="css"></span></span><br><span class="line"><span class="css"> <span class="selector-class">.center</span> {</span></span><br><span class="line"><span class="css"> <span class="attribute">width</span>: <span class="number">200px</span>;</span></span><br><span class="line"><span class="css"> <span class="attribute">height</span>: <span class="number">200px</span>;</span></span><br><span class="line"><span class="css"> <span class="attribute">background-color</span>: red;</span></span><br><span class="line"><span class="css"> <span class="attribute">margin</span>: <span class="number">0</span> auto;</span></span><br><span class="line"><span class="css"> <span class="attribute">position</span>: absolute;</span></span><br><span class="line"><span class="css"> <span class="attribute">top</span>: <span class="built_in">calc</span>(<span class="number">50%</span> - (<span class="number">200px</span> / <span class="number">2</span>));</span></span><br><span class="line"><span class="css"> <span class="attribute">left</span>: <span class="built_in">calc</span>(<span class="number">50%</span> - (<span class="number">200px</span> / <span class="number">2</span>));</span></span><br><span class="line"><span class="css"> }</span></span><br><span class="line"><span class="css"> </span><span class="tag"></<span class="name">style</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">head</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">body</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"center"</span>></span><span class="tag"></<span class="name">div</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">body</span>></span></span><br><span class="line"><span class="tag"></<span class="name">html</span>></span></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<h2 id="2-2-文字居中(line-height)"><a href="#2-2-文字居中(line-height)" class="headerlink" title="2.2 文字居中(line-height)"></a>2.2 文字居中(line-height)</h2><p>当希望使文字在垂直方向居中时,可以将 line-height 和 height 设置成一样,来达到效果。</p>
<figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="meta"><!DOCTYPE <span class="meta-keyword">html</span>></span></span><br><span class="line"><span class="tag"><<span class="name">html</span> <span class="attr">lang</span>=<span class="string">"en"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">head</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span> /></span></span><br><span class="line"> <span class="tag"><<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"viewport"</span> <span class="attr">content</span>=<span class="string">"width=device-width, initial-scale=1.0"</span> /></span></span><br><span class="line"> <span class="tag"><<span class="name">title</span>></span>Document<span class="tag"></<span class="name">title</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">style</span>></span><span class="css"></span></span><br><span class="line"><span class="css"> <span class="selector-class">.textCenter</span> {</span></span><br><span class="line"><span class="css"> <span class="attribute">height</span>: <span class="number">200px</span>;</span></span><br><span class="line"><span class="css"> <span class="attribute">width</span>: <span class="number">200px</span>;</span></span><br><span class="line"><span class="css"> <span class="attribute">text-align</span>: center; <span class="comment">/*横向居中*/</span></span></span><br><span class="line"><span class="css"> <span class="attribute">line-height</span>: <span class="number">200px</span>; <span class="comment">/*将行高和height设置成一样值,使其垂直居中*/</span></span></span><br><span class="line"><span class="css"> <span class="attribute">background-color</span>: violet;</span></span><br><span class="line"><span class="css"> }</span></span><br><span class="line"><span class="css"> </span><span class="tag"></<span class="name">style</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">head</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">body</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"textCenter"</span>></span>我是文字我想居中<span class="tag"></<span class="name">div</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">body</span>></span></span><br><span class="line"><span class="tag"></<span class="name">html</span>></span></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<h1 id="3-flex"><a href="#3-flex" class="headerlink" title="3 flex"></a>3 flex</h1><p>把 flex 单独提出来,是因为 flex 设置容器内元素的垂直和水平居中都非常方便,并且无论其子元素是块状还是行内元素。</p>
<p>主轴(默认为水平方向)居中使用<code>justify-content:center</code>。</p>
<p>副轴(默认为垂直方向)居中使用<code>align-items: center</code>。</p>
<figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="meta"><!DOCTYPE <span class="meta-keyword">html</span>></span></span><br><span class="line"><span class="tag"><<span class="name">html</span> <span class="attr">lang</span>=<span class="string">"en"</span>></span></span><br><span class="line"></span><br><span class="line"><span class="tag"><<span class="name">head</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"viewport"</span> <span class="attr">content</span>=<span class="string">"width=device-width, initial-scale=1.0"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">title</span>></span>Document<span class="tag"></<span class="name">title</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">style</span>></span><span class="css"></span></span><br><span class="line"><span class="css"> <span class="selector-class">.containerCenter</span> {</span></span><br><span class="line"><span class="css"> <span class="attribute">height</span>: <span class="number">500px</span>;</span></span><br><span class="line"><span class="css"> <span class="attribute">display</span>: flex;</span></span><br><span class="line"><span class="css"> <span class="attribute">background-color</span>: greenyellow;</span></span><br><span class="line"><span class="css"> <span class="attribute">justify-content</span>: center;</span></span><br><span class="line"><span class="css"> <span class="attribute">align-items</span>: center;</span></span><br><span class="line"><span class="css"> }</span></span><br><span class="line"><span class="css"> </span><span class="tag"></<span class="name">style</span>></span></span><br><span class="line"><span class="tag"></<span class="name">head</span>></span></span><br><span class="line"></span><br><span class="line"><span class="tag"><<span class="name">body</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"containerCenter"</span>></span></span><br><span class="line"> hello</span><br><span class="line"> <span class="tag"></<span class="name">div</span>></span></span><br><span class="line"><span class="tag"></<span class="name">body</span>></span></span><br><span class="line"></span><br><span class="line"><span class="tag"></<span class="name">html</span>></span></span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>web</category>
<category>css</category>
</categories>
<tags>
<tag>css</tag>
</tags>
</entry>
<entry>
<title>Babel</title>
<url>/web/babel/Babel/</url>
<content><![CDATA[<h1 id="1-Babel-是什么"><a href="#1-Babel-是什么" class="headerlink" title="1 Babel 是什么"></a>1 Babel 是什么</h1><p>Babel 是一个 JS 编译器,能够将 ES6+ 版本的 JS 语法编译为向后兼容的 JS 语法,进而使我们无需等待浏览器支持就可以使用新语法。</p>
<h1 id="2-安装"><a href="#2-安装" class="headerlink" title="2 安装"></a>2 安装</h1><p>通过下面命令安装所需包:</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">npm install --save-dev @babel/core @babel/cli @babel/preset-env</span><br></pre></td></tr></table></figure>
<h2 id="2-1-安装包介绍"><a href="#2-1-安装包介绍" class="headerlink" title="2.1 安装包介绍"></a>2.1 安装包介绍</h2><h3 id="2-1-1-babel-core"><a href="#2-1-1-babel-core" class="headerlink" title="2.1.1 @babel/core"></a>2.1.1 @babel/core</h3><p> @babel/core 是 Babel 的核心模块,可以将代码解析成 AST,各个插件会在 AST 的基础上进行语法转换。</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="keyword">const</span> babel = <span class="built_in">require</span>(<span class="string">"@babel/core"</span>);</span><br><span class="line"></span><br><span class="line">babel.transform(<span class="string">"code"</span>, optionsObject);</span><br></pre></td></tr></table></figure>
<h3 id="2-1-2-babel-cli"><a href="#2-1-2-babel-cli" class="headerlink" title="2.1.2 @babel/cli"></a>2.1.2 @babel/cli</h3><p>@babel/cli 是 Babel 的命令行工具,可以使我们通过命令行使用使用 Babel。</p>
<p>安装后可以通过下面方式使用 @babel/cli:</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">npm install --save-dev @babel/core @babel/cli</span><br><span class="line"></span><br><span class="line">./node_modules/.bin/babel src --out-dir lib</span><br></pre></td></tr></table></figure>
<p>这个命令将解析 src 目录中的所有 JS 文件,并将每个文件的转换结果输出到 lib 目录。 由于我们没告诉它应该如何转换,因此输出代码将与输入相同(不保留代码样式)。 我们可以通过选项参数来指定所需的转换。</p>
<h3 id="2-1-3-Plugins-amp-Presets"><a href="#2-1-3-Plugins-amp-Presets" class="headerlink" title="2.1.3 Plugins & Presets"></a>2.1.3 Plugins & Presets</h3><h4 id="2-1-3-1-Plugins(插件)"><a href="#2-1-3-1-Plugins(插件)" class="headerlink" title="2.1.3.1 Plugins(插件)"></a>2.1.3.1 Plugins(插件)</h4><p>Babel 通过具体 Plugins(插件)来进行语法转换,如 @babel/plugin-transform-arrow-functions 可以将箭头函数转换为普通函数。</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">npm install --save-dev @babel/plugin-transform-arrow-functions</span><br><span class="line"></span><br><span class="line">./node_modules/.bin/babel src --out-dir lib --plugins=@babel/plugin-transform-arrow-functions</span><br></pre></td></tr></table></figure>
<ul>
<li><p>配置</p>
<figure class="highlight json"><table><tr><td class="code"><pre><span class="line">{</span><br><span class="line"> <span class="attr">"plugins"</span>: [ <span class="string">"myPlugin"</span> ]</span><br><span class="line">}</span><br></pre></td></tr></table></figure></li>
<li><p>短名称</p>
<p>如果插件名称的前缀为 <code>babel-plugin-</code>,则可以使用它的短名称</p>
<figure class="highlight json"><table><tr><td class="code"><pre><span class="line">{</span><br><span class="line"> <span class="attr">"plugins"</span>: [</span><br><span class="line"> <span class="string">"myPlugin"</span>,</span><br><span class="line"> <span class="string">"babel-plugin-myPlugin"</span> <span class="comment">// 两个插件实际是同一个</span></span><br><span class="line"> ]</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">//这也适用于带有 scope 的插件</span></span><br><span class="line">{</span><br><span class="line"> <span class="attr">"plugins"</span>: [</span><br><span class="line"> <span class="string">"@org/babel-plugin-name"</span>,</span><br><span class="line"> <span class="string">"@org/name"</span> <span class="comment">// 两个插件实际是同一个</span></span><br><span class="line"> ]</span><br><span class="line">}</span><br></pre></td></tr></table></figure></li>
</ul>
<h4 id="2-1-3-2-Presets(预设)"><a href="#2-1-3-2-Presets(预设)" class="headerlink" title="2.1.3.2 Presets(预设)"></a>2.1.3.2 Presets(预设)</h4><p>@babel/presets-* 是一组插件的集合,安装一个 Presets 可以替代单独安装多个插件。可以通过创建自己的 Presets 来创建任意插件的组合。</p>
<p>@babel/preset-env 是最常用的 Presets,包含了支持 ES6+ 特性的大多插件。如果源码使用了不在 @babel/preset-env 中的语法,编译时会报错,可根据具体错误提示安装对应插件,并将对应插件添加到 babel 配置文件中。</p>
<ul>
<li><p>配置</p>
<p>直接配置 Presets 名称 Babel 会在 nodde_module 目录中查找:</p>
<figure class="highlight json"><table><tr><td class="code"><pre><span class="line">{</span><br><span class="line"> <span class="attr">"presets"</span>: [<span class="string">"babel-preset-myPreset"</span>]</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>也可以配置 Presets 的绝对/相对路径:</p>
<figure class="highlight json"><table><tr><td class="code"><pre><span class="line">{</span><br><span class="line"> <span class="attr">"presets"</span>: [<span class="string">"./myProject/myPreset"</span>]</span><br><span class="line">}</span><br></pre></td></tr></table></figure></li>
<li><p>短名称</p>
<p>如果 Presets 名称的前缀为 <code>babel-preset-</code>,则还可以使用它的短名称:</p>
<figure class="highlight json"><table><tr><td class="code"><pre><span class="line">{</span><br><span class="line"> <span class="attr">"presets"</span>: [</span><br><span class="line"> <span class="string">"myPreset"</span>,</span><br><span class="line"> <span class="string">"babel-preset-myPreset"</span> <span class="comment">// 这两个相同</span></span><br><span class="line"> ]</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>短名称也适用于带有冠名(scope)的 Presets:</p>
<figure class="highlight json"><table><tr><td class="code"><pre><span class="line">{</span><br><span class="line"> <span class="attr">"presets"</span>: [</span><br><span class="line"> <span class="string">"@org/babel-preset-name"</span>,</span><br><span class="line"> <span class="string">"@org/name"</span> <span class="comment">// 这两个相同</span></span><br><span class="line"> ]</span><br><span class="line">}</span><br></pre></td></tr></table></figure></li>
</ul>
<h4 id="2-1-3-3-执行顺序"><a href="#2-1-3-3-执行顺序" class="headerlink" title="2.1.3.3 执行顺序"></a>2.1.3.3 执行顺序</h4><ul>
<li><p>插件比 presets 先运行</p>
</li>
<li><p>插件按照<strong>从前往后</strong>的顺序执行</p>