nvm-vanilla 1.0.9 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/bin.js +8 -2
- package/src/index.js +28 -8
- package/src/nvm.ps1 +2 -6
- package/src/nvm.sh +0 -3
package/package.json
CHANGED
package/src/bin.js
CHANGED
|
@@ -4,7 +4,8 @@ const fs = require('fs');
|
|
|
4
4
|
const os = require('os');
|
|
5
5
|
const path = require('path');
|
|
6
6
|
const { promisify } = require('util');
|
|
7
|
-
const { spawnSync,
|
|
7
|
+
const { spawnSync, execFile } = require('child_process');
|
|
8
|
+
const { version: pkgVersion } = require('../package.json');
|
|
8
9
|
|
|
9
10
|
const { init: install, use, list, detect, uninstall, alias, which } = require('./index');
|
|
10
11
|
|
|
@@ -45,6 +46,10 @@ const main = async () => {
|
|
|
45
46
|
};
|
|
46
47
|
|
|
47
48
|
switch (command) {
|
|
49
|
+
case '--version': {
|
|
50
|
+
console.log(pkgVersion);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
48
53
|
case 'env': {
|
|
49
54
|
const content = await promisify(fs.readFile)(path.resolve(
|
|
50
55
|
__dirname,
|
|
@@ -104,7 +109,8 @@ const main = async () => {
|
|
|
104
109
|
break;
|
|
105
110
|
}
|
|
106
111
|
case 'current': {
|
|
107
|
-
|
|
112
|
+
const nodeVersionOutput = await promisify(execFile)('node', ['--version']).catch(() => { });
|
|
113
|
+
if (nodeVersionOutput) console.log(nodeVersionOutput.stdout.replace(/^v/, '').trim());
|
|
108
114
|
break;
|
|
109
115
|
}
|
|
110
116
|
case 'init': {
|
package/src/index.js
CHANGED
|
@@ -200,10 +200,24 @@ const clear = async (dir) => {
|
|
|
200
200
|
};
|
|
201
201
|
|
|
202
202
|
const getLocalNodeVersion = async (baseDir, name) => {
|
|
203
|
-
|
|
203
|
+
let aliasFile = path.join(baseDir, name);
|
|
204
|
+
let packageFile = path.join(baseDir, name, 'node_modules', nodePackageName, 'package.json');
|
|
205
|
+
|
|
206
|
+
let [
|
|
207
|
+
aliasVersion,
|
|
208
|
+
packageData,
|
|
209
|
+
] = await Promise.all([
|
|
210
|
+
promisify(fs.readFile)(aliasFile, 'utf-8').catch(() => { }),
|
|
211
|
+
readJsonFile(packageFile).catch(() => { }),
|
|
212
|
+
]);
|
|
213
|
+
|
|
214
|
+
if (aliasVersion) {
|
|
215
|
+
packageFile = path.join(baseDir, aliasVersion, 'node_modules', nodePackageName, 'package.json');
|
|
216
|
+
packageData = await readJsonFile(packageFile).catch(() => { });
|
|
217
|
+
}
|
|
218
|
+
|
|
204
219
|
try {
|
|
205
|
-
|
|
206
|
-
return version.replace(/^v/, '');
|
|
220
|
+
return packageData.version.replace(/^v/, '');
|
|
207
221
|
} catch (_) {
|
|
208
222
|
throw `no local node version "${name}"`;
|
|
209
223
|
}
|
|
@@ -223,16 +237,19 @@ const alias = async (baseDir, version, targetVersion) => {
|
|
|
223
237
|
console.log(nodeVersion);
|
|
224
238
|
return;
|
|
225
239
|
} else if (!resetFlag) {
|
|
226
|
-
await getLocalNodeVersion(baseDir, targetVersion); // check
|
|
240
|
+
targetVersion = await getLocalNodeVersion(baseDir, targetVersion); // check
|
|
227
241
|
}
|
|
228
242
|
|
|
229
|
-
const sourceDir = path.join(baseDir, targetVersion);
|
|
243
|
+
// const sourceDir = path.join(baseDir, targetVersion);
|
|
230
244
|
|
|
231
245
|
try {
|
|
232
246
|
await promisify(fs.unlink)(linkDir);
|
|
233
247
|
} catch (_) { }
|
|
234
248
|
|
|
235
|
-
if (!resetFlag)
|
|
249
|
+
if (!resetFlag) {
|
|
250
|
+
// await promisify(fs.symlink)(sourceDir, linkDir, 'dir');
|
|
251
|
+
await promisify(fs.writeFile)(linkDir, targetVersion, 'utf-8');
|
|
252
|
+
}
|
|
236
253
|
};
|
|
237
254
|
|
|
238
255
|
const init = async (baseDir, version) => {
|
|
@@ -385,8 +402,11 @@ const list = async (baseDir) => {
|
|
|
385
402
|
const nameList = await promisify(fs.readdir)(baseDir).catch(() => []);
|
|
386
403
|
|
|
387
404
|
let versionList = await Promise.all(nameList.map(async name => {
|
|
388
|
-
const version = await getLocalNodeVersion(baseDir, name).catch(() => {});
|
|
389
|
-
if (!version)
|
|
405
|
+
const version = await getLocalNodeVersion(baseDir, name).catch(() => { });
|
|
406
|
+
if (!version) {
|
|
407
|
+
await uninstall(baseDir, version);
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
390
410
|
return 'node@' + name + ' (' + version + ')';
|
|
391
411
|
}));
|
|
392
412
|
|
package/src/nvm.ps1
CHANGED
|
@@ -10,12 +10,10 @@ function nvm {
|
|
|
10
10
|
$global:_nvmAutoloadDir = ""
|
|
11
11
|
|
|
12
12
|
function _nvmAutoloadHook {
|
|
13
|
-
# 只在交互式 shell 中运行
|
|
14
13
|
if (-not [Environment]::UserInteractive) { return }
|
|
15
|
-
|
|
14
|
+
|
|
16
15
|
$currentDir = (Get-Location).Path
|
|
17
|
-
|
|
18
|
-
# 如果目录没变,跳过
|
|
16
|
+
|
|
19
17
|
if ($global:_nvmAutoloadDir -eq $currentDir) { return }
|
|
20
18
|
|
|
21
19
|
nvm autoload
|
|
@@ -23,7 +21,6 @@ function _nvmAutoloadHook {
|
|
|
23
21
|
$global:_nvmAutoloadDir = $currentDir
|
|
24
22
|
}
|
|
25
23
|
|
|
26
|
-
# 集成到 prompt 中
|
|
27
24
|
$originalPrompt = Get-Item function:prompt -ErrorAction SilentlyContinue
|
|
28
25
|
if ($originalPrompt) {
|
|
29
26
|
$originalPrompt = $originalPrompt.ScriptBlock
|
|
@@ -32,7 +29,6 @@ if ($originalPrompt) {
|
|
|
32
29
|
function global:prompt {
|
|
33
30
|
_nvmAutoloadHook
|
|
34
31
|
|
|
35
|
-
# 调用原始 prompt
|
|
36
32
|
if ($originalPrompt) {
|
|
37
33
|
& $originalPrompt
|
|
38
34
|
} else {
|
package/src/nvm.sh
CHANGED
|
@@ -21,14 +21,11 @@ _nvm_autoload_hook() {
|
|
|
21
21
|
nvm_autoload_dir="$current_dir"
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
# 根据不同 shell 设置钩子
|
|
25
24
|
case "$SHELL" in
|
|
26
25
|
*bash*)
|
|
27
|
-
# bash: 使用 PROMPT_COMMAND
|
|
28
26
|
PROMPT_COMMAND="_nvm_autoload_hook; $PROMPT_COMMAND"
|
|
29
27
|
;;
|
|
30
28
|
*zsh*)
|
|
31
|
-
# zsh: 使用 chpwd 或 precmd 钩子
|
|
32
29
|
autoload -U add-zsh-hook
|
|
33
30
|
add-zsh-hook chpwd _nvm_autoload_hook
|
|
34
31
|
;;
|