﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-SIMONE-随笔分类-nodejs</title><link>http://www.blogjava.net/wangxinsh55/category/54900.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 01 Nov 2016 09:50:47 GMT</lastBuildDate><pubDate>Tue, 01 Nov 2016 09:50:47 GMT</pubDate><ttl>60</ttl><item><title>nodejs将对象转换成字符串代码,动态执行字符串代码,requirejs使用r.js打包时动态生成配置文件</title><link>http://www.blogjava.net/wangxinsh55/archive/2016/11/01/431944.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Tue, 01 Nov 2016 08:24:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2016/11/01/431944.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/431944.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2016/11/01/431944.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/431944.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/431944.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;path&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;require('path');<br />
</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;fs&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;require('fs');<br />
</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;vm&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;require('vm');<br />
</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;os&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;require('os');<br />
<br />
</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">*<br />
&nbsp;*&nbsp;格式化缩进的个数<br />
&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">function</span><span style="color: #000000; ">&nbsp;toIndent(indent)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;s&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;[];<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;indent;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push('\t');<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;s.join('');<br />
}<br />
<br />
</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">*<br />
&nbsp;*&nbsp;将数组对象转换成原始字符串<br />
&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">function</span><span style="color: #000000; ">&nbsp;array2string(arr,&nbsp;indent)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;s&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;['[',&nbsp;os.EOL],&nbsp;hasProp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;arr.length;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">hasProp)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hasProp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(toIndent(indent&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">));<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;item&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;arr[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;itemtp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">typeof</span><span style="color: #000000; ">(item);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(itemtp&nbsp;</span><span style="color: #000000; ">===</span><span style="color: #000000; ">&nbsp;'object')&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(item&nbsp;</span><span style="color: #0000FF; ">instanceof</span><span style="color: #000000; ">&nbsp;Array)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(array2string(item,&nbsp;indent&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.splice(s.length&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(object2strng(item,&nbsp;indent).trim());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(JSON.stringify(item));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(',');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(os.EOL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(hasProp)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.splice(s.length&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;s.push(toIndent(indent));<br />
&nbsp;&nbsp;&nbsp;&nbsp;s.push(']');<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;s.join('');<br />
}<br />
<br />
</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">*<br />
&nbsp;*&nbsp;将对象转换成原始字符串<br />
&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">function</span><span style="color: #000000; ">&nbsp;object2strng(obj,&nbsp;indent)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;s&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;['{',&nbsp;os.EOL],&nbsp;hasProp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;o&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;obj)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">hasProp)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hasProp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(toIndent(indent&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(JSON.stringify(o));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(':');<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;tp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">typeof</span><span style="color: #000000; ">(obj[o]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(tp&nbsp;</span><span style="color: #000000; ">===</span><span style="color: #000000; ">&nbsp;'object')&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(obj[o]&nbsp;</span><span style="color: #0000FF; ">instanceof</span><span style="color: #000000; ">&nbsp;Array)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(array2string(obj[o],&nbsp;indent&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(object2strng(obj[o],&nbsp;indent&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(tp&nbsp;</span><span style="color: #000000; ">===</span><span style="color: #000000; ">&nbsp;'</span><span style="color: #0000FF; ">function</span><span style="color: #000000; ">')&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(obj[o].toString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(JSON.stringify(obj[o]));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(',');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(os.EOL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(hasProp)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.splice(s.length&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;s.push(toIndent(indent));<br />
&nbsp;&nbsp;&nbsp;&nbsp;s.push('}');<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;s.join('');<br />
}<br />
<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">提取正式代码里的requirejs的配置字符串,并动态执行转换成json对象;&nbsp;修改相关的值信息为下边的打包操作做准备;&nbsp;并将配置信息再转成字符串形式写到临时文件下</span><span style="color: #008000; "><br />
</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;mainPath&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;path.resolve(process.cwd(),&nbsp;'..</span><span style="color: #000000; ">/</span><span style="color: #000000; ">js</span><span style="color: #000000; ">/</span><span style="color: #000000; ">main.js');<br />
</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;mainContent&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;fs.readFileSync(mainPath,&nbsp;'utf</span><span style="color: #000000; ">-</span><span style="color: #000000; ">8</span><span style="color: #000000; ">').replace(</span><span style="color: #000000; ">/</span><span style="color: #000000; ">(requirejs\.config\()</span><span style="color: #000000; ">?</span><span style="color: #000000; ">([</span><span style="color: #000000; ">^</span><span style="color: #000000; ">)]]</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)(\);)</span><span style="color: #000000; ">?/</span><span style="color: #000000; ">gm,&nbsp;'$</span><span style="color: #000000; ">2</span><span style="color: #000000; ">');<br />
vm.runInThisContext('</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;mainCfg</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;'&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;mainContent);</span><span style="color: #008000; ">//</span><span style="color: #008000; ">将提取的字符串转成mainCfg对象</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">mainCfg.baseUrl&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;'</span><span style="color: #000000; ">/</span><span style="color: #000000; ">static</span><span style="color: #000000; ">/</span><span style="color: #000000; ">js</span><span style="color: #000000; ">/</span><span style="color: #000000; ">dist</span><span style="color: #000000; ">/</span><span style="color: #000000; ">lib';<br />
</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;nMainCfgStr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;'requirejs.config('&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;object2strng(mainCfg,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;');';</span><span style="color: #008000; ">//</span><span style="color: #008000; ">重新生成main.js配置文件,为下边的打包做准备</span><span style="color: #008000; "><br />
</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;buildPath&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;path.resolve(process.cwd(),&nbsp;'.</span><span style="color: #000000; ">/</span><span style="color: #000000; ">main.js');<br />
fs.writeFileSync(buildPath,&nbsp;nMainCfgStr);<br />
console.log('write&nbsp;temp&nbsp;file&nbsp;main.js&nbsp;fininshed');<br />
<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">打包的配置信息</span><span style="color: #008000; "><br />
</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;buildJson&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;appDir:&nbsp;'..</span><span style="color: #000000; ">/</span><span style="color: #000000; ">js',<br />
&nbsp;&nbsp;&nbsp;&nbsp;baseUrl:&nbsp;'lib',<br />
&nbsp;&nbsp;&nbsp;&nbsp;mainConfigFile:&nbsp;'.</span><span style="color: #000000; ">/</span><span style="color: #000000; ">main.js',<br />
&nbsp;&nbsp;&nbsp;&nbsp;dir:&nbsp;'..</span><span style="color: #000000; ">/</span><span style="color: #000000; ">js</span><span style="color: #000000; ">/</span><span style="color: #000000; ">dist',<br />
&nbsp;&nbsp;&nbsp;&nbsp;modules:&nbsp;[{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'name':&nbsp;'..</span><span style="color: #000000; ">/</span><span style="color: #000000; ">main',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;include:&nbsp;[]<br />
&nbsp;&nbsp;&nbsp;&nbsp;}]<br />
};<br />
</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;p&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;mainCfg.paths)&nbsp;{</span><span style="color: #008000; ">//</span><span style="color: #008000; ">这里提取所有的依赖模块,打包时放到main.js文件下</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;buildJson.modules[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">].include.push(p);<br />
}<br />
<br />
</span><span style="color: #0000FF; ">var</span><span style="color: #000000; ">&nbsp;buildPath&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;path.resolve(process.cwd(),&nbsp;'.</span><span style="color: #000000; ">/</span><span style="color: #000000; ">build_main.json');<br />
fs.writeFileSync(buildPath,&nbsp;object2strng(buildJson,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">));</span><span style="color: #008000; ">//</span><span style="color: #008000; ">生成打包配置文件</span><span style="color: #008000; "><br />
</span><span style="color: #000000;">console.log('wirte&nbsp;temp&nbsp;file&nbsp;build_main.json&nbsp;fininshed');<br />
<br />
</span></div><br /><br />写一批处理文件build.bat<br /><div><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'Source Code Pro';font-size:10.5pt;">@echo off<br />node build.js<br />node r.js -o build_main.json<br />@pause</pre></div>执行就可以了<img src ="http://www.blogjava.net/wangxinsh55/aggbug/431944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2016-11-01 16:24 <a href="http://www.blogjava.net/wangxinsh55/archive/2016/11/01/431944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>node下使用grunt管理js文件项目</title><link>http://www.blogjava.net/wangxinsh55/archive/2015/08/07/426652.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Fri, 07 Aug 2015 03:47:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2015/08/07/426652.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/426652.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2015/08/07/426652.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/426652.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/426652.html</trackback:ping><description><![CDATA[<div>node下使用grunt管理js文件项目<br /><br />1、使用npm init命令初始化包配置管理文件package.json<br />2、添加插件npm插件<br />npm install grunt --save-dev<br />npm install grunt-cli --save-dev<br />npm install grunt-babel --save-dev<br />npm install grunt-contrib-concat --save-dev<br />npm install grunt-contrib-jshint --save-dev<br />npm install grunt-contrib-uglify --save-dev<br /><br />最后package.json配置文件如下所示<br /><br />{<br />&nbsp; "name": "es6",<br />&nbsp; "version": "1.0.0",<br />&nbsp; "description": "",<br />&nbsp; "main": "a.js",<br />&nbsp; "dependencies": {<br />&nbsp;&nbsp;&nbsp; "babel": "^5.8.21",//es6转es5<br />&nbsp;&nbsp;&nbsp; "webpack": "^1.10.5"//网站开发将多个js文件打包成一个js文件的工具，暂时没有用到<br />&nbsp; },<br />&nbsp; "devDependencies": {<br />&nbsp;&nbsp;&nbsp; "grunt": "^0.4.5",//js项目文件构建工具<br />&nbsp;&nbsp;&nbsp; "grunt-babel": "^5.0.1",//grunt集成babel，将es6转成es5<br />&nbsp;&nbsp;&nbsp; "grunt-cli": "^0.1.13",//客户端命令行工具<br />&nbsp;&nbsp;&nbsp; "grunt-contrib-concat": "^0.5.1",//将多个js文件合并成一个js文件工具<br />&nbsp;&nbsp;&nbsp; "grunt-contrib-jshint": "^0.11.2",//验证js语法工具，不支持es6语法<br />&nbsp;&nbsp;&nbsp; "grunt-contrib-uglify": "^0.9.1"//将js压缩工具<br />&nbsp; },<br />&nbsp; "scripts": {<br />&nbsp;&nbsp;&nbsp; "test": "echo \"Error: no test specified\" &amp;&amp; exit 1"<br />&nbsp; },<br />&nbsp; "author": "",<br />&nbsp; "license": "ISC"<br />}<br /><br />添加grunt配置文件gruntfile.js如下所示：<br /><br />module.exports = function(grunt) { &nbsp;<br />&nbsp; //配置参数，grunt配置文件<br />&nbsp; grunt.initConfig({ &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; pkg: grunt.file.readJSON('package.json'),<br />&nbsp;&nbsp;&nbsp;&nbsp; jshint: {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;options:{<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"curly": true,<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"eqnull": true,<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"eqeqeq": true,<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"undef": false,<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;esnext: true<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;},<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;all: ['a.js','b.js']<br />&nbsp;&nbsp;&nbsp;&nbsp; },<br />&nbsp;&nbsp;&nbsp;&nbsp; babel: {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;dist:{<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;'out/a.js':'a.js',<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;'out/b.js':'b.js'<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp; },<br />&nbsp;&nbsp;&nbsp;&nbsp; concat: { &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; options: { &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; separator: ';', &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stripBanners: true &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }, &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dist: { &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src: [ &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "out/a.js", &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "out/b.js"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ], &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dest: "out/default.js" &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; }, &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; uglify: { &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; options: { &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }, &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dist: { &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; files: { &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'out/default.min.js': 'out/default.js' &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp; }); &nbsp;<br />&nbsp; &nbsp;<br />&nbsp; //载入concat和uglify插件，分别对于合并和压缩 &nbsp;<br />&nbsp; grunt.loadNpmTasks('grunt-contrib-jshint');<br />&nbsp; grunt.loadNpmTasks('grunt-babel');<br />&nbsp; grunt.loadNpmTasks('grunt-contrib-concat'); &nbsp;<br />&nbsp; grunt.loadNpmTasks('grunt-contrib-uglify'); &nbsp;<br />&nbsp; /*<br />&nbsp; grunt.loadNpmTasks('grunt-contrib-cssmin'); &nbsp;<br />&nbsp;&nbsp; */<br />&nbsp; //注册任务 &nbsp;<br />&nbsp; grunt.registerTask('default', ['babel','concat', 'uglify']); &nbsp;<br />}<br /></div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/426652.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2015-08-07 11:47 <a href="http://www.blogjava.net/wangxinsh55/archive/2015/08/07/426652.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>快速搭建 Node.js / io.js 开发环境以及加速 npm</title><link>http://www.blogjava.net/wangxinsh55/archive/2015/08/04/426575.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Tue, 04 Aug 2015 01:50:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2015/08/04/426575.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/426575.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2015/08/04/426575.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/426575.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/426575.html</trackback:ping><description><![CDATA[<div>http://fengmk2.com/blog/2014/03/node-env-and-faster-npm.html</div><br /><div><p>在公交车上刷微博，还是有很多同学在咨询:</p> <ul><li>如何快速搭建 <a href="http://nodejs.org">node</a> 开发环境</li><li><a href="https://www.npmjs.com">npm</a> 超慢</li><li><a href="https://github.com">github</a> 无法打开的问题</li></ul> <p>于是我觉得应该写一篇文章解答所有这些起步问题，让新同学也能顺顺利利入门。</p> <h2>快速搭建 <a href="http://nodejs.org">Node.js</a> 开发环境</h2> <p>如果你想长期做 <a href="http://nodejs.org">node</a> 开发, 或者想快速更新 <a href="http://nodejs.org">node</a> 版本, 或者想快速切换 <a href="http://nodejs.org">node</a> 版本, 那么在<strong>非 Windows(如 osx, linux)</strong> 环境下, 请使用 <a href="https://github.com/cnpm/nvm">nvm</a> 来安装你的 <a href="http://nodejs.org">node</a> 开发环境, 保持系统的干净.</p> <p>如果你使用 <strong>Windows</strong> 做开发, 那么你可以使用 <a href="https://github.com/cnpm/nvmw">nvmw</a> 来替代 <a href="https://github.com/cnpm/nvm">nvm</a></p> <h2>osx, linux 环境</h2> <p>如果你是 windows 环境开发, 请跳过这里, 直接查看下一章.</p> <h3>git clone <a href="https://github.com/cnpm/nvm">nvm</a></h3> <p>直接从 github clone nvm 到本地, 这里假设大家都使用 <code>~/git</code> 目录存放 git 项目:</p> <pre><code>$ cd ~/git $ git clone https://github.com/cnpm/nvm.git </code></pre> <p>配置终端启动时自动执行 <code>source ~/git/nvm/nvm.sh</code>, 在 <code>~/.bashrc</code>, <code>~/.bash_profile</code>, <code>~/.profile</code>, 或者 <code>~/.zshrc</code> 文件添加以下命令:</p> <pre><code>source ~/git/nvm/nvm.sh </code></pre> <p>重新打开你的终端, 输入 <code>nvm</code></p> <pre><code>$ nvm  Node Version Manager  Usage:     nvm help                    Show this message     nvm --version               Print out the latest released version of nvm     nvm install [-s] &lt;version&gt;  Download and install a &lt;version&gt;, [-s] from source     nvm uninstall &lt;version&gt;     Uninstall a version     nvm use &lt;version&gt;           Modify PATH to use &lt;version&gt;     nvm run &lt;version&gt; [&lt;args&gt;]  Run &lt;version&gt; with &lt;args&gt; as arguments     nvm current                 Display currently activated version     nvm ls                      List installed versions     nvm ls &lt;version&gt;            List versions matching a given description     nvm ls-remote               List remote versions available for install     nvm deactivate              Undo effects of NVM on current shell     nvm alias [&lt;pattern&gt;]       Show all aliases beginning with &lt;pattern&gt;     nvm alias &lt;name&gt; &lt;version&gt;  Set an alias named &lt;name&gt; pointing to &lt;version&gt;     nvm unalias &lt;name&gt;          Deletes the alias named &lt;name&gt;     nvm copy-packages &lt;version&gt; Install global NPM packages contained in &lt;version&gt; to current version  Example:     nvm install v0.10.24        Install a specific version number     nvm use 0.10                Use the latest available 0.10.x release     nvm run 0.10.24 myApp.js    Run myApp.js using node v0.10.24     nvm alias default 0.10.24   Set default node version on a shell  Note:     to remove, delete or uninstall nvm - just remove ~/.nvm, ~/.npm and ~/.bower folders </code></pre> <h3>通过 <a href="https://github.com/cnpm/nvm">nvm</a> 安装任意版本的 <a href="http://nodejs.org">node</a></h3> <pre><code>$ nvm install 0.12.0 </code></pre> <p>于是你就会看到一段非常快速进度条:</p> <pre><code>######################################################################## 100.0% Now using node v0.12.0 </code></pre> <p>还可以直接安装 iojs 各个版本</p> <pre><code>$ nvm install iojs </code></pre> <p>你可以继续非常方便地安装各个版本的 node 了, 你可以查看一下你当前已经安装的版本:</p> <pre><code>$ nvm ls-remote          nvm      v0.8.26     v0.10.26     v0.11.16 -&gt;  v0.12.0 </code></pre> <h2>windows 环境</h2> <h3>git clone <a href="https://github.com/cnpm/nvmw">nvmw</a></h3> <p>直接从 github clone nvmw 到本地, 这里假设大家都使用 <code>d:\git</code> 目录存放 git 项目:</p> <pre><code>$ d: $ cd git $ git clone https://github.com/cnpm/nvmw.git </code></pre> <p>设置 <code>d:\git\nvmw</code> 目录到你的 <code>PATH</code> 环境变量中:</p> <pre><code>set "PATH=d:\git\nvmw;%PATH%" </code></pre> <p>重新打开你的终端, 输入 <code>nvmw</code></p> <pre><code>$ nvmw  Usage:   nvmw help                    Show this message   nvmw install [version]       Download and install a [version]   nvmw uninstall [version]     Uninstall a [version]   nvmw use [version]           Modify PATH to use [version]   nvmw ls                      List installed versions  Example:   nvmw install v0.6.0          Install a specific version number   nvmw use v0.6.0              Use the specific version </code></pre> <h3>通过 <a href="https://github.com/cnpm/nvmw">nvmw</a> 安装任意版本的 <a href="http://nodejs.org">node</a></h3> <pre><code>$ nvmw install 0.12.0 </code></pre> <p>于是你就会看到一段非常快速进度条:</p> <pre><code>######################################################################## 100.0% Now using node v0.12.0 </code></pre><p>安装 iojs</p> <pre><code>$ nvmw install iojs-1.4.2 </code></pre><p>然后你可以继续非常方便地安装各个版本的 node 了, 你可以查看一下你当前已经安装的版本:</p> <pre><code>$ nvmw ls  v0.10.26 v0.11.12 Current: v0.11.12 </code></pre><p>到此, 无论是 windows 环境, 还是 osx, linux 环境, 都能快速安装多个版本的 node 了.</p> <h2>使用 <a href="http://npm.taobao.org">cnpm</a> 加速 <a href="https://www.npmjs.com">npm</a></h2> <p>同理 nvm , npm 默认是从国外的源获取和下载包信息, 不慢才奇怪. 可以通过简单的 <code>---registry</code> 参数, 使用国内的镜像 <a href="http://registry.npm.taobao.org">http://registry.npm.taobao.org</a> :</p> <pre><code>$ npm install koa --registry=http://registry.npm.taobao.org </code></pre> <p>于是屏幕又哗啦哗啦地一大片输出:</p> <pre><code>$ npm install koa --registry=http://registry.npm.taobao.org ... koa@0.5.2 node_modules/koa &#9500;&#9472;&#9472; koa-compose@2.2.0 &#9500;&#9472;&#9472; statuses@1.0.2 &#9500;&#9472;&#9472; finished@1.1.1 &#9500;&#9472;&#9472; escape-html@1.0.1 &#9500;&#9472;&#9472; only@0.0.2 &#9500;&#9472;&#9472; debug@0.8.0 &#9500;&#9472;&#9472; fresh@0.2.2 &#9500;&#9472;&#9472; type-is@1.0.1 &#9500;&#9472;&#9472; delegates@0.0.3 &#9500;&#9472;&#9472; mime@1.2.11 &#9500;&#9472;&#9472; co@3.0.5 &#9500;&#9472;&#9472; accepts@1.0.1 (negotiator@0.4.2) &#9492;&#9472;&#9472; cookies@0.4.0 (keygrip@1.0.0) </code></pre> <p>但是毕竟镜像跟官方的 npm 源还是会有一个同步时间差异, 目前 cnpm 的默认同步时间间隔是 10 分钟. 如果你是模块发布者, 或者你想马上同步一个模块, 那么推荐你安装 <a href="http://npm.taobao.org">cnpm</a> cli:</p> <pre><code>$ npm install cnpm -g --registry=http://registry.npm.taobao.org </code></pre> <p>通过 cnpm 命令行, 你可以快速同步任意模块:</p> <pre><code>$ cnpm sync koa connect mocha </code></pre> <p>呃, 我就是不想安装 cnpm cli 怎么办? 哈哈, 早就想到你会这么懒了, 于是我们还有一个 web 页面:</p> <p>例如我想马上同步 koa, 直接打开浏览器: <a href="http://npm.taobao.org/sync/koa">http://npm.taobao.org/sync/koa</a></p> <p>或者你是命令行控, 通过 open 命令打开:</p> <pre><code>$ open http://npm.taobao.org/sync/koa </code></pre> <p>如果你安装的模块依赖了 C++ 模块, 需要编译, 肯定会通过 <a href="https://github.com/TooTallNate/node-gyp">node-gyp</a> 来编译, <a href="https://github.com/TooTallNate/node-gyp">node-gyp</a> 在第一次编译的时候, 需要依赖 <a href="http://nodejs.org">node</a> 源代码, 于是又会去 node dist 下载, 于是大家又会吐槽, 怎么 npm 安装这么慢...</p> <p>好吧, 于是又要提到 <code>--disturl</code> 参数, 通过中国镜像来下载:</p> <pre><code>$ npm install microtime \   --registry=http://registry.npm.taobao.org \   --disturl=http://npm.taobao.org/mirrors/node </code></pre> <p>再次要提到 cnpm cli, 它已经默认将 <code>--registry</code> 和 <code>--disturl</code> 都配置好了, 谁用谁知道 . 写到这里, 就更快疑惑那些不想安装 cnpm cli 又吐槽 npm 慢的同学是基于什么考虑不在本地安装一个 cnpm 呢?</p> <h2>github 好慢</h2> <p>好了, 看到这里大家应该对 node 和 npm 已经没有速度慢的问题了.</p> <p>github 慢, 或者说是它的资源 host 被堵而已, 大家可以通过简单的 hosts 映射解决:</p> <pre><code>185.31.16.184 github.global.ssl.fastly.net </code></pre><h2>为何最近访问国外网站这么慢?</h2> <p>听说是 APCN2 又断了: <a href="http://weibo.com/1415338244/ACTYkq8xK">http://weibo.com/1415338244/ACTYkq8xK</a></p> <p><img src="http://ww4.sinaimg.cn/large/545c5904gw1eeu7h63hxvj20qs0mp78p.jpg" alt="1" /></p> <h2>有爱</h2> <p>希望文本对你有用. :)</p></div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/426575.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2015-08-04 09:50 <a href="http://www.blogjava.net/wangxinsh55/archive/2015/08/04/426575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>