├── .gitignore ├── README.md ├── alias-node.cmd ├── bytes.js ├── fget.js ├── get_npm.js ├── nvmw.bat ├── unzip.js └── wget.js /.gitignore: -------------------------------------------------------------------------------- 1 | v*/ 2 | .idea/ 3 | .DS_Store 4 | node_modules 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Node Version Manager for Windows 2 | ================================ 3 | nvmw is a simple Node Version Manager for Windows. 4 | 5 | ___This is a fork nvmw using [cnpm mirrors](http://npm.taobao.org/mirrors).___ 6 | 7 | Prerequisites 8 | ------------- 9 | 10 | You'll need to install the following software before installing nvmw: 11 | 12 | - [git](http://code.google.com/p/msysgit/ "msysgit") 13 | - [python 2.7+](http://python.org/download/) only if you need Node < 0.8 14 | 15 | Installation 16 | ------------ 17 | 18 | Clone this repository: 19 | 20 | git clone git://github.com/cnpm/nvmw.git "%HOMEDRIVE%%HOMEPATH%\.nvmw" 21 | 22 | To activate nvmw, add nvmw directory to your PATH environment variable 23 | 24 | set "PATH=%HOMEDRIVE%%HOMEPATH%\.nvmw;%PATH%" 25 | 26 | Usage 27 | ----- 28 | 29 | Usage: 30 | nvmw help Show this message 31 | nvmw install [version] Download and install a [version] 32 | nvmw uninstall [version] Uninstall a [version] 33 | nvmw use [version] Modify PATH to use [version] 34 | nvmw ls List installed versions 35 | 36 | Example: 37 | nvmw install v0.6.0 Install a specific version number 38 | nvmw use v0.6.0 Use the specific version 39 | nvmw install iojs Install the latest version of io.js 40 | nvmw install iojs-v1.0.2 Install a specific version number of io.js 41 | nvmw use iojs-v1.0.2 Use the specific version of io.js 42 | 43 | ### Support install with arch 44 | 45 | arch support values: `x86`, `x64` 46 | 47 | Usage: 48 | nvmw install [version] [arch] Download and install a [version] on the [arch] 49 | nvmw uninstall [version] [arch] Uninstall a [version] on the [arch] 50 | nvmw use [version] [arch] Modify PATH to use [version] on the [arch] 51 | 52 | Example: 53 | nvmw install v0.12.0 x86 Install a specific 32-bit version 54 | nvmw use v0.12.0 x86 Use the specific 32-bit version 55 | 56 | Mirror node.js/io.js/npm dist 57 | ------------------ 58 | 59 | To use a mirror of the node binaries, set `$NVMW_NODEJS_ORG_MIRROR`. 60 | 61 | e.g.: In China, you can use these mirrors: 62 | 63 | ```bash 64 | set "NVMW_NODEJS_ORG_MIRROR=http://npm.taobao.org/mirrors/node" 65 | set "NVMW_IOJS_ORG_MIRROR=http://npm.taobao.org/mirrors/iojs" 66 | set "NVMW_NPM_MIRROR=http://npm.taobao.org/mirrors/npm" 67 | 68 | nvmw install 0.11.14 69 | nvmw install node-v0.11.15 70 | nvmw install iojs 71 | nvmw install iojs-v1.0.2 72 | ``` 73 | 74 | FAQ 75 | --- 76 | 77 | ### Q. Node.exe download faild caused 'Input Error: There is no script engine for file extension ".js"' 78 | 79 | Maybe you associated ".js" file to another app, not JScript engine. To fix, see [here](http://www.winhelponline.com/articles/230/1/Error-There-is-no-script-engine-for-file-extension-when-running-js-files.html) 80 | 81 | ### Q. Node.exe download faild caused '0 Unknown' 82 | 83 | Maybe you modify fget.js `var xhr = WScript.createObject('Msxml2.XMLHttp')` -> `var xhr = WScript.createObject('Msxml2.ServerXMLHttp')` 84 | 85 | LICENSE 86 | ------- 87 | (The MIT License) 88 | 89 | Copyright (c) 2011 Kazuyuki Honda 90 | 91 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 92 | 93 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 94 | 95 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 96 | -------------------------------------------------------------------------------- /alias-node.cmd: -------------------------------------------------------------------------------- 1 | :: Created by nvmw, please don't edit manually. 2 | @IF EXIST "%~dp0\iojs.exe" ( 3 | "%~dp0\iojs.exe" %* 4 | ) ELSE ( 5 | iojs %* 6 | ) 7 | -------------------------------------------------------------------------------- /bytes.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Parse byte `size` string. 3 | * 4 | * @param {String} size 5 | * @return {Number} 6 | * @api public 7 | */ 8 | 9 | module.exports = function (size) { 10 | if ('number' == typeof size) return convert(size); 11 | var parts = size.match(/^(\d+(?:\.\d+)?) *(kb|mb|gb|tb)$/) 12 | , n = parseFloat(parts[1]) 13 | , type = parts[2]; 14 | 15 | var map = { 16 | kb: 1 << 10 17 | , mb: 1 << 20 18 | , gb: 1 << 30 19 | , tb: ((1 << 30) * 1024) 20 | }; 21 | 22 | return map[type] * n; 23 | }; 24 | 25 | /** 26 | * convert bytes into string. 27 | * 28 | * @param {Number} b - bytes to convert 29 | * @return {String} 30 | * @api public 31 | */ 32 | 33 | function convert (b) { 34 | var tb = ((1 << 30) * 1024), gb = 1 << 30, mb = 1 << 20, kb = 1 << 10; 35 | if (b >= tb) return (Math.round(b / tb * 100) / 100) + 'tb'; 36 | if (b >= gb) return (Math.round(b / gb * 100) / 100) + 'gb'; 37 | if (b >= mb) return (Math.round(b / mb * 100) / 100) + 'mb'; 38 | if (b >= kb) return (Math.round(b / kb * 100) / 100) + 'kb'; 39 | return b + 'b'; 40 | } -------------------------------------------------------------------------------- /fget.js: -------------------------------------------------------------------------------- 1 | main(WScript.Arguments); 2 | 3 | /** 4 | * Main function 5 | * @param {Object} args Command line arguments 6 | */ 7 | function main(args) { 8 | if (args.length < 2) { 9 | log('useage: CScript fget.js [url] [filname]'); 10 | WScript.Quit(1); 11 | } 12 | 13 | var url = args(0) 14 | , filename = args(1); 15 | 16 | var completed = false; 17 | downloadFile(url, filename, function(err) { 18 | if (err) { 19 | log(err.message); 20 | } else { 21 | log('Done'); 22 | } 23 | completed = true; 24 | }); 25 | 26 | while (!completed) { 27 | WScript.Sleep(1000); 28 | } 29 | } 30 | 31 | /** 32 | * Log output to console. 33 | * @param {String} message 34 | */ 35 | function log(message) { 36 | WScript.Echo(message); 37 | } 38 | 39 | /** 40 | * Download file from specified URL 41 | * 42 | * @param {String} url Url to download 43 | * @param {String} filename Filename to save 44 | * @param {Function} callback Callback function when download is completed or failed 45 | */ 46 | function downloadFile(url, filename, callback) { 47 | var xhr = WScript.createObject('Msxml2.XMLHTTP') 48 | , ostream = new ActiveXObject("Adodb.Stream"); 49 | 50 | log('Download from ' + url + ', and save it as ' + filename); 51 | 52 | xhr.onreadystatechange = function() { 53 | if (xhr.readyState === 4) { 54 | if (xhr.status === 200) { 55 | ostream.type = 1/*adTypeBinary*/; 56 | ostream.open(); 57 | ostream.write(xhr.responseBody); 58 | ostream.savetofile(filename, 2/* adSaveCreateOverWrite */); 59 | callback(); 60 | } else { 61 | callback(new Error(xhr.status + ' ' + xhr.statusText)); 62 | } 63 | xhr = null; 64 | ostream = null; 65 | } 66 | } 67 | 68 | try { 69 | xhr.open('GET', url, true); 70 | xhr.send(null); 71 | } catch (e) { 72 | callback(new Error('URL may be invalid')); 73 | xhr.abort(); 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /get_npm.js: -------------------------------------------------------------------------------- 1 | var util = require('util'), 2 | fs = require('fs'), 3 | path = require('path'), 4 | wget = require('./wget'); 5 | 6 | var NPM_PKG_JSON_URL = 'https://raw.githubusercontent.com/%s/%s/deps/npm/package.json'; 7 | // https://github.com/npm/npm/tags 8 | var NVMW_NPM_MIRROR = process.env.NVMW_NPM_MIRROR || 'http://npm.taobao.org/mirrors/npm'; 9 | var BASE_URL = NVMW_NPM_MIRROR + '/v%s.zip'; 10 | 11 | var targetDir = process.argv[2]; 12 | var versions = process.argv[3].split('/'); 13 | var binType = versions[0]; 14 | var binVersion = versions[1]; 15 | 16 | if (binType === 'iojs') { 17 | // detect npm version from https://iojs.org/dist/index.json 18 | var NVMW_IOJS_ORG_MIRROR = process.env.NVMW_IOJS_ORG_MIRROR || 'https://iojs.org/dist'; 19 | var pkgUri = NVMW_IOJS_ORG_MIRROR + '/index.json'; 20 | wget(pkgUri, function (filename, content) { 21 | if (filename === null) { 22 | return noNpmAndExit(); 23 | } 24 | var npmVersion; 25 | var items = JSON.parse(content); 26 | for (var i = 0; i < items.length; i++) { 27 | var item = items[i]; 28 | if (!npmVersion) { 29 | // make sure has a npm version 30 | npmVersion = item.npm; 31 | } 32 | if (item.version === binVersion && item.npm) { 33 | npmVersion = item.npm; 34 | break; 35 | } 36 | } 37 | 38 | if (!npmVersion) { 39 | return noNpmAndExit(); 40 | } 41 | downloadNpmZip(npmVersion); 42 | }); 43 | } else { 44 | var pkgUri = util.format(NPM_PKG_JSON_URL, 'nodejs/node', 45 | binVersion === 'latest' ? 'master' : binVersion); 46 | wget(pkgUri, function (filename, pkg) { 47 | if (filename === null) { 48 | return noNpmAndExit(); 49 | } 50 | downloadNpmZip(JSON.parse(pkg).version); 51 | }); 52 | } 53 | 54 | function noNpmAndExit() { 55 | console.error('%s %s does not include npm', binType, binVersion); 56 | process.exit(1); 57 | } 58 | 59 | function downloadNpmZip(version) { 60 | var uri = util.format(BASE_URL, version); 61 | wget(uri, function (filename, data) { 62 | if (filename === null) { 63 | console.error('Can\'t get npm: ' + uri); 64 | process.exit(1); 65 | } 66 | fs.writeFile(path.join(targetDir, 'npm.zip'), data, function (err) { 67 | if (err) { 68 | return console.error(err.message); 69 | } 70 | console.log('Download npm %s is done', version); 71 | }); 72 | }); 73 | } 74 | -------------------------------------------------------------------------------- /nvmw.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | if not defined NVMW_HOME ( 4 | set "NVMW_HOME=%~dp0" 5 | ) 6 | 7 | if not defined PATH_ORG ( 8 | set "PATH_ORG=%PATH%" 9 | ) 10 | 11 | set IS64=FALSE 12 | if exist "%PROGRAMFILES(X86)%" ( 13 | set IS64=TRUE 14 | ) 15 | 16 | if %IS64% == TRUE ( 17 | set OS_ARCH=x64 18 | ) else ( 19 | set OS_ARCH=x32 20 | ) 21 | 22 | if not defined NVMW_NODEJS_ORG_MIRROR ( 23 | set "NVMW_NODEJS_ORG_MIRROR=http://npm.taobao.org/mirrors/node" 24 | ) 25 | 26 | if not defined NVMW_IOJS_ORG_MIRROR ( 27 | set "NVMW_IOJS_ORG_MIRROR=http://npm.taobao.org/mirrors/iojs" 28 | ) 29 | 30 | if "%1" == "install" if not "%2" == "" ( 31 | call :install %2 %3 32 | if not ERRORLEVEL == 1 call :use %2 %3 33 | exit /b %ERRORLEVEL% 34 | ) 35 | 36 | if "%1" == "use" if not "%2" == "" ( 37 | call :use %2 %3 38 | exit /b %ERRORLEVEL% 39 | ) 40 | 41 | if "%1" == "ls" ( 42 | call :ls 43 | exit /b %ERRORLEVEL% 44 | ) 45 | 46 | if "%1" == "uninstall" if not "%2" == "" ( 47 | call :uninstall %2 %3 48 | exit /b %ERRORLEVEL% 49 | ) 50 | 51 | call :help 52 | exit /b %ERRORLEVEL% 53 | 54 | ::=========================================================== 55 | :: help : Show help message 56 | ::=========================================================== 57 | :help 58 | echo; 59 | echo Node Version Manager for Windows 60 | echo; 61 | echo Usage: 62 | echo nvmw help Show this message 63 | echo nvmw install [version] [arch] Download and install a [version] 64 | echo for [arch] architecture (optional) 65 | echo nvmw uninstall [version] Uninstall a [version] 66 | echo nvmw use [version] Modify PATH to use [version] 67 | echo nvmw ls List installed versions 68 | echo; 69 | echo Example: 70 | echo nvmw install v0.10.21 Install a specific version number of node.js 71 | echo nvmw use v0.10.21 Use the specific version 72 | echo nvmw install iojs Install the latest version of io.js 73 | echo nvmw install iojs-v1.0.2 Install a specific version number of io.js 74 | echo nvmw use iojs-v1.0.2 Use the specific version io.js 75 | echo; 76 | echo nvmw install v0.10.35 x86 Install a 32-bit version 77 | exit /b 0 78 | 79 | ::=========================================================== 80 | :: install : Install specified version node and npm 81 | ::=========================================================== 82 | :install 83 | setlocal 84 | 85 | set ARCH=%OS_ARCH% 86 | 87 | if not "%2" == "" ( 88 | set ARCH=%2 89 | :: x86, ia32 alias x32 90 | if "%2" == "x86" ( 91 | set ARCH=x32 92 | ) 93 | if "%2" == "ia32" ( 94 | set ARCH=x32 95 | ) 96 | ) 97 | 98 | set NODE_TYPE=node 99 | set NODE_VERSION=%1 100 | 101 | :: nvmw install iojs-v1.0.2 102 | if "%NODE_VERSION:~4,1%" == "-" ( 103 | for /f "tokens=1,2,* delims=-" %%a in ("%NODE_VERSION%") do ( 104 | set NODE_TYPE=%%a 105 | set NODE_VERSION=%%b 106 | ) 107 | ) 108 | 109 | :: nvmw install iojs 110 | if %NODE_VERSION% == iojs ( 111 | set NODE_TYPE=iojs 112 | set NODE_VERSION=latest 113 | ) 114 | 115 | :: nvmw install node 116 | if %NODE_VERSION% == node ( 117 | set NODE_TYPE=node 118 | set NODE_VERSION=latest 119 | ) 120 | 121 | :: iojs-1.0.0, iojs-latest 122 | if not %NODE_VERSION:~0,1% == v if not %NODE_VERSION:~0,1% == l ( 123 | set NODE_VERSION=v%NODE_VERSION% 124 | ) 125 | 126 | if %NODE_TYPE% == iojs ( 127 | set DIST_URL=%% 128 | if %ARCH% == x32 ( 129 | set NODE_EXE_URL=%NVMW_IOJS_ORG_MIRROR%/%NODE_VERSION%/win-x86/iojs.exe 130 | ) else ( 131 | set NODE_EXE_URL=%NVMW_IOJS_ORG_MIRROR%/%NODE_VERSION%/win-x64/iojs.exe 132 | ) 133 | ) else ( 134 | if %ARCH% == x32 ( 135 | set NODE_EXE_URL=%NVMW_NODEJS_ORG_MIRROR%/%NODE_VERSION%/win-x86/node.exe 136 | ) else ( 137 | set NODE_EXE_URL=%NVMW_NODEJS_ORG_MIRROR%/%NODE_VERSION%/win-x64/node.exe 138 | ) 139 | ) 140 | 141 | set "NODE_HOME=%NVMW_HOME%%NODE_VERSION%" 142 | if %NODE_TYPE% == iojs ( 143 | set "NODE_HOME=%NVMW_HOME%%NODE_TYPE%\%NODE_VERSION%" 144 | ) 145 | 146 | if not %ARCH% == %OS_ARCH% ( 147 | set "NODE_HOME=%NODE_HOME%-%ARCH%" 148 | ) 149 | 150 | set "NODE_EXE_FILE=%NODE_HOME%\%NODE_TYPE%.exe" 151 | set "NPM_ZIP_FILE=%NODE_HOME%\npm.zip" 152 | 153 | if exist "%NODE_EXE_FILE%" ( 154 | endlocal 155 | echo "%NODE_TYPE%/%NODE_VERSION% (%ARCH%)" already exists, please uninstall it first 156 | exit /b 1 157 | ) 158 | 159 | mkdir "%NODE_HOME%" 160 | 161 | echo Start installing %NODE_TYPE%/%NODE_VERSION% (%ARCH%) to %NODE_HOME% 162 | 163 | cscript //nologo "%NVMW_HOME%\fget.js" %NODE_EXE_URL% "%NODE_EXE_FILE%" 164 | 165 | if not exist "%NODE_EXE_FILE%" ( 166 | echo Download %NODE_EXE_FILE% from %NODE_EXE_URL% failed 167 | goto install_error 168 | ) else ( 169 | if %NODE_TYPE% == iojs ( 170 | copy "%NVMW_HOME%\alias-node.cmd" "%NODE_HOME%\node.cmd" 171 | ) 172 | 173 | echo Start install npm 174 | 175 | "%NODE_EXE_FILE%" "%NVMW_HOME%\get_npm.js" "%NODE_HOME%" "%NODE_TYPE%/%NODE_VERSION%" 176 | if not exist "%NPM_ZIP_FILE%" goto install_error 177 | 178 | set "CD_ORG=%CD%" 179 | %~d0 180 | cd "%NODE_HOME%" 181 | echo Start unzip "%NPM_ZIP_FILE%" to "%NODE_HOME%" 182 | cscript //nologo "%NVMW_HOME%\unzip.js" "%NPM_ZIP_FILE%" "%NODE_HOME%" 183 | mkdir "%NODE_HOME%\node_modules" 184 | rmdir /s /q "%NODE_HOME%\node_modules\npm" 185 | move npm-* "%NODE_HOME%\node_modules\npm" 186 | copy "%NODE_HOME%\node_modules\npm\bin\npm.cmd" "%NODE_HOME%\npm.cmd" 187 | cd "%CD_ORG%" 188 | if not exist "%NODE_HOME%\npm.cmd" goto install_error 189 | echo npm install ok 190 | 191 | echo Finished 192 | endlocal 193 | exit /b 0 194 | ) 195 | :install_error 196 | rd /Q /S "%NODE_HOME%" 197 | endlocal 198 | exit /b 1 199 | 200 | ::=========================================================== 201 | :: uninstall : Uninstall specified version 202 | ::=========================================================== 203 | :uninstall 204 | setlocal 205 | 206 | set ARCH=%OS_ARCH% 207 | 208 | if not "%2" == "" ( 209 | set ARCH=%2 210 | :: x86, ia32 alias x32 211 | if "%2" == "x86" ( 212 | set ARCH=x32 213 | ) 214 | if "%2" == "ia32" ( 215 | set ARCH=x32 216 | ) 217 | ) 218 | 219 | set NODE_TYPE=node 220 | set NODE_VERSION=%1 221 | 222 | if "%NODE_VERSION:~4,1%" == "-" ( 223 | for /f "tokens=1,2,* delims=-" %%a in ("%NODE_VERSION%") do ( 224 | set NODE_TYPE=%%a 225 | set NODE_VERSION=%%b 226 | ) 227 | ) 228 | 229 | :: nvmw uninstall iojs 230 | if %NODE_VERSION% == iojs ( 231 | set NODE_TYPE=iojs 232 | set NODE_VERSION=latest 233 | ) 234 | 235 | :: nvmw uninstall node 236 | if %NODE_VERSION% == node ( 237 | set NODE_TYPE=node 238 | set NODE_VERSION=latest 239 | ) 240 | 241 | if not %NODE_VERSION:~0,1% == v if not %NODE_VERSION:~0,1% == l ( 242 | set NODE_VERSION=v%NODE_VERSION% 243 | ) 244 | 245 | if "%NVMW_CURRENT_TYPE%" == "%NODE_TYPE%" if "%NVMW_CURRENT%" == "%NODE_VERSION%" if "%NVMW_CURRENT_ARCH%" == "%ARCH%" ( 246 | echo Cannot uninstall currently-active %NODE_TYPE%/%NODE_VERSION% %ARCH% 247 | exit /b 1 248 | ) 249 | 250 | set "NODE_HOME=%NVMW_HOME%%NODE_VERSION%" 251 | if %NODE_TYPE% == iojs ( 252 | set "NODE_HOME=%NVMW_HOME%%NODE_TYPE%\%NODE_VERSION%" 253 | ) 254 | 255 | if not %ARCH% == %OS_ARCH% ( 256 | set "NODE_HOME=%NODE_HOME%-%ARCH%" 257 | ) 258 | 259 | if not exist "%NODE_HOME%" ( 260 | echo %NODE_TYPE%/%NODE_VERSION% %ARCH% is not installed 261 | exit /b 1 262 | ) else ( 263 | rd /Q /S "%NODE_HOME%" 264 | if ERRORLEVEL == 1 ( 265 | echo Cannot uninstall %NODE_TYPE%/%NODE_VERSION% %ARCH% 266 | exit /b 1 267 | ) else ( 268 | echo Uninstalled %NODE_TYPE%/%NODE_VERSION% %ARCH% 269 | endlocal 270 | exit /b 0 271 | ) 272 | ) 273 | 274 | ::=========================================================== 275 | :: use : Change current version 276 | ::=========================================================== 277 | :use 278 | setlocal 279 | 280 | set ARCH=%OS_ARCH% 281 | 282 | if not "%2" == "" ( 283 | set ARCH=%2 284 | :: x86, ia32 alias x32 285 | if "%2" == "x86" ( 286 | set ARCH=x32 287 | ) 288 | if "%2" == "ia32" ( 289 | set ARCH=x32 290 | ) 291 | ) 292 | 293 | set NODE_TYPE=node 294 | set NODE_VERSION=%1 295 | 296 | if "%NODE_VERSION:~4,1%" == "-" ( 297 | for /f "tokens=1,2,* delims=-" %%a in ("%NODE_VERSION%") do ( 298 | set NODE_TYPE=%%a 299 | set NODE_VERSION=%%b 300 | ) 301 | ) 302 | 303 | :: nvmw use iojs 304 | if %NODE_VERSION% == iojs ( 305 | set NODE_TYPE=iojs 306 | set NODE_VERSION=latest 307 | ) 308 | 309 | :: nvmw use node 310 | if %NODE_VERSION% == node ( 311 | set NODE_TYPE=node 312 | set NODE_VERSION=latest 313 | ) 314 | 315 | if not %NODE_VERSION:~0,1% == v if not %NODE_VERSION:~0,1% == l ( 316 | set NODE_VERSION=v%NODE_VERSION% 317 | ) 318 | 319 | set "NODE_HOME=%NVMW_HOME%%NODE_VERSION%" 320 | if %NODE_TYPE% == iojs ( 321 | set "NODE_HOME=%NVMW_HOME%%NODE_TYPE%\%NODE_VERSION%" 322 | ) 323 | 324 | if not %ARCH% == %OS_ARCH% ( 325 | set "NODE_HOME=%NODE_HOME%-%ARCH%" 326 | ) 327 | 328 | if not exist "%NODE_HOME%" ( 329 | echo %NODE_TYPE%/%NODE_VERSION% is not installed 330 | exit /b 1 331 | ) 332 | 333 | endlocal 334 | 335 | set NVMW_CURRENT_ARCH=%OS_ARCH% 336 | if not "%2" == "" ( 337 | set NVMW_CURRENT_ARCH=%2 338 | :: x86, ia32 alias x32 339 | if "%2" == "x86" ( 340 | set NVMW_CURRENT_ARCH=x32 341 | ) 342 | if "%2" == "ia32" ( 343 | set NVMW_CURRENT_ARCH=x32 344 | ) 345 | ) 346 | 347 | set NVMW_CURRENT_TYPE=node 348 | set NVMW_CURRENT=%1 349 | if "%NVMW_CURRENT:~4,1%" == "-" ( 350 | for /f "tokens=1,2,* delims=-" %%a in ("%NVMW_CURRENT%") do ( 351 | set NVMW_CURRENT_TYPE=%%a 352 | set NVMW_CURRENT=%%b 353 | ) 354 | ) 355 | 356 | if %NVMW_CURRENT% == iojs ( 357 | set NVMW_CURRENT_TYPE=iojs 358 | set NVMW_CURRENT=latest 359 | ) 360 | 361 | if %NVMW_CURRENT% == node ( 362 | set NVMW_CURRENT_TYPE=node 363 | set NVMW_CURRENT=latest 364 | ) 365 | 366 | if not %NVMW_CURRENT:~0,1% == v if not %NVMW_CURRENT:~0,1% == l ( 367 | set NVMW_CURRENT=v%NVMW_CURRENT% 368 | ) 369 | 370 | echo Now using %NVMW_CURRENT_TYPE% %NVMW_CURRENT% %NVMW_CURRENT_ARCH% 371 | 372 | set "NODE_HOME=%NVMW_HOME%%NODE_VERSION%" 373 | if %NVMW_CURRENT_TYPE% == iojs ( 374 | set "NODE_HOME=%NVMW_HOME%%NODE_TYPE%\%NODE_VERSION%" 375 | ) 376 | 377 | if not %NVMW_CURRENT_ARCH% == %OS_ARCH% ( 378 | set NVMW_CURRENT_ARCH_PADDING=-%NVMW_CURRENT_ARCH% 379 | ) else ( 380 | set NVMW_CURRENT_ARCH_PADDING= 381 | ) 382 | 383 | if %NVMW_CURRENT_TYPE% == iojs ( 384 | set "PATH=%NVMW_HOME%;%NVMW_HOME%%NVMW_CURRENT_TYPE%\%NVMW_CURRENT%%NVMW_CURRENT_ARCH_PADDING%;%PATH_ORG%" 385 | set "NODE_PATH=%NVMW_HOME%%NVMW_CURRENT_TYPE%\%NVMW_CURRENT%%NVMW_CURRENT_ARCH_PADDING%\node_modules" 386 | ) else ( 387 | set "PATH=%NVMW_HOME%;%NVMW_HOME%\%NVMW_CURRENT%%NVMW_CURRENT_ARCH_PADDING%;%PATH_ORG%" 388 | set "NODE_PATH=%NVMW_HOME%\%NVMW_CURRENT%%NVMW_CURRENT_ARCH_PADDING%\node_modules" 389 | ) 390 | 391 | exit /b 0 392 | 393 | ::=========================================================== 394 | :: ls : List installed versions 395 | ::=========================================================== 396 | :ls 397 | setlocal 398 | 399 | echo node: 400 | if exist "%NVMW_HOME%" ( 401 | dir "%NVMW_HOME%v*" /b /ad 402 | ) 403 | echo; 404 | echo iojs: 405 | if exist "%NVMW_HOME%iojs" ( 406 | dir "%NVMW_HOME%iojs\v*" /b /ad 407 | ) 408 | echo; 409 | 410 | if not defined NVMW_CURRENT ( 411 | set NVMW_CURRENT_V=none 412 | ) else ( 413 | set NVMW_CURRENT_V=%NVMW_CURRENT% 414 | ) 415 | echo Current: %NVMW_CURRENT_TYPE%/%NVMW_CURRENT_V% %NVMW_CURRENT_ARCH% 416 | endlocal 417 | exit /b 0 418 | -------------------------------------------------------------------------------- /unzip.js: -------------------------------------------------------------------------------- 1 | main(WScript.Arguments); 2 | 3 | /** 4 | * Main function 5 | * @param {Object} args Command line arguments 6 | */ 7 | function main(args) { 8 | if (args.length < 2) { 9 | log('useage: CScript unzip.js [zipfile] [output]'); 10 | WScript.Quit(1); 11 | } 12 | 13 | var zipfile = args(0), 14 | outPath = args(1); 15 | 16 | var shell = new ActiveXObject("shell.application"); 17 | var zip = shell.NameSpace(zipfile); 18 | var out = shell.NameSpace(outPath); 19 | out.CopyHere(zip.Items(), 0); 20 | 21 | shell = null; 22 | } 23 | -------------------------------------------------------------------------------- /wget.js: -------------------------------------------------------------------------------- 1 | var url = require('url'), 2 | bytes = require('./bytes'), 3 | fs = require('fs'), 4 | ESC_UP_CLL = '\x1B[1A\x1B[K'; // Up + Clear-Line 5 | 6 | function wget(uri, callback) { 7 | console.log('Download file from %s', uri); 8 | 9 | var options = url.parse(uri); 10 | var paths = options.pathname.split('/'); 11 | var filename = paths[paths.length - 1]; 12 | console.log(filename); 13 | 14 | var http = require(uri.indexOf('https') === 0 ? 'https' : 'http'); 15 | 16 | var req = http.get(options, function (res) { 17 | if (res.statusCode === 302 || res.statusCode === 301) { 18 | console.log('Redirect: ' + res.headers.location); 19 | return wget(res.headers.location, callback); 20 | } 21 | if (res.statusCode !== 200) { 22 | callback(null); 23 | return; 24 | } 25 | var contentLength = parseInt(res.headers['content-length'], 10); 26 | if (isNaN(contentLength)) { 27 | console.log('Can\'t get \'content-length\''); 28 | callback(null); 29 | return; 30 | } 31 | console.log('Content length is %s', bytes(contentLength)); 32 | 33 | var data = new Buffer(contentLength); 34 | var offset = 0; 35 | 36 | var start = Date.now(); 37 | console.log(''); // New line for ESC_UP_CLL 38 | res.on('data', function (buf) { 39 | buf.copy(data, offset); 40 | offset += buf.length; 41 | var use = Date.now() - start; 42 | if (use === 0) { 43 | use = 1; 44 | } 45 | console.log(ESC_UP_CLL + 'Download %d%, %s / %s, %s/s ...', 46 | parseInt(offset / contentLength * 100, 10), bytes(offset), bytes(contentLength), 47 | bytes(offset / use * 1000)); 48 | }); 49 | 50 | res.on('end', function () { 51 | console.log('Donwload done'); 52 | callback(filename, data); 53 | }); 54 | }); 55 | 56 | req.on('error', function (e) { 57 | console.log('Got error: ' + e.message); 58 | }); 59 | } 60 | 61 | module.exports = wget; 62 | --------------------------------------------------------------------------------