-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
405 lines (353 loc) · 37.4 KB
/
atom.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
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Erobaby的博客</title>
<subtitle>一个欢乐的搬砖工</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://erobaby.me/"/>
<updated>2017-10-04T10:01:13.000Z</updated>
<id>http://erobaby.me/</id>
<author>
<name>Erobaby</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>防止搬瓦工被封的注意事项</title>
<link href="http://erobaby.me/2017/10/04/%E9%98%B2%E6%AD%A2%E6%90%AC%E7%93%A6%E5%B7%A5%E8%A2%AB%E5%B0%81%E7%9A%84%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9/"/>
<id>http://erobaby.me/2017/10/04/防止搬瓦工被封的注意事项/</id>
<published>2017-10-04T09:35:30.000Z</published>
<updated>2017-10-04T10:01:13.000Z</updated>
<content type="html"><p>善哉善哉,南无阿弥陀佛<br><a id="more"></a></p>
<h2 id="更新系统"><a href="#更新系统" class="headerlink" title="更新系统"></a>更新系统</h2><blockquote>
<p><code>yum update -y</code></p>
</blockquote>
<h2 id="禁用邮件端口"><a href="#禁用邮件端口" class="headerlink" title="禁用邮件端口"></a>禁用邮件端口</h2><ul>
<li><p>如果服务器被用来发送垃圾邮件,分分钟被封。</p>
<blockquote>
<p><code>iptables -A OUTPUT -p tcp -m multiport --dport 24,25,50,57,105,106,109,110,143,158,209,218,220,465,587 -j REJECT --reject-with tcp-reset</code></p>
<p><code>iptables -A OUTPUT -p tcp -m multiport --dport 993,995,1109,24554,60177,60179 -j REJECT --reject-with tcp-reset</code></p>
<p><code>iptables -A OUTPUT -p udp -m multiport --dport 24,25,50,57,105,106,109,110,143,158,209,218,220,465,587 -j DROP</code></p>
<p><code>iptables -A OUTPUT -p udp -m multiport --dport 993,995,1109,24554,60177,60179 -j DROP</code></p>
</blockquote>
</li>
<li><p>保存规则:</p>
<blockquote>
<p><code>iptables-save &gt; /etc/sysconfig/iptables</code> </p>
</blockquote>
<p> 实际上到这一步已经足够,重启会生效。但是如果没有保存到默认的配置文件,就需要使用下面的命令</p>
</li>
<li><p>恢复规则:</p>
<blockquote>
<p><code>iptables-restore &gt; /etc/sysconfig/iptables</code> </p>
</blockquote>
<p> 若想开机自动启用脚本,则可以使用以下命令放到系统初始化Shell脚本/etc/rc.d/rc.local中</p>
<blockquote>
<p><code>echo &#39;/sbin/iptables-restore /etc/sysconfig/iptables&#39; &gt;&gt; /etc/rc.d/rc.local</code><br> 此外使用 #service iptables save,会将规则保存到/etc/sysconfig/iptables,用此命令保存的规则开机会自动生效,所以为了统一期间,建议以后规则都保存在/etc/sysconfig/iptables下。</p>
</blockquote>
</li>
<li><p>查看iptables规则:</p>
<blockquote>
<p><code>iptables -L</code></p>
</blockquote>
</li>
</ul>
<h2 id="使用ss时,不要勾选允许来自局域网的连接"><a href="#使用ss时,不要勾选允许来自局域网的连接" class="headerlink" title="使用ss时,不要勾选允许来自局域网的连接"></a>使用ss时,不要勾选允许来自局域网的连接</h2><pre><code>如果是公网IP,容易被人扫到做坏事导致被封。
</code></pre><h2 id="尽可能的本分"><a href="#尽可能的本分" class="headerlink" title="尽可能的本分"></a>尽可能的本分</h2><pre><code>有人用它DDoS别人,被搬瓦工识别为VPS受到DDoS攻击,然后被封。
</code></pre><p>转载自 <a href="http://blog.csdn.net/letuscc/article/details/53382967" target="_blank" rel="external">http://blog.csdn.net/letuscc/article/details/53382967</a></p>
</content>
<summary type="html">
<p>善哉善哉,南无阿弥陀佛<br>
</summary>
<category term="和谐" scheme="http://erobaby.me/categories/%E5%92%8C%E8%B0%90/"/>
<category term="和谐" scheme="http://erobaby.me/tags/%E5%92%8C%E8%B0%90/"/>
</entry>
<entry>
<title>SSH免密码登陆</title>
<link href="http://erobaby.me/2017/10/04/SSH%E5%85%8D%E5%AF%86%E7%A0%81%E7%99%BB%E9%99%86/"/>
<id>http://erobaby.me/2017/10/04/SSH免密码登陆/</id>
<published>2017-10-04T09:04:54.000Z</published>
<updated>2017-10-04T12:10:10.000Z</updated>
<content type="html"><blockquote>
<p>两种方式: 使用ssh-copy-id命令和手动上传公钥</p>
</blockquote>
<a id="more"></a>
<h2 id="方法一-推荐"><a href="#方法一-推荐" class="headerlink" title="方法一(推荐)"></a>方法一(推荐)</h2><p>使用下例中ssky-keygen和ssh-copy-id,仅需通过3个步骤的简单设置而无需输入密码就能登录远程Linux主机。</p>
<p>ssh-keygen 创建公钥和密钥。<br>ssh-copy-id 把本地主机的公钥复制到远程主机的authorized_keys文件上。<br>ssh-copy-id 也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限 。</p>
<ol>
<li><p>步骤1: 用 ssh-key-gen 在本地主机上创建公钥和密钥<br> ligh@local-host$ ssh-keygen -t rsa<br> Enter file in which to save the key (/home/jsmith/.ssh/id_rsa):[Enter key]<br> Enter passphrase (empty for no passphrase): [Press enter key]<br> Enter same passphrase again: [Pess enter key]<br> Your identification has been saved in /home/jsmith/.ssh/id_rsa.<br> Your public key has been saved in /home/jsmith/.ssh/id_rsa.pub.<br> The key fingerprint is: 33:b3:fe:af:95:95:18:11:31:d5:de:96:2f:f2:35:f9<br> ligh@local-host</p>
</li>
<li><p>步骤2: 用 ssh-copy-id 把公钥复制到远程主机上<br> ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]<br> ligh@remote-host‘s password:<br> Now try logging into the machine, with ―ssh ?remote-host‘‖, and check in:<br> .ssh/authorized_keys to make sure we haven‘t added extra keys that you weren‘t expecting.<br> [注: ssh-copy-id 把密钥追加到远程主机的 .ssh/authorized_key 上.]</p>
</li>
<li><p>步骤3: 直接登录远程主机<br> ligh@local-host$ ssh remote-host<br> Last login: Sun Nov 16 17:22:33 2008 from 192.168.1.2<br> [注: SSH 不会询问密码.]<br> ligh@remote-host$<br> [注: 你现在已经登录到了远程主机上]</p>
</li>
</ol>
<h2 id="方法二"><a href="#方法二" class="headerlink" title="方法二"></a>方法二</h2><h3 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h3><ol>
<li>就是为了让两个linux机器之间使用ssh不需要用户名和密码。采用了数字签名RSA或者DSA来完成这个操作</li>
<li>模型分析<br> 假设 A (192.168.20.59)为客户机器,B(192.168.20.60)为目标机;<br> 要达到的目的:<br> A机器ssh登录B机器无需输入密码;<br> 加密方式选 rsa|dsa均可以,默认dsa</li>
</ol>
<h3 id="具体操作流程"><a href="#具体操作流程" class="headerlink" title="具体操作流程"></a>具体操作流程</h3><p>单向登陆的操作过程(能满足上边的目的):</p>
<ol>
<li>登录A机器 </li>
<li>ssh-keygen -t [rsa|dsa],将会生成密钥文件和私钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub</li>
<li>将 .pub 文件复制到B机器的 .ssh 目录, 并 cat id_rsa.pub &gt;&gt; ~/.ssh/authorized_keys</li>
<li>大功告成,从A机器登录B机器的目标账户,不再需要密码了;(直接运行 #ssh 192.168.20.60)</li>
</ol>
<p>转载自 <a href="http://blog.csdn.net/bravezhe/article/details/7302800" target="_blank" rel="external">http://blog.csdn.net/bravezhe/article/details/7302800</a></p>
</content>
<summary type="html">
<blockquote>
<p>两种方式: 使用ssh-copy-id命令和手动上传公钥</p>
</blockquote>
</summary>
<category term="Linux" scheme="http://erobaby.me/categories/Linux/"/>
<category term="Linux" scheme="http://erobaby.me/tags/Linux/"/>
</entry>
<entry>
<title>常用正则表达式</title>
<link href="http://erobaby.me/2016/06/18/%E5%B8%B8%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/"/>
<id>http://erobaby.me/2016/06/18/常用正则表达式/</id>
<published>2016-06-18T15:16:18.000Z</published>
<updated>2017-10-03T12:57:53.000Z</updated>
<content type="html"><p>正则表达式——古老而又强大的文本处理工具。仅用一段简短的表达式语句,就能快速地实现一个复杂的业务逻辑。掌握正则表达式,让你的开发效率有一个质的飞跃。<br><a id="more"></a></p>
<ol>
<li><p>校验密码强度<br>密码的强度必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间<br><code>^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$</code></p>
</li>
<li><p>校验中文<br>字符串只能是中文<br><code>^[\\u4e00-\\u9fa5]{0,}$</code></p>
</li>
<li><p>由数字,26个英文字母或下划线组成的字符串<br><code>^\\w+$</code></p>
</li>
<li><p>校验E-Mail 地址<br><code>[\\w!#$%&amp;&#39;*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&amp;&#39;*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?</code></p>
</li>
<li><p>校验身份证号码<br>15位:<br><code>^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$</code><br>18位:<br><code>^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$</code></p>
</li>
<li><p>校验日期<br>“yyyy-mm-dd“ 格式的日期校验,已考虑平闰年<br><code>^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$</code></p>
</li>
<li><p>校验金额<br>金额校验,精确到2位小数<br><code>^[0-9]+(.[0-9]{2})?$</code></p>
</li>
<li><p>校验手机号<br>下面是国内 13、15、18开头的手机号正则表达式<br><code>^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$</code></p>
</li>
<li><p>判断IE的版本<br><code>^.*MSIE [5-8](?:\\.[0-9]+)?(?!.*Trident\\/[5-9]\\.0).*$</code></p>
</li>
<li><p>校验IP-v4地址<br><code>\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b</code></p>
</li>
<li><p>校验IP-v6地址<br><code>(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))</code></p>
</li>
<li><p>检查URL的前缀<br><code>if (!s.match(/^[a-zA-Z]+:\\/\\//)){
s = &#39;http://&#39; + s;}</code></p>
</li>
<li><p>提取URL链接<br><code>^(f|ht){1}(tp|tps):\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- ./?%&amp;=]*)?</code></p>
</li>
<li><p>文件路径及扩展名校验<br><code>^([a-zA-Z]\\:|\\\\)\\\\([^\\\\]+\\\\)*[^\\/:*?&quot;&lt;&gt;|]+\\.txt(l)?$</code></p>
</li>
<li><p>提取Color Hex Codes<br><code>^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$</code></p>
</li>
<li><p>提取网页图片<br><code>\\&lt; *[img][^\\\\&gt;]*[src] *= *[\\&quot;\\&#39;]{0,1}([^\\&quot;\\&#39;\\ &gt;]*)</code></p>
</li>
<li><p>提取页面超链接<br><code>(&lt;a\\s*(?!.*\\brel=)[^&gt;]*)(href=&quot;https?:\\/\\/)((?!(?:(?:www\\.)?&#39;.implode(&#39;|(?:www\\.)?&#39;, $follow_list).&#39;))[^&quot;]+)&quot;((?!.*\\brel=)[^&gt;]*)(?:[^&gt;]*)&gt;</code></p>
</li>
<li><p>查找CSS属性<br><code>^\\s*[a-zA-Z\\-]+\\s*[:]{1}\\s[a-zA-Z0-9\\s.#]+[;]{1}</code></p>
</li>
<li><p>抽取注释<br><code>&lt;!--(.*?)--&gt;</code></p>
</li>
<li><p>匹配HTML标签<br><code>&lt;\\/?\\w+((\\s+\\w+(\\s*=\\s*(?:&quot;.*?&quot;|&#39;.*?&#39;|[\\^&#39;&quot;&gt;\\s]+))?)+\\s*|\\s*)\\/?&gt;</code></p>
</li>
</ol>
</content>
<summary type="html">
<p>正则表达式——古老而又强大的文本处理工具。仅用一段简短的表达式语句,就能快速地实现一个复杂的业务逻辑。掌握正则表达式,让你的开发效率有一个质的飞跃。<br>
</summary>
<category term="编程" scheme="http://erobaby.me/categories/%E7%BC%96%E7%A8%8B/"/>
<category term="其他" scheme="http://erobaby.me/categories/%E7%BC%96%E7%A8%8B/%E5%85%B6%E4%BB%96/"/>
<category term="正则表达式" scheme="http://erobaby.me/tags/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/"/>
</entry>
<entry>
<title>NPM入门教程</title>
<link href="http://erobaby.me/2016/05/22/NPM%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/"/>
<id>http://erobaby.me/2016/05/22/NPM入门教程/</id>
<published>2016-05-22T15:47:40.000Z</published>
<updated>2017-10-03T13:10:12.000Z</updated>
<content type="html"><p>NPM作为Node的模块管理和发布工具,作用与Ruby的gem、Python的pypl或setuptools、PHP的pear和.Net的Nuget一样。在当前前端工程化极速狂奔的年代,即使不做nodejs的开发,也需要学习和使用NPM的,谁叫grunt、bower、yeoman这一堆的工具都通过NPM发布呢?</p>
<p>本文为针对非nodejs的开发者整理的NPM使用说明。当然最好的教程还是<a href="https://docs.npmjs.com/" target="_blank" rel="external">官方文档</a><br><a id="more"></a></p>
<h3 id="什么是包"><a href="#什么是包" class="headerlink" title="什么是包"></a>什么是包</h3><p>odejs以包的形式组织程序模块,而包的定义却十分简单——包含文件内容符合规范package.json文件的目录或归档文件。并通过<package-name>@<version>来唯一标识每个包。</version></package-name></p>
<h3 id="灵魂-package-json"><a href="#灵魂-package-json" class="headerlink" title="灵魂 package.json"></a>灵魂 package.json</h3><p><img src="http://images.cnitblog.com/blog/347002/201412/231712452182038.png" alt=""></p>
<p>包的定义和NPM都围绕着package.json文件做文章,package.json文件其实就相当于JAVA中的MANIFEST.MF文件,用于存放模块的名称、版本、作者、机构、模块入口、依赖项等信息。首先我们通过<code>npm init</code>命令在当前工作目录下以用户引导的方式创建一个全新的package.json文件。然后通过<code>npm help json</code>命令打开帮助文档,并根据实际的项目需求自行初始化package.json的项目即可。下面将对基础配置项进行叙述。</p>
<p><strong>name</strong>,必选项,表示模块名称。命名时不能包含js、node、和url中需要转义的字符,不能以.和_为开头。</p>
<p><strong>version</strong>,必选项,表示模块的版本号。版本号以<code>主版本号(Major).副版本号(Minor).补丁版本号(Patch)</code>构成(如1.2.0)。而engines、dependencies和devDependencies等配置项中可使用语义化版本号语法,具体如下:<br>注意:版本号格式不对的话,在执行npm install时会报警告哦!</p>
<blockquote>
<p><strong>1.1.1</strong>:精确下载安装1.1.1版本的包<br><strong>&gt;、&lt;=、&gt;、&gt;=1.1.1</strong>:分别表示下载安装大于、小于等于、大于等于1.1.1版本的包<br><strong>1.0.1-1.1.1</strong>:表示版本范围是包含1.0.1到1.1.1版本的包<br><strong>~1.1.1</strong>:表示尽量采用靠近1.1.1版本的包,但可用的包版本范围是1.1.1-0到1.1.x-x版本的包<br><strong>~1.1</strong>:表示下载安装1.1.x-x版本的包<br><strong>~1</strong>:表示下载安装1.x.x-x版本的包<br><strong>^1.1.1</strong>:表示包版本范围是1.1.1到1.x.x-x<br><strong>^0.1.1</strong>:表示包版本范围是1.1.1到1.1.x-x<br><strong>^1.1</strong>:表示包版本范围是1.1.x-x到1.x.x-x<br><strong>^1</strong>:表示包版本范围是1.x.x-x<br><strong>空格、x、*</strong>:表示任意版本即可<br>两个版本选择器间,空格表示and关系,||表示or关系。</p>
</blockquote>
<p><strong>main</strong>,必选项,模块入口文件相对路径(相对于模块根目录)。</p>
<p><strong> description</strong>,可选项,表示模块功能描述,显示在<code>npm search &lt;package-name&gt;</code>中</p>
<p><strong>keywords</strong>,可选项,数组类型,表示模块的关键字,显示在<code>npm search &lt;package-name&gt;</code>中<br><strong>author</strong>,可选项,表示发起者信息。示例如下:</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"author"</span>:&#123;</span><br><span class="line"> <span class="string">"name"</span>: <span class="string">"fsjohnhuang"</span>,</span><br><span class="line"> <span class="string">"url"</span>: <span class="string">"http://fsjohnhuang.cnblogs.com/"</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p><strong>engines</strong>,可选项,依赖的node版本。示例如下:</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"engines"</span>:&#123;</span><br><span class="line"> <span class="string">"node"</span>: <span class="string">"&gt;= 0.8.0"</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p><strong>repository</strong>,可选项,源码托管地址。示例如下:</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"repository"</span>:&#123;</span><br><span class="line"> <span class="string">"type"</span>: <span class="string">"git"</span>,</span><br><span class="line"> <span class="string">"url"</span>: <span class="string">"https://github.com/fsjohnhuang/iPromise.git"</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p><strong>scripts</strong>,可选项,自定义在cli中输入npm 时实际执行的程序。npm默认提供大量的script供我们调用。</p>
<p><strong>dependencies</strong>和<strong>devDependencies</strong>,可选项,用于配置模块的生产环境依赖包和开发环境依赖包。当执行npm install时,npm会根据这两个配置项的值去下载安装相关的依赖包。两者的区别是devDependencies是模块开发过程的依赖包(如:grunt只在开发时有用的模块),并且当其他模块需要依赖当前模块时,当通过npm install <package-name>时会自动下载安装dependencies的包而不会下载devDependencies的包。</package-name></p>
<h3 id="NPM的配置信息"><a href="#NPM的配置信息" class="headerlink" title="NPM的配置信息"></a>NPM的配置信息</h3><p>现在我们对package.json有一定的了解了,现在就到理论+实践时间咯。在实践之前我们要先配置一下NPM的资源库(国内被墙,你懂的),内网用户还要配置一下网络代理地址等信息。</p>
<p>查看部分配置信息——<code>npm config ls</code></p>
<p>查看所有配置信息——<code>npm config ls -l</code></p>
<p>修改配置信息的三种方式:</p>
<ol>
<li><p>修改用户家目录的.npmrc文件(没有则新建一个);</p>
</li>
<li><p>通过<code>npm config set &lt;config&gt; &lt;config-value&gt;</code>命令;</p>
</li>
</ol>
<p><code>npm config set registry http://registry.npm.taobao.org/</code><br><code>npm config set proxy http://proxy.com:8081/</code></p>
<ol>
<li>通过–registry=<registry-uri>等命令可选项临时配置。</registry-uri></li>
</ol>
<p><code>npm install grunt --registry=http://registry.npm.taobao.org</code></p>
<h3 id="查找、安装-卸载、更新依赖包"><a href="#查找、安装-卸载、更新依赖包" class="headerlink" title="查找、安装/卸载、更新依赖包"></a>查找、安装/卸载、更新依赖包</h3><p>在安心玩耍之前我们要先了解一件事件,就是包的作用范围分为 <strong>全局</strong> 和 <strong>本地</strong> 两种。</p>
<p><strong>全局</strong>:用作在cli上直接调用,而无法在项目中通过require导入依赖包。如将grunt-cli安装到全局时,则可在cli中输入grunt调用了!</p>
<p><code>npm install -g grunt-cli</code></p>
<p>cmd或shell中直接调用</p>
<p><code>grunt</code></p>
<p><strong>本地</strong>:用作在项目中通过require导入依赖包,供项目使用。</p>
<p>那么全局和本地的依赖包到底是存放在哪里的呢?通过<code>npm root -g</code>和<code>npm root</code>可分别查看全局和本地的依赖包下载安装的绝对目录了。本地的依赖包会存放在当前项目根目录下的node_modules目录下。</p>
<p>现在我们可以正式操作依赖包了!</p>
<p><strong>搜索阶段(操作远程资源库中的依赖包)</strong></p>
<ol>
<li><p>搜索依赖包,<code>npm search</code>。</p>
</li>
<li><p>查看依赖包的package.json信息,<code>npm view &lt;package-name&gt;</code>。另外我们可以单独查看package.json某个配置。</p>
<blockquote>
<p>查看包的依赖关系:<code>npm view &lt;package-name&gt; dependencies</code><br>查看包的源文件地址:<code>npm view &lt;package-name&gt; repository.url</code><br>查看包所依赖的node版本号:<code>npm view &lt;package-name&gt; engines</code></p>
</blockquote>
</li>
</ol>
<p><strong>查看本地包信息</strong></p>
<ol>
<li><p>查看当前项目的本地依赖包,<code>npm list</code></p>
</li>
<li><p>查看全局依赖包,<code>npm list -g</code></p>
</li>
<li><p>查看本地依赖包是否不是最新版,<code>npm outdated &lt;package-name&gt;</code></p>
</li>
</ol>
<p><strong>安装/卸载,更新包</strong></p>
<ol>
<li><p>安装本地/全局依赖包,<code>npm install &lt;package-name&gt; / npm install -g &lt;package-name&gt;</code>(这样会下载安装最新的包,若下载安装特定版本号的包则<code>npm install &lt;package-name&gt;@&lt;version&gt;</code>)</p>
</li>
<li><p>卸载本地/全局依赖包,<code>npm uninstall &lt;package-name&gt; / npm uninstall -g &lt;package-name&gt;</code></p>
</li>
<li><p>更新本地/全局依赖包,<code>npm update &lt;package-name&gt; / npm update -g</code></p>
</li>
</ol>
<h3 id="发布包"><a href="#发布包" class="headerlink" title="发布包"></a>发布包</h3><p>站在使用者的角度,掌握上述章节的内容已经足够了,但当我们开发出好玩的项目而且又想和大家分享时,那么下面的内容就不得不了解了!</p>
<ol>
<li><p>注册一个registry帐号,<code>npm adduser</code>,然后根据引导输入帐号、密码和邮箱地址。</p>
</li>
<li><p>登录registry帐号,<code>npm login</code> ,登录信息会保存在客户端。</p>
</li>
<li><p>发布项目,<code>npm publish</code> 。(建议发布版本从1.0.0开始)</p>
</li>
</ol>
<p>经过上述步骤我们就可发布模块了。但这个时候你也许会考虑到项目中部分目录和文件不应该被发布出去,应该有一个像.gitignore的文件来配置这些排除项。看来你猜对了,那就是.npmignore文件,不过npm做得更灵活一些!</p>
<ol>
<li><p>默认不带.npmignore文件,若项目中带.gitignore则使用.gitignore文件内容的配置项;</p>
</li>
<li><p>若带.npmignore文件则不使用.gitignore文件中的配置项;</p>
</li>
<li><p>即使配置.npmignore文件,也无法排除package.json和README.* 文件;</p>
</li>
<li><p>NPM内置设定以下文件必须被排除</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">.swp</span><br><span class="line">._</span><br><span class="line">.DS_Store</span><br><span class="line">.git</span><br><span class="line">.hg</span><br><span class="line">.lock-wscript</span><br><span class="line">.svn</span><br><span class="line">.wafpickle-*</span><br><span class="line">CVS</span><br><span class="line">npm-debug.log</span><br></pre></td></tr></table></figure>
</li>
</ol>
<p>转载自:<a href="http://www.cnblogs.com/fsjohnhuang/p/4178019.html" title="view: Node魔法堂:NPM那个入门" target="_blank" rel="external">http://www.cnblogs.com/fsjohnhuang/p/4178019.html</a></p>
</content>
<summary type="html">
<p>NPM作为Node的模块管理和发布工具,作用与Ruby的gem、Python的pypl或setuptools、PHP的pear和.Net的Nuget一样。在当前前端工程化极速狂奔的年代,即使不做nodejs的开发,也需要学习和使用NPM的,谁叫grunt、bower、yeoman这一堆的工具都通过NPM发布呢?</p>
<p>本文为针对非nodejs的开发者整理的NPM使用说明。当然最好的教程还是<a href="https://docs.npmjs.com/">官方文档</a><br>
</summary>
<category term="Node" scheme="http://erobaby.me/tags/Node/"/>
</entry>
<entry>
<title>寄生兽</title>
<link href="http://erobaby.me/2016/05/22/%E5%AF%84%E7%94%9F%E5%85%BD/"/>
<id>http://erobaby.me/2016/05/22/寄生兽/</id>
<published>2016-05-22T09:25:21.000Z</published>
<updated>2017-10-03T12:58:28.000Z</updated>
<content type="html"><blockquote>
<p>新一,我查了【恶魔】这一词汇。与之最接近的生物,我觉得是人类,人类会残杀并捕食一切物种。我同伴的食谱中才不过一两种生物,算口味清淡的啦</p>
</blockquote>
<a id="more"></a>
<blockquote>
<p>异种生物间 能够相互利用 相互厮杀<br>唯独无法相互理解<br>不 我们不能以自身的价值观去解读他人<br>自以为了解其他生物这种想法<br>其实是人类的自以为是<br>其他生物可能都不是人类的朋友<br>但是 就算不知是敌是友<br>它们都是值得尊重的共存者</p>
</blockquote>
<hr>
<blockquote>
<p>保护生物是因为人类害怕孤独<br>保护环境是因为人类不想自我毁灭<br>人类从始自终都是在自我满足<br>但是我觉得这样也挺好<br>用人类的标准去批判人类是毫无意义的<br>所以 牺牲小我爱护地球这种话 根本就是自我矛盾</p>
</blockquote>
<hr>
<blockquote>
<p>不自相残杀怎么好意思叫人类?几千年来不都是这样吗,突然停了下来人口才从70亿直奔80亿的</p>
</blockquote>
<hr>
<blockquote>
<p>罪?那是人类们以自己的标准任意决定的。</p>
</blockquote>
<hr>
<blockquote>
<p>人类真矛盾,平时杀牛杀猪脸色都不会变,现在轮到自己了反而那么紧张。</p>
</blockquote>
<hr>
<blockquote>
<p>只是因为对人类有害的那种生物就没有生存的权利吗?</p>
</blockquote>
<hr>
<blockquote>
<p>一个是为了生存不择手段的物种,一个则在纯粹的战斗中体验着乐趣的物种;一个是没有帮手就会胆小如鼠的物种,一个是只剩一人也不慌不忙的物种;一个是把武器的力量当作自己的力量得意洋洋的物种,一个是赤手空拳只相信自己能力的物种……到底什么叫丑陋什么叫标准?</p>
</blockquote>
<hr>
<blockquote>
<p>我一直在思考,我究竟为什么降生到这个世界上,解开一个疑问,又会浮现下一个疑问。追寻起源,追寻终焉。思考的同时,只是在一步步地行走。或许走再远都只能看到同样的风景,或许放弃行走也是个不错的选择,即使被宣告一切就此结束,顶多觉得”哦是么”罢了。</p>
</blockquote>
<hr>
<blockquote>
<p>总有一天,人类会意识到乱扔垃圾是比杀人更重的罪。</p>
</blockquote>
<hr>
<blockquote>
<p>别只顾自身繁荣,多为整个生物圈想想,不然怎配被叫做万物灵长。</p>
</blockquote>
<hr>
<blockquote>
<p>别只顾自身繁荣,多为整个生物圈想想,不然怎配被叫做万物灵长。</p>
</blockquote>
<hr>
<blockquote>
<p>但凡[杀戮]世上没有生物能与人类匹敌。</p>
</blockquote>
<hr>
<blockquote>
<p>与其最后变卦,最初就别冠冕堂皇。</p>
</blockquote>
<hr>
<blockquote>
<p>某一天…在路上认识的…变成朋友的生物,突然死了,这个时候为什么会这么悲伤呢?因为人类就是这么空閒的动物!但是,这就是人类…最大的优点。内心有余暇的生物,是多么的美好啊!</p>
</blockquote>
<hr>
<blockquote>
<p>和寄生于人类承担着维持生态平衡的重任的我们相比的话,你们人类才是啃食地球的寄生虫! 不,该叫寄生兽</p>
</blockquote>
<hr>
<blockquote>
<p>在全体生物看来,我们人类大概才是毒,而他们才是药吧……</p>
</blockquote>
<p><img src="http://o7kir08j3.bkt.clouddn.com/16-5-22/92465300.jpg" alt="寄生兽"></p>
</content>
<summary type="html">
<blockquote>
<p>新一,我查了【恶魔】这一词汇。与之最接近的生物,我觉得是人类,人类会残杀并捕食一切物种。我同伴的食谱中才不过一两种生物,算口味清淡的啦</p>
</blockquote>
</summary>
<category term="动漫" scheme="http://erobaby.me/categories/%E5%8A%A8%E6%BC%AB/"/>
<category term="随笔" scheme="http://erobaby.me/categories/%E5%8A%A8%E6%BC%AB/%E9%9A%8F%E7%AC%94/"/>
<category term="动漫" scheme="http://erobaby.me/tags/%E5%8A%A8%E6%BC%AB/"/>
<category term="随笔" scheme="http://erobaby.me/tags/%E9%9A%8F%E7%AC%94/"/>
</entry>
</feed>