@fredlackey/devutils 0.0.1 → 0.0.2
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/README.md +5 -5
- package/package.json +1 -1
- package/src/commands/install.js +374 -36
- package/src/installs/adobe-creative-cloud.js +527 -25
- package/src/installs/adobe-creative-cloud.md +605 -0
- package/src/installs/appcleaner.js +303 -26
- package/src/installs/appcleaner.md +699 -0
- package/src/installs/apt-transport-https.js +390 -0
- package/src/installs/apt-transport-https.md +678 -0
- package/src/installs/atomicparsley.js +624 -26
- package/src/installs/atomicparsley.md +795 -0
- package/src/installs/aws-cli.js +779 -26
- package/src/installs/aws-cli.md +727 -0
- package/src/installs/balena-etcher.js +688 -26
- package/src/installs/balena-etcher.md +761 -0
- package/src/installs/bambu-studio.js +912 -26
- package/src/installs/bambu-studio.md +780 -0
- package/src/installs/bash-completion.js +554 -23
- package/src/installs/bash-completion.md +833 -0
- package/src/installs/bash.js +399 -26
- package/src/installs/bash.md +993 -0
- package/src/installs/beyond-compare.js +585 -26
- package/src/installs/beyond-compare.md +813 -0
- package/src/installs/build-essential.js +511 -26
- package/src/installs/build-essential.md +977 -0
- package/src/installs/ca-certificates.js +618 -0
- package/src/installs/ca-certificates.md +937 -0
- package/src/installs/caffeine.js +490 -26
- package/src/installs/caffeine.md +839 -0
- package/src/installs/camtasia.js +577 -25
- package/src/installs/camtasia.md +762 -0
- package/src/installs/chatgpt.js +458 -26
- package/src/installs/chatgpt.md +814 -0
- package/src/installs/chocolatey.js +447 -0
- package/src/installs/chocolatey.md +661 -0
- package/src/installs/chrome-canary.js +472 -26
- package/src/installs/chrome-canary.md +641 -0
- package/src/installs/chromium.js +645 -26
- package/src/installs/chromium.md +838 -0
- package/src/installs/claude-code.js +558 -26
- package/src/installs/claude-code.md +1173 -0
- package/src/installs/curl.js +361 -26
- package/src/installs/curl.md +714 -0
- package/src/installs/cursor.js +561 -26
- package/src/installs/cursor.md +970 -0
- package/src/installs/dbschema.js +674 -26
- package/src/installs/dbschema.md +925 -0
- package/src/installs/dependencies.md +435 -0
- package/src/installs/development-tools.js +600 -0
- package/src/installs/development-tools.md +977 -0
- package/src/installs/docker.js +1010 -25
- package/src/installs/docker.md +1109 -0
- package/src/installs/drawio.js +1001 -26
- package/src/installs/drawio.md +795 -0
- package/src/installs/elmedia-player.js +328 -25
- package/src/installs/elmedia-player.md +556 -0
- package/src/installs/ffmpeg.js +870 -25
- package/src/installs/ffmpeg.md +852 -0
- package/src/installs/file.js +464 -0
- package/src/installs/file.md +987 -0
- package/src/installs/gemini-cli.js +793 -26
- package/src/installs/gemini-cli.md +1153 -0
- package/src/installs/git.js +382 -26
- package/src/installs/git.md +907 -0
- package/src/installs/gitego.js +931 -26
- package/src/installs/gitego.md +1172 -0
- package/src/installs/go.js +913 -26
- package/src/installs/go.md +958 -0
- package/src/installs/google-chrome.js +801 -25
- package/src/installs/google-chrome.md +862 -0
- package/src/installs/gpg.js +412 -73
- package/src/installs/gpg.md +1056 -0
- package/src/installs/homebrew.js +1015 -26
- package/src/installs/homebrew.md +988 -0
- package/src/installs/imageoptim.js +950 -26
- package/src/installs/imageoptim.md +1119 -0
- package/src/installs/installers.json +2297 -0
- package/src/installs/jq.js +382 -26
- package/src/installs/jq.md +809 -0
- package/src/installs/keyboard-maestro.js +701 -26
- package/src/installs/keyboard-maestro.md +825 -0
- package/src/installs/latex.js +771 -26
- package/src/installs/latex.md +1095 -0
- package/src/installs/lftp.js +338 -26
- package/src/installs/lftp.md +907 -0
- package/src/installs/lsb-release.js +346 -0
- package/src/installs/lsb-release.md +814 -0
- package/src/installs/messenger.js +829 -26
- package/src/installs/messenger.md +900 -0
- package/src/installs/microsoft-office.js +550 -26
- package/src/installs/microsoft-office.md +760 -0
- package/src/installs/microsoft-teams.js +782 -25
- package/src/installs/microsoft-teams.md +886 -0
- package/src/installs/node.js +886 -26
- package/src/installs/node.md +1153 -0
- package/src/installs/nordpass.js +698 -26
- package/src/installs/nordpass.md +921 -0
- package/src/installs/nvm.js +977 -26
- package/src/installs/nvm.md +1057 -0
- package/src/installs/openssh.js +734 -64
- package/src/installs/openssh.md +1056 -0
- package/src/installs/pandoc.js +644 -26
- package/src/installs/pandoc.md +1036 -0
- package/src/installs/pinentry.js +492 -26
- package/src/installs/pinentry.md +1142 -0
- package/src/installs/pngyu.js +851 -26
- package/src/installs/pngyu.md +896 -0
- package/src/installs/postman.js +781 -26
- package/src/installs/postman.md +940 -0
- package/src/installs/procps.js +425 -0
- package/src/installs/procps.md +851 -0
- package/src/installs/safari-tech-preview.js +355 -25
- package/src/installs/safari-tech-preview.md +533 -0
- package/src/installs/sfnt2woff.js +640 -26
- package/src/installs/sfnt2woff.md +795 -0
- package/src/installs/shellcheck.js +463 -26
- package/src/installs/shellcheck.md +1005 -0
- package/src/installs/slack.js +722 -25
- package/src/installs/slack.md +865 -0
- package/src/installs/snagit.js +566 -25
- package/src/installs/snagit.md +844 -0
- package/src/installs/software-properties-common.js +372 -0
- package/src/installs/software-properties-common.md +805 -0
- package/src/installs/spotify.js +858 -25
- package/src/installs/spotify.md +901 -0
- package/src/installs/studio-3t.js +803 -26
- package/src/installs/studio-3t.md +918 -0
- package/src/installs/sublime-text.js +780 -25
- package/src/installs/sublime-text.md +914 -0
- package/src/installs/superwhisper.js +687 -25
- package/src/installs/superwhisper.md +630 -0
- package/src/installs/tailscale.js +727 -26
- package/src/installs/tailscale.md +1100 -0
- package/src/installs/tar.js +389 -0
- package/src/installs/tar.md +946 -0
- package/src/installs/termius.js +780 -26
- package/src/installs/termius.md +844 -0
- package/src/installs/terraform.js +761 -26
- package/src/installs/terraform.md +899 -0
- package/src/installs/tidal.js +752 -25
- package/src/installs/tidal.md +864 -0
- package/src/installs/tmux.js +328 -26
- package/src/installs/tmux.md +1030 -0
- package/src/installs/tree.js +393 -26
- package/src/installs/tree.md +833 -0
- package/src/installs/unzip.js +460 -0
- package/src/installs/unzip.md +879 -0
- package/src/installs/vim.js +403 -26
- package/src/installs/vim.md +1040 -0
- package/src/installs/vlc.js +803 -26
- package/src/installs/vlc.md +927 -0
- package/src/installs/vscode.js +825 -26
- package/src/installs/vscode.md +1002 -0
- package/src/installs/wget.js +415 -0
- package/src/installs/wget.md +791 -0
- package/src/installs/whatsapp.js +710 -25
- package/src/installs/whatsapp.md +854 -0
- package/src/installs/winpty.js +352 -0
- package/src/installs/winpty.md +620 -0
- package/src/installs/woff2.js +535 -26
- package/src/installs/woff2.md +977 -0
- package/src/installs/wsl.js +572 -0
- package/src/installs/wsl.md +699 -0
- package/src/installs/xcode-clt.js +520 -0
- package/src/installs/xcode-clt.md +351 -0
- package/src/installs/xcode.js +542 -26
- package/src/installs/xcode.md +573 -0
- package/src/installs/yarn.js +806 -26
- package/src/installs/yarn.md +1074 -0
- package/src/installs/yq.js +636 -26
- package/src/installs/yq.md +944 -0
- package/src/installs/yt-dlp.js +683 -26
- package/src/installs/yt-dlp.md +946 -0
- package/src/installs/yum-utils.js +297 -0
- package/src/installs/yum-utils.md +648 -0
- package/src/installs/zoom.js +740 -25
- package/src/installs/zoom.md +884 -0
- package/src/scripts/README.md +567 -45
- package/src/scripts/STATUS.md +208 -0
- package/src/scripts/afk.js +395 -7
- package/src/scripts/backup-all.js +731 -9
- package/src/scripts/backup-source.js +711 -8
- package/src/scripts/brewd.js +373 -7
- package/src/scripts/brewi.js +505 -9
- package/src/scripts/brewr.js +512 -9
- package/src/scripts/brews.js +462 -9
- package/src/scripts/brewu.js +488 -7
- package/src/scripts/c.js +185 -7
- package/src/scripts/ccurl.js +325 -8
- package/src/scripts/certbot-crontab-init.js +488 -8
- package/src/scripts/certbot-init.js +641 -9
- package/src/scripts/ch.js +339 -7
- package/src/scripts/claude-danger.js +253 -8
- package/src/scripts/clean-dev.js +419 -8
- package/src/scripts/clear-dns-cache.js +525 -7
- package/src/scripts/clone.js +417 -7
- package/src/scripts/code-all.js +420 -7
- package/src/scripts/count-files.js +195 -8
- package/src/scripts/count-folders.js +195 -8
- package/src/scripts/count.js +248 -8
- package/src/scripts/d.js +203 -7
- package/src/scripts/datauri.js +373 -8
- package/src/scripts/delete-files.js +363 -7
- package/src/scripts/docker-clean.js +410 -8
- package/src/scripts/dp.js +426 -7
- package/src/scripts/e.js +375 -9
- package/src/scripts/empty-trash.js +497 -7
- package/src/scripts/evm.js +428 -9
- package/src/scripts/fetch-github-repos.js +441 -10
- package/src/scripts/get-channel.js +329 -8
- package/src/scripts/get-course.js +384 -11
- package/src/scripts/get-dependencies.js +290 -9
- package/src/scripts/get-folder.js +783 -10
- package/src/scripts/get-tunes.js +411 -10
- package/src/scripts/get-video.js +352 -9
- package/src/scripts/git-backup.js +561 -9
- package/src/scripts/git-clone.js +477 -9
- package/src/scripts/git-pup.js +303 -7
- package/src/scripts/git-push.js +380 -8
- package/src/scripts/h.js +607 -9
- package/src/scripts/hide-desktop-icons.js +483 -7
- package/src/scripts/hide-hidden-files.js +522 -7
- package/src/scripts/install-dependencies-from.js +440 -9
- package/src/scripts/ips.js +647 -10
- package/src/scripts/iso.js +354 -8
- package/src/scripts/killni.js +561 -7
- package/src/scripts/ll.js +451 -8
- package/src/scripts/local-ip.js +310 -8
- package/src/scripts/m.js +508 -8
- package/src/scripts/map.js +293 -8
- package/src/scripts/mkd.js +287 -7
- package/src/scripts/ncu-update-all.js +441 -8
- package/src/scripts/nginx-init.js +702 -12
- package/src/scripts/npmi.js +366 -7
- package/src/scripts/o.js +495 -8
- package/src/scripts/org-by-date.js +321 -7
- package/src/scripts/p.js +208 -7
- package/src/scripts/packages.js +313 -8
- package/src/scripts/path.js +209 -7
- package/src/scripts/ports.js +582 -8
- package/src/scripts/q.js +290 -8
- package/src/scripts/refresh-files.js +378 -10
- package/src/scripts/remove-smaller-files.js +500 -8
- package/src/scripts/rename-files-with-date.js +517 -9
- package/src/scripts/resize-image.js +523 -9
- package/src/scripts/rm-safe.js +653 -8
- package/src/scripts/s.js +525 -9
- package/src/scripts/set-git-public.js +349 -7
- package/src/scripts/show-desktop-icons.js +459 -7
- package/src/scripts/show-hidden-files.js +456 -7
- package/src/scripts/tpa.js +265 -8
- package/src/scripts/tpo.js +264 -7
- package/src/scripts/u.js +489 -7
- package/src/scripts/vpush.js +422 -8
- package/src/scripts/y.js +267 -7
- package/src/utils/common/os.js +94 -2
- package/src/utils/ubuntu/apt.js +13 -7
package/src/scripts/npmi.js
CHANGED
|
@@ -1,23 +1,382 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* npmi - Remove node_modules and reinstall dependencies
|
|
5
|
+
*
|
|
6
|
+
* Migrated from legacy dotfiles alias.
|
|
7
|
+
* Original:
|
|
8
|
+
* npmi() {
|
|
9
|
+
* if [ ! -f "$PWD/package.json" ]; then
|
|
10
|
+
* echo "Not an NPM package folder."
|
|
11
|
+
* return 1
|
|
12
|
+
* fi
|
|
13
|
+
* if [ -e "$PWD/node_modules" ]; then
|
|
14
|
+
* echo "Removing old node_modules folder..."
|
|
15
|
+
* eval "rm -rf $PWD/node_modules"
|
|
16
|
+
* if [ -e "$PWD/node_modules" ]; then
|
|
17
|
+
* echo "... failure!"
|
|
18
|
+
* return 1
|
|
19
|
+
* else
|
|
20
|
+
* echo "... done."
|
|
21
|
+
* fi
|
|
22
|
+
* fi
|
|
23
|
+
* echo "Setting Node v18 and installing..."
|
|
24
|
+
* export NVM_DIR=$HOME/.nvm;
|
|
25
|
+
* source $NVM_DIR/nvm.sh;
|
|
26
|
+
* eval "nvm use 18 && npm i"
|
|
27
|
+
* if [ -e "$PWD/node_modules" ]; then
|
|
28
|
+
* echo "... done."
|
|
29
|
+
* else
|
|
30
|
+
* echo "... failure!"
|
|
31
|
+
* return 1
|
|
32
|
+
* fi
|
|
33
|
+
* }
|
|
34
|
+
*
|
|
35
|
+
* This script provides a clean reinstall of npm dependencies by:
|
|
36
|
+
* 1. Verifying the current directory contains a package.json
|
|
37
|
+
* 2. Removing the existing node_modules folder if present
|
|
38
|
+
* 3. Running npm install to reinstall all dependencies
|
|
39
|
+
*
|
|
40
|
+
* Note: The original script used nvm to set Node v18, but since this script
|
|
41
|
+
* runs in Node.js 22+, we skip the nvm step and use the current Node version.
|
|
42
|
+
* If you need a specific Node version, use nvm manually before running this.
|
|
43
|
+
*
|
|
5
44
|
* @module scripts/npmi
|
|
6
45
|
*/
|
|
7
46
|
|
|
47
|
+
const os = require('../utils/common/os');
|
|
48
|
+
const fs = require('fs');
|
|
49
|
+
const path = require('path');
|
|
50
|
+
const { execSync, spawnSync } = require('child_process');
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Recursively removes a directory and all its contents.
|
|
54
|
+
* This is a pure Node.js implementation that works on all platforms.
|
|
55
|
+
*
|
|
56
|
+
* We use fs.rmSync with recursive option (available in Node.js 14.14+).
|
|
57
|
+
* This is more reliable than shelling out to 'rm -rf' because:
|
|
58
|
+
* - Works identically on all platforms (macOS, Linux, Windows)
|
|
59
|
+
* - Handles permission issues with better error messages
|
|
60
|
+
* - No shell injection vulnerabilities
|
|
61
|
+
*
|
|
62
|
+
* @param {string} dirPath - Absolute path to the directory to remove
|
|
63
|
+
* @returns {boolean} True if removal succeeded or directory didn't exist
|
|
64
|
+
*/
|
|
65
|
+
function removeDirectory(dirPath) {
|
|
66
|
+
try {
|
|
67
|
+
if (!fs.existsSync(dirPath)) {
|
|
68
|
+
// Directory doesn't exist, nothing to remove
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Use recursive removal - works on all platforms
|
|
73
|
+
fs.rmSync(dirPath, { recursive: true, force: true });
|
|
74
|
+
|
|
75
|
+
// Verify removal succeeded
|
|
76
|
+
return !fs.existsSync(dirPath);
|
|
77
|
+
} catch (error) {
|
|
78
|
+
console.error(`Error removing directory: ${error.message}`);
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Detects the package manager to use based on lock files in the project.
|
|
85
|
+
* This allows the script to work with npm, yarn, or pnpm projects.
|
|
86
|
+
*
|
|
87
|
+
* Detection order (first found wins):
|
|
88
|
+
* 1. pnpm-lock.yaml -> pnpm
|
|
89
|
+
* 2. yarn.lock -> yarn
|
|
90
|
+
* 3. package-lock.json or none -> npm (default)
|
|
91
|
+
*
|
|
92
|
+
* @param {string} projectDir - Path to the project directory
|
|
93
|
+
* @returns {string} The package manager command to use ('npm', 'yarn', or 'pnpm')
|
|
94
|
+
*/
|
|
95
|
+
function detectPackageManager(projectDir) {
|
|
96
|
+
// Check for pnpm
|
|
97
|
+
if (fs.existsSync(path.join(projectDir, 'pnpm-lock.yaml'))) {
|
|
98
|
+
return 'pnpm';
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Check for yarn
|
|
102
|
+
if (fs.existsSync(path.join(projectDir, 'yarn.lock'))) {
|
|
103
|
+
return 'yarn';
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Default to npm (includes package-lock.json or no lock file)
|
|
107
|
+
return 'npm';
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Checks if a command is available in the system PATH.
|
|
112
|
+
*
|
|
113
|
+
* @param {string} cmd - The command to check
|
|
114
|
+
* @returns {boolean} True if the command exists
|
|
115
|
+
*/
|
|
116
|
+
function isCommandAvailable(cmd) {
|
|
117
|
+
try {
|
|
118
|
+
const checkCmd = process.platform === 'win32' ? `where ${cmd}` : `which ${cmd}`;
|
|
119
|
+
execSync(checkCmd, { stdio: 'ignore' });
|
|
120
|
+
return true;
|
|
121
|
+
} catch {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Pure Node.js implementation that works on any platform.
|
|
128
|
+
*
|
|
129
|
+
* This function handles the core logic of npmi:
|
|
130
|
+
* 1. Validate that package.json exists
|
|
131
|
+
* 2. Remove node_modules if it exists
|
|
132
|
+
* 3. Run the appropriate package manager install command
|
|
133
|
+
* 4. Verify that node_modules was created
|
|
134
|
+
*
|
|
135
|
+
* All file operations use Node.js native APIs (fs module).
|
|
136
|
+
* Only the package manager execution requires spawning a child process,
|
|
137
|
+
* which is unavoidable since we need to run npm/yarn/pnpm.
|
|
138
|
+
*
|
|
139
|
+
* @param {string[]} args - Command line arguments (unused)
|
|
140
|
+
* @returns {Promise<void>}
|
|
141
|
+
*/
|
|
142
|
+
async function do_npmi_nodejs(args) {
|
|
143
|
+
const cwd = process.cwd();
|
|
144
|
+
const packageJsonPath = path.join(cwd, 'package.json');
|
|
145
|
+
const nodeModulesPath = path.join(cwd, 'node_modules');
|
|
146
|
+
|
|
147
|
+
// Step 1: Check if package.json exists
|
|
148
|
+
if (!fs.existsSync(packageJsonPath)) {
|
|
149
|
+
console.error('Not an NPM package folder.');
|
|
150
|
+
console.error('No package.json found in the current directory.');
|
|
151
|
+
process.exit(1);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Step 2: Remove node_modules if it exists
|
|
155
|
+
if (fs.existsSync(nodeModulesPath)) {
|
|
156
|
+
console.log('Removing old node_modules folder...');
|
|
157
|
+
|
|
158
|
+
const removed = removeDirectory(nodeModulesPath);
|
|
159
|
+
if (!removed) {
|
|
160
|
+
console.error('... failure!');
|
|
161
|
+
console.error('Could not remove node_modules folder.');
|
|
162
|
+
console.error('');
|
|
163
|
+
console.error('Try closing any editors or processes that may have files open,');
|
|
164
|
+
console.error('then run the command again.');
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
console.log('... done.');
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Step 3: Detect package manager and install dependencies
|
|
171
|
+
const packageManager = detectPackageManager(cwd);
|
|
172
|
+
|
|
173
|
+
// Verify the package manager is available
|
|
174
|
+
if (!isCommandAvailable(packageManager)) {
|
|
175
|
+
console.error(`Error: ${packageManager} is not installed or not in PATH.`);
|
|
176
|
+
console.error('');
|
|
177
|
+
if (packageManager === 'pnpm') {
|
|
178
|
+
console.error('Install pnpm with: npm install -g pnpm');
|
|
179
|
+
} else if (packageManager === 'yarn') {
|
|
180
|
+
console.error('Install yarn with: npm install -g yarn');
|
|
181
|
+
} else {
|
|
182
|
+
console.error('npm should be installed with Node.js. Check your Node installation.');
|
|
183
|
+
}
|
|
184
|
+
process.exit(1);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
console.log(`Installing dependencies with ${packageManager}...`);
|
|
188
|
+
|
|
189
|
+
// Run the install command
|
|
190
|
+
// We use spawnSync with stdio: 'inherit' to show real-time output
|
|
191
|
+
const installResult = spawnSync(packageManager, ['install'], {
|
|
192
|
+
cwd: cwd,
|
|
193
|
+
stdio: 'inherit',
|
|
194
|
+
shell: true // Required for Windows to find npm/yarn/pnpm
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
if (installResult.error) {
|
|
198
|
+
console.error(`... failure!`);
|
|
199
|
+
console.error(`Error running ${packageManager} install: ${installResult.error.message}`);
|
|
200
|
+
process.exit(1);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
if (installResult.status !== 0) {
|
|
204
|
+
console.error(`... failure!`);
|
|
205
|
+
console.error(`${packageManager} install exited with code ${installResult.status}`);
|
|
206
|
+
process.exit(1);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// Step 4: Verify node_modules was created
|
|
210
|
+
if (fs.existsSync(nodeModulesPath)) {
|
|
211
|
+
console.log('... done.');
|
|
212
|
+
} else {
|
|
213
|
+
// This can happen if there are no dependencies in package.json
|
|
214
|
+
// which is valid, so we just note it rather than failing
|
|
215
|
+
console.log('... done (note: no node_modules created, package.json may have no dependencies).');
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Remove node_modules and reinstall dependencies on macOS.
|
|
221
|
+
*
|
|
222
|
+
* macOS uses the same Node.js implementation as all other platforms.
|
|
223
|
+
* File operations and npm/yarn/pnpm work identically.
|
|
224
|
+
*
|
|
225
|
+
* @param {string[]} args - Command line arguments (unused)
|
|
226
|
+
* @returns {Promise<void>}
|
|
227
|
+
*/
|
|
228
|
+
async function do_npmi_macos(args) {
|
|
229
|
+
return do_npmi_nodejs(args);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Remove node_modules and reinstall dependencies on Ubuntu.
|
|
234
|
+
*
|
|
235
|
+
* Ubuntu uses the same Node.js implementation as all other platforms.
|
|
236
|
+
* File operations and npm/yarn/pnpm work identically.
|
|
237
|
+
*
|
|
238
|
+
* @param {string[]} args - Command line arguments (unused)
|
|
239
|
+
* @returns {Promise<void>}
|
|
240
|
+
*/
|
|
241
|
+
async function do_npmi_ubuntu(args) {
|
|
242
|
+
return do_npmi_nodejs(args);
|
|
243
|
+
}
|
|
244
|
+
|
|
8
245
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
246
|
+
* Remove node_modules and reinstall dependencies on Raspberry Pi OS.
|
|
247
|
+
*
|
|
248
|
+
* Raspberry Pi OS uses the same Node.js implementation as all other platforms.
|
|
249
|
+
* File operations and npm/yarn/pnpm work identically.
|
|
11
250
|
*
|
|
12
251
|
* @param {string[]} args - Command line arguments (unused)
|
|
13
252
|
* @returns {Promise<void>}
|
|
14
253
|
*/
|
|
15
|
-
async function
|
|
16
|
-
|
|
254
|
+
async function do_npmi_raspbian(args) {
|
|
255
|
+
return do_npmi_nodejs(args);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Remove node_modules and reinstall dependencies on Amazon Linux.
|
|
260
|
+
*
|
|
261
|
+
* Amazon Linux uses the same Node.js implementation as all other platforms.
|
|
262
|
+
* File operations and npm/yarn/pnpm work identically.
|
|
263
|
+
*
|
|
264
|
+
* @param {string[]} args - Command line arguments (unused)
|
|
265
|
+
* @returns {Promise<void>}
|
|
266
|
+
*/
|
|
267
|
+
async function do_npmi_amazon_linux(args) {
|
|
268
|
+
return do_npmi_nodejs(args);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Remove node_modules and reinstall dependencies on Windows (CMD).
|
|
273
|
+
*
|
|
274
|
+
* Windows CMD uses the same Node.js implementation as all other platforms.
|
|
275
|
+
* The fs.rmSync function handles Windows-specific path separators and
|
|
276
|
+
* file locking issues automatically.
|
|
277
|
+
*
|
|
278
|
+
* @param {string[]} args - Command line arguments (unused)
|
|
279
|
+
* @returns {Promise<void>}
|
|
280
|
+
*/
|
|
281
|
+
async function do_npmi_cmd(args) {
|
|
282
|
+
return do_npmi_nodejs(args);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Remove node_modules and reinstall dependencies on Windows (PowerShell).
|
|
287
|
+
*
|
|
288
|
+
* Windows PowerShell uses the same Node.js implementation as all other platforms.
|
|
289
|
+
* The fs.rmSync function handles Windows-specific path separators and
|
|
290
|
+
* file locking issues automatically.
|
|
291
|
+
*
|
|
292
|
+
* @param {string[]} args - Command line arguments (unused)
|
|
293
|
+
* @returns {Promise<void>}
|
|
294
|
+
*/
|
|
295
|
+
async function do_npmi_powershell(args) {
|
|
296
|
+
return do_npmi_nodejs(args);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Remove node_modules and reinstall dependencies on Windows (Git Bash).
|
|
301
|
+
*
|
|
302
|
+
* Git Bash uses the same Node.js implementation as all other platforms.
|
|
303
|
+
* The fs.rmSync function handles Windows-specific path separators and
|
|
304
|
+
* file locking issues automatically.
|
|
305
|
+
*
|
|
306
|
+
* @param {string[]} args - Command line arguments (unused)
|
|
307
|
+
* @returns {Promise<void>}
|
|
308
|
+
*/
|
|
309
|
+
async function do_npmi_gitbash(args) {
|
|
310
|
+
return do_npmi_nodejs(args);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* Main entry point - detects environment and executes appropriate implementation.
|
|
315
|
+
*
|
|
316
|
+
* The "npmi" command provides a clean reinstall of npm dependencies:
|
|
317
|
+
* 1. Verifies the current directory is a Node.js project (has package.json)
|
|
318
|
+
* 2. Removes the node_modules folder if it exists
|
|
319
|
+
* 3. Detects the package manager (npm, yarn, or pnpm) from lock files
|
|
320
|
+
* 4. Runs the install command
|
|
321
|
+
* 5. Verifies dependencies were installed
|
|
322
|
+
*
|
|
323
|
+
* This is useful when:
|
|
324
|
+
* - You want to ensure a fresh install of all dependencies
|
|
325
|
+
* - You're experiencing issues with corrupted or outdated packages
|
|
326
|
+
* - You've made significant changes to package.json
|
|
327
|
+
* - You want to verify the project installs correctly from scratch
|
|
328
|
+
*
|
|
329
|
+
* @param {string[]} args - Command line arguments (unused)
|
|
330
|
+
* @returns {Promise<void>}
|
|
331
|
+
*/
|
|
332
|
+
async function do_npmi(args) {
|
|
333
|
+
const platform = os.detect();
|
|
334
|
+
|
|
335
|
+
const handlers = {
|
|
336
|
+
'macos': do_npmi_macos,
|
|
337
|
+
'ubuntu': do_npmi_ubuntu,
|
|
338
|
+
'debian': do_npmi_ubuntu,
|
|
339
|
+
'raspbian': do_npmi_raspbian,
|
|
340
|
+
'amazon_linux': do_npmi_amazon_linux,
|
|
341
|
+
'rhel': do_npmi_amazon_linux,
|
|
342
|
+
'fedora': do_npmi_ubuntu,
|
|
343
|
+
'linux': do_npmi_ubuntu,
|
|
344
|
+
'wsl': do_npmi_ubuntu,
|
|
345
|
+
'cmd': do_npmi_cmd,
|
|
346
|
+
'windows': do_npmi_cmd,
|
|
347
|
+
'powershell': do_npmi_powershell,
|
|
348
|
+
'gitbash': do_npmi_gitbash
|
|
349
|
+
};
|
|
350
|
+
|
|
351
|
+
const handler = handlers[platform.type];
|
|
352
|
+
if (!handler) {
|
|
353
|
+
console.error(`Platform '${platform.type}' is not supported for this command.`);
|
|
354
|
+
console.error('');
|
|
355
|
+
console.error('Supported platforms:');
|
|
356
|
+
console.error(' - macOS');
|
|
357
|
+
console.error(' - Ubuntu, Debian, and other Linux distributions');
|
|
358
|
+
console.error(' - Raspberry Pi OS');
|
|
359
|
+
console.error(' - Amazon Linux, RHEL, Fedora');
|
|
360
|
+
console.error(' - Windows (CMD, PowerShell, Git Bash)');
|
|
361
|
+
process.exit(1);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
await handler(args);
|
|
17
365
|
}
|
|
18
366
|
|
|
19
|
-
module.exports = {
|
|
367
|
+
module.exports = {
|
|
368
|
+
main: do_npmi,
|
|
369
|
+
do_npmi,
|
|
370
|
+
do_npmi_nodejs,
|
|
371
|
+
do_npmi_macos,
|
|
372
|
+
do_npmi_ubuntu,
|
|
373
|
+
do_npmi_raspbian,
|
|
374
|
+
do_npmi_amazon_linux,
|
|
375
|
+
do_npmi_cmd,
|
|
376
|
+
do_npmi_powershell,
|
|
377
|
+
do_npmi_gitbash
|
|
378
|
+
};
|
|
20
379
|
|
|
21
380
|
if (require.main === module) {
|
|
22
|
-
|
|
381
|
+
do_npmi(process.argv.slice(2));
|
|
23
382
|
}
|