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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nvm-vanilla",
3
- "version": "1.0.9",
3
+ "version": "1.0.11",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "bin": {
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, execFileSync } = require('child_process');
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
- spawnSync('node', ['--version'], { stdio: 'inherit' });
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
- const packageFile = path.join(baseDir, name, 'node_modules', nodePackageName, 'package.json');
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
- const { version } = await readJsonFile(packageFile);
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) await promisify(fs.symlink)(sourceDir, linkDir, 'dir');
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) return;
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
  ;;