??xml version="1.0" encoding="utf-8" standalone="yes"?>www.神马久久,欧美久久亚洲,日韩美女一级视频http://www.aygfsteel.com/wangxinsh55/category/54900.htmlzh-cnTue, 01 Nov 2016 09:50:47 GMTTue, 01 Nov 2016 09:50:47 GMT60nodejs对象{换成字符串代?动态执行字W串代码,requirejs使用r.js打包时动态生成配|文?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/wangxinsh55/archive/2016/11/01/431944.html</guid><wfw:comment>http://www.aygfsteel.com/wangxinsh55/comments/431944.html</wfw:comment><comments>http://www.aygfsteel.com/wangxinsh55/archive/2016/11/01/431944.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wangxinsh55/comments/commentRss/431944.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/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; "> path </span><span style="color: #000000; ">=</span><span style="color: #000000; "> require('path');<br /> </span><span style="color: #0000FF; ">var</span><span style="color: #000000; "> fs </span><span style="color: #000000; ">=</span><span style="color: #000000; "> require('fs');<br /> </span><span style="color: #0000FF; ">var</span><span style="color: #000000; "> vm </span><span style="color: #000000; ">=</span><span style="color: #000000; "> require('vm');<br /> </span><span style="color: #0000FF; ">var</span><span style="color: #000000; "> os </span><span style="color: #000000; ">=</span><span style="color: #000000; "> require('os');<br /> <br /> </span><span style="color: #008000; ">/*</span><span style="color: #008000; ">*<br />  * 格式化羃q的个数<br />  </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /> </span><span style="color: #0000FF; ">function</span><span style="color: #000000; "> toIndent(indent) {<br />     </span><span style="color: #0000FF; ">var</span><span style="color: #000000; "> s </span><span style="color: #000000; ">=</span><span style="color: #000000; "> [];<br />     </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (</span><span style="color: #0000FF; ">var</span><span style="color: #000000; "> i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">; i </span><span style="color: #000000; "><</span><span style="color: #000000; "> indent; i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">) {<br />         s.push('\t');<br />     }<br />     </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> s.join('');<br /> }<br /> <br /> </span><span style="color: #008000; ">/*</span><span style="color: #008000; ">*<br />  * 数l对象{换成原始字符?br />  </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /> </span><span style="color: #0000FF; ">function</span><span style="color: #000000; "> array2string(arr, indent) {<br />     </span><span style="color: #0000FF; ">var</span><span style="color: #000000; "> s </span><span style="color: #000000; ">=</span><span style="color: #000000; "> ['[', os.EOL], hasProp </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br />     </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (</span><span style="color: #0000FF; ">var</span><span style="color: #000000; "> i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">; i </span><span style="color: #000000; "><</span><span style="color: #000000; "> arr.length; i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">) {<br />         </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (</span><span style="color: #000000; ">!</span><span style="color: #000000; ">hasProp) {<br />             hasProp </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">;<br />         }<br /> <br />         s.push(toIndent(indent </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">));<br /> <br />         </span><span style="color: #0000FF; ">var</span><span style="color: #000000; "> item </span><span style="color: #000000; ">=</span><span style="color: #000000; "> arr[i];<br />         </span><span style="color: #0000FF; ">var</span><span style="color: #000000; "> itemtp </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">typeof</span><span style="color: #000000; ">(item);<br />         </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (itemtp </span><span style="color: #000000; ">===</span><span style="color: #000000; "> 'object') {<br />             </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (item </span><span style="color: #0000FF; ">instanceof</span><span style="color: #000000; "> Array) {<br />                 s.push(array2string(item, indent </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">));<br />             } </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "> {<br />                 s.splice(s.length </span><span style="color: #000000; ">-</span><span style="color: #000000; "> </span><span style="color: #000000; ">2</span><span style="color: #000000; ">, </span><span style="color: #000000; ">2</span><span style="color: #000000; ">);<br />                 s.push(object2strng(item, indent).trim());<br />             }<br />         } </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "> {<br />             s.push(JSON.stringify(item));<br />         }<br />         s.push(',');<br />         s.push(os.EOL);<br />     }<br />     </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (hasProp) {<br />         s.splice(s.length </span><span style="color: #000000; ">-</span><span style="color: #000000; "> </span><span style="color: #000000; ">2</span><span style="color: #000000; ">, </span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />     }<br />     s.push(toIndent(indent));<br />     s.push(']');<br />     </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> s.join('');<br /> }<br /> <br /> </span><span style="color: #008000; ">/*</span><span style="color: #008000; ">*<br />  * 对象{换成原始字符?br />  </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /> </span><span style="color: #0000FF; ">function</span><span style="color: #000000; "> object2strng(obj, indent) {<br />     </span><span style="color: #0000FF; ">var</span><span style="color: #000000; "> s </span><span style="color: #000000; ">=</span><span style="color: #000000; "> ['{', os.EOL], hasProp </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br /> <br />     </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (</span><span style="color: #0000FF; ">var</span><span style="color: #000000; "> o </span><span style="color: #0000FF; ">in</span><span style="color: #000000; "> obj) {<br />         </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (</span><span style="color: #000000; ">!</span><span style="color: #000000; ">hasProp) {<br />             hasProp </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">;<br />         }<br />         s.push(toIndent(indent </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">));<br />         s.push(JSON.stringify(o));<br />         s.push(':');<br /> <br />         </span><span style="color: #0000FF; ">var</span><span style="color: #000000; "> tp </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">typeof</span><span style="color: #000000; ">(obj[o]);<br />         </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (tp </span><span style="color: #000000; ">===</span><span style="color: #000000; "> 'object') {<br />             </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (obj[o] </span><span style="color: #0000FF; ">instanceof</span><span style="color: #000000; "> Array) {<br />                 s.push(array2string(obj[o], indent </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">));<br />             } </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "> {<br />                 s.push(object2strng(obj[o], indent </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">));<br />             }<br />         } </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (tp </span><span style="color: #000000; ">===</span><span style="color: #000000; "> '</span><span style="color: #0000FF; ">function</span><span style="color: #000000; ">') {<br />             s.push(obj[o].toString());<br />         } </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "> {<br />             s.push(JSON.stringify(obj[o]));<br />         }<br />         s.push(',');<br />         s.push(os.EOL);<br />     }<br />     </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (hasProp) {<br />         s.splice(s.length </span><span style="color: #000000; ">-</span><span style="color: #000000; "> </span><span style="color: #000000; ">2</span><span style="color: #000000; ">, </span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />     }<br />     s.push(toIndent(indent));<br />     s.push('}');<br />     </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> s.join('');<br /> }<br /> <br /> </span><span style="color: #008000; ">//</span><span style="color: #008000; ">提取正式代码里的requirejs的配|字W串,q动态执行{换成json对象; 修改相关的g息ؓ(f)下边的打包操作做准备; q将配置信息再{成字W串形式写到临时文g?/span><span style="color: #008000; "><br /> </span><span style="color: #0000FF; ">var</span><span style="color: #000000; "> mainPath </span><span style="color: #000000; ">=</span><span style="color: #000000; "> path.resolve(process.cwd(), '..</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; "> mainContent </span><span style="color: #000000; ">=</span><span style="color: #000000; "> fs.readFileSync(mainPath, '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, '$</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; "> mainCfg</span><span style="color: #000000; ">=</span><span style="color: #000000; "> ' </span><span style="color: #000000; ">+</span><span style="color: #000000; "> 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 </span><span style="color: #000000; ">=</span><span style="color: #000000; "> '</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; "> nMainCfgStr </span><span style="color: #000000; ">=</span><span style="color: #000000; "> 'requirejs.config(' </span><span style="color: #000000; ">+</span><span style="color: #000000; "> object2strng(mainCfg, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">) </span><span style="color: #000000; ">+</span><span style="color: #000000; "> ');';</span><span style="color: #008000; ">//</span><span style="color: #008000; ">重新生成main.js配置文g,Z边的打包做准?/span><span style="color: #008000; "><br /> </span><span style="color: #0000FF; ">var</span><span style="color: #000000; "> buildPath </span><span style="color: #000000; ">=</span><span style="color: #000000; "> path.resolve(process.cwd(), '.</span><span style="color: #000000; ">/</span><span style="color: #000000; ">main.js');<br /> fs.writeFileSync(buildPath, nMainCfgStr);<br /> console.log('write temp file main.js 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; "> buildJson </span><span style="color: #000000; ">=</span><span style="color: #000000; "> {<br />     appDir: '..</span><span style="color: #000000; ">/</span><span style="color: #000000; ">js',<br />     baseUrl: 'lib',<br />     mainConfigFile: '.</span><span style="color: #000000; ">/</span><span style="color: #000000; ">main.js',<br />     dir: '..</span><span style="color: #000000; ">/</span><span style="color: #000000; ">js</span><span style="color: #000000; ">/</span><span style="color: #000000; ">dist',<br />     modules: [{<br />         'name': '..</span><span style="color: #000000; ">/</span><span style="color: #000000; ">main',<br />         include: []<br />     }]<br /> };<br /> </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (</span><span style="color: #0000FF; ">var</span><span style="color: #000000; "> p </span><span style="color: #0000FF; ">in</span><span style="color: #000000; "> mainCfg.paths) {</span><span style="color: #008000; ">//</span><span style="color: #008000; ">q里提取所有的依赖模块,打包时放到main.js文g?/span><span style="color: #008000; "><br /> </span><span style="color: #000000; ">    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; "> buildPath </span><span style="color: #000000; ">=</span><span style="color: #000000; "> path.resolve(process.cwd(), '.</span><span style="color: #000000; ">/</span><span style="color: #000000; ">build_main.json');<br /> fs.writeFileSync(buildPath, object2strng(buildJson, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">));</span><span style="color: #008000; ">//</span><span style="color: #008000; ">生成打包配置文g</span><span style="color: #008000; "><br /> </span><span style="color: #000000;">console.log('wirte temp file build_main.json 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.aygfsteel.com/wangxinsh55/aggbug/431944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wangxinsh55/" target="_blank">SIMONE</a> 2016-11-01 16:24 <a href="http://www.aygfsteel.com/wangxinsh55/archive/2016/11/01/431944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>node下用grunt理js文g目http://www.aygfsteel.com/wangxinsh55/archive/2015/08/07/426652.htmlSIMONESIMONEFri, 07 Aug 2015 03:47:00 GMThttp://www.aygfsteel.com/wangxinsh55/archive/2015/08/07/426652.htmlhttp://www.aygfsteel.com/wangxinsh55/comments/426652.htmlhttp://www.aygfsteel.com/wangxinsh55/archive/2015/08/07/426652.html#Feedback0http://www.aygfsteel.com/wangxinsh55/comments/commentRss/426652.htmlhttp://www.aygfsteel.com/wangxinsh55/services/trackbacks/426652.htmlnode下用grunt理js文g目

1、用npm init命o(h)初始化包配置理文gpackage.json
2、添加插件npm插g
npm install grunt --save-dev
npm install grunt-cli --save-dev
npm install grunt-babel --save-dev
npm install grunt-contrib-concat --save-dev
npm install grunt-contrib-jshint --save-dev
npm install grunt-contrib-uglify --save-dev

最后package.json配置文g如下所C?br />
{
  "name": "es6",
  "version": "1.0.0",
  "description": "",
  "main": "a.js",
  "dependencies": {
    "babel": "^5.8.21",//es6转es5
    "webpack": "^1.10.5"http://|站开发将多个js文g打包成一个js文g的工P暂时没有用到
  },
  "devDependencies": {
    "grunt": "^0.4.5",//js目文g构徏工具
    "grunt-babel": "^5.0.1",//grunt集成babelQ将es6转成es5
    "grunt-cli": "^0.1.13",//客户端命令行工具
    "grunt-contrib-concat": "^0.5.1",//多个js文g合ƈ成一个js文g工具
    "grunt-contrib-jshint": "^0.11.2",//验证js语法工具Q不支持es6语法
    "grunt-contrib-uglify": "^0.9.1"http://js压羃工具
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

dgrunt配置文ggruntfile.js如下所C:(x)

module.exports = function(grunt) {  
  //配置参数Qgrunt配置文g
  grunt.initConfig({  
     pkg: grunt.file.readJSON('package.json'),
     jshint: {
         options:{
             "curly": true,
            "eqnull": true,
            "eqeqeq": true,
            "undef": false,
             esnext: true
         },
         all: ['a.js','b.js']
     },
     babel: {
         dist:{
             'out/a.js':'a.js',
             'out/b.js':'b.js'
         }
     },
     concat: {  
         options: {  
             separator: ';',  
             stripBanners: true  
         },  
         dist: {  
             src: [  
                 "out/a.js",  
                 "out/b.js"
             ],  
             dest: "out/default.js"  
         }  
     },  
     uglify: {  
         options: {  
         },  
         dist: {  
             files: {  
                 'out/default.min.js': 'out/default.js'  
             }  
         }  
     }
  });  
   
  //载入concat和uglify插gQ分别对于合q和压羃  
  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-babel');
  grunt.loadNpmTasks('grunt-contrib-concat');  
  grunt.loadNpmTasks('grunt-contrib-uglify');  
  /*
  grunt.loadNpmTasks('grunt-contrib-cssmin');  
   */
  //注册d  
  grunt.registerTask('default', ['babel','concat', 'uglify']);  
}


SIMONE 2015-08-07 11:47 发表评论
]]>
快速搭?Node.js / io.js 开发环境以?qing)加?npmhttp://www.aygfsteel.com/wangxinsh55/archive/2015/08/04/426575.htmlSIMONESIMONETue, 04 Aug 2015 01:50:00 GMThttp://www.aygfsteel.com/wangxinsh55/archive/2015/08/04/426575.htmlhttp://www.aygfsteel.com/wangxinsh55/comments/426575.htmlhttp://www.aygfsteel.com/wangxinsh55/archive/2015/08/04/426575.html#Feedback0http://www.aygfsteel.com/wangxinsh55/comments/commentRss/426575.htmlhttp://www.aygfsteel.com/wangxinsh55/services/trackbacks/426575.htmlhttp://fengmk2.com/blog/2014/03/node-env-and-faster-npm.html

在公交R上刷微博Q还是有很多同学在咨?

  • 如何快速搭?node 开发环?/li>
  • npm
  • github 无法打开的问?/li>

于是我觉得应该写一文章解{所有这些v步问题,让新同学也能顺利利入门?/p>

快速搭?Node.js 开发环?/h2>

如果你想长期?node 开? 或者想快速更?node 版本, 或者想快速切?node 版本, 那么?strong>?Windows(?osx, linux) 环境? 请?nvm 来安装你?node 开发环? 保持pȝ的干净.

如果你?Windows 做开? 那么你可以?nvmw 来替?nvm

osx, linux 环境

如果你是 windows 环境开? 误q这? 直接查看下一?

git clone nvm

直接?github clone nvm 到本? q里假设大家都?~/git 目录存放 git 目:

$ cd ~/git $ git clone https://github.com/cnpm/nvm.git 

配置l端启动时自动执?source ~/git/nvm/nvm.sh, ?~/.bashrc, ~/.bash_profile, ~/.profile, 或?~/.zshrc 文gd以下命o(h):

source ~/git/nvm/nvm.sh 

重新打开你的l端, 输入 nvm

$ nvm  Node Version Manager  Usage:     nvm help                    Show this message     nvm --version               Print out the latest released version of nvm     nvm install [-s] <version>  Download and install a <version>, [-s] from source     nvm uninstall <version>     Uninstall a version     nvm use <version>           Modify PATH to use <version>     nvm run <version> [<args>]  Run <version> with <args> as arguments     nvm current                 Display currently activated version     nvm ls                      List installed versions     nvm ls <version>            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 [<pattern>]       Show all aliases beginning with <pattern>     nvm alias <name> <version>  Set an alias named <name> pointing to <version>     nvm unalias <name>          Deletes the alias named <name>     nvm copy-packages <version> Install global NPM packages contained in <version> 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 

通过 nvm 安装L版本?node

$ nvm install 0.12.0 

于是你就?x)看CD非常快速进度条:

######################################################################## 100.0% Now using node v0.12.0 

q可以直接安?iojs 各个版本

$ nvm install iojs 

你可以l非常方便地安装各个版本?node ? 你可以查看一下你当前已经安装的版?

$ nvm ls-remote          nvm      v0.8.26     v0.10.26     v0.11.16 ->  v0.12.0 

windows 环境

git clone nvmw

直接?github clone nvmw 到本? q里假设大家都?d:\git 目录存放 git 目:

$ d: $ cd git $ git clone https://github.com/cnpm/nvmw.git 

d:\git\nvmw 目录C?PATH 环境变量?

set "PATH=d:\git\nvmw;%PATH%" 

重新打开你的l端, 输入 nvmw

$ 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 

通过 nvmw 安装L版本?node

$ nvmw install 0.12.0 

于是你就?x)看CD非常快速进度条:

######################################################################## 100.0% Now using node v0.12.0 

安装 iojs

$ nvmw install iojs-1.4.2 

然后你可以l非常方便地安装各个版本?node ? 你可以查看一下你当前已经安装的版?

$ nvmw ls  v0.10.26 v0.11.12 Current: v0.11.12 

到此, 无论?windows 环境, q是 osx, linux 环境, 都能快速安装多个版本的 node ?

使用 cnpm 加?npm

同理 nvm , npm 默认是从国外的源获取和下载包信息, 不慢才奇? 可以通过单的 ---registry 参数, 使用国内的镜?http://registry.npm.taobao.org :

$ npm install koa --registry=http://registry.npm.taobao.org 

于是屏幕又哗啦哗啦地一大片输出:

$ npm install koa --registry=http://registry.npm.taobao.org ... koa@0.5.2 node_modules/koa ├── koa-compose@2.2.0 ├── statuses@1.0.2 ├── finished@1.1.1 ├── escape-html@1.0.1 ├── only@0.0.2 ├── debug@0.8.0 ├── fresh@0.2.2 ├── type-is@1.0.1 ├── delegates@0.0.3 ├── mime@1.2.11 ├── co@3.0.5 ├── accepts@1.0.1 (negotiator@0.4.2) └── cookies@0.4.0 (keygrip@1.0.0) 

但是毕竟镜像跟官方的 npm 源还是会(x)有一个同步时间差? 目前 cnpm 的默认同步时间间隔是 10 分钟. 如果你是模块发布? 或者你想马上同步一个模? 那么推荐你安?cnpm cli:

$ npm install cnpm -g --registry=http://registry.npm.taobao.org 

通过 cnpm 命o(h)? 你可以快速同步Q意模?

$ cnpm sync koa connect mocha 

? 我就是不惛_?cnpm cli 怎么? 哈哈, 早就惛_你会(x)q么懒了, 于是我们q有一?web 面:

例如我想马上同步 koa, 直接打开览? http://npm.taobao.org/sync/koa

或者你是命令行? 通过 open 命o(h)打开:

$ open http://npm.taobao.org/sync/koa 

如果你安装的模块依赖?C++ 模块, 需要编? 肯定?x)通过 node-gyp 来编? node-gyp 在第一ơ编译的时? 需要依?node 源代? 于是又会(x)?node dist 下蝲, 于是大家又会(x)吐槽, 怎么 npm 安装q么?..

好吧, 于是又要提到 --disturl 参数, 通过中国镜像来下?

$ npm install microtime \   --registry=http://registry.npm.taobao.org \   --disturl=http://npm.taobao.org/mirrors/node 

再次要提?cnpm cli, 它已l默认将 --registry ?--disturl 都配|好? 谁用谁知?. 写到q里, 更快疑惑那些不惛_?cnpm cli 又吐?npm 慢的同学是基于什么考虑不在本地安装一?cnpm ?

github 好慢

好了, 看到q里大家应该?node ?npm 已经没有速度慢的问题?

github ? 或者说是它的资?host 被堵而已, 大家可以通过单的 hosts 映射解决:

185.31.16.184 github.global.ssl.fastly.net 

Z最q访问国外网站这么慢?

听说?APCN2 又断? http://weibo.com/1415338244/ACTYkq8xK

1

有爱

希望文本对你有用. :)



SIMONE 2015-08-04 09:50 发表评论
]]>
վ֩ģ壺 | | | ˮ| Ȫ| ں| | IJ| | | | | | | | | ľ| ױ| | ̴| | ӱ| | ǭ| | | ƺ| ʡ| ˮ| Ϫ| | ʮ| ĵ| | | | ˷| | | | |