Skip to content

Commit a1a8e90

Browse files
committed
feat: Add symlink and linkPackages functionality
The commit introduces new functionality - `symlink` and `linkPackages` - for handling node modules. The code changes include updates to the `link.js` and `symlink.js` files and are intended to improve the performance of the overall system by allowing for easier handling of dependencies. The update introduces new functions for creating symlinks and running relevant commands. The changes help make the workflow more efficient and prevent errors previously encountered during the development process.
1 parent b938ea4 commit a1a8e90

2 files changed

Lines changed: 53 additions & 103 deletions

File tree

src/commands/link.js

Lines changed: 35 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
const spawn = require('../spawn');
2+
const path = require("path")
23
const { color } = require('../fonts');
34

4-
module.exports = async function linkPackages(repos, args) {
5+
module.exports = async (repos, args) => {
56
const failed = [], isLinked = {};
67

78
try {
@@ -13,38 +14,50 @@ module.exports = async function linkPackages(repos, args) {
1314
if (process.cwd() === repo.absolutePath)
1415
continue
1516

16-
let exitCode = await spawn(repo.packageManager, ['link'], {
17-
cwd: repo.absolutePath,
18-
shell: true,
19-
stdio: 'inherit'
20-
});
17+
if (repo.packageManager === 'npm') {
18+
let dir = path.resolve(process.cwd(), 'node_modules');
19+
let dest = path.resolve(path.resolve(repo.absolutePath), 'node_modules');
20+
if (dir && dest) {
21+
if (fs.existsSync(dest))
22+
await fs.promises.rm(dest, { recursive: true, force: true });
2123

22-
if (exitCode !== 0) {
23-
failed.push({
24-
name: repo.name,
25-
des: `${repo.packageManager} link failed`
26-
})
27-
console.error(color.red + `${repo.name}: ${repo.packageManager} link failed` + color.reset)
24+
await fs.promises.symlink(dir, dest, 'dir');
25+
console.log(repo.packageManager, 'link', repo.packageName)
26+
}
2827
} else {
29-
console.log(repo.packageManager, 'link', repo.packageName)
3028

31-
let exitCode = await spawn(repo.packageManager, ['link', repo.packageName], {
32-
cwd: process.cwd(),
29+
let exitCode = await spawn(repo.packageManager, ['link'], {
30+
cwd: repo.absolutePath,
3331
shell: true,
3432
stdio: 'inherit'
35-
})
33+
});
34+
3635
if (exitCode !== 0) {
3736
failed.push({
3837
name: repo.name,
39-
des: `${repo.packageManager} link ${repo.packageName} failed`
40-
});
41-
console.error(color.red + `${repo.name}: ${repo.packageManager} link ${repo.packageName} failed` + color.reset)
38+
des: `${repo.packageManager} link failed`
39+
})
40+
console.error(color.red + `${repo.name}: ${repo.packageManager} link failed` + color.reset)
41+
} else {
42+
console.log(repo.packageManager, 'link', repo.packageName)
43+
44+
let exitCode = await spawn(repo.packageManager, ['link', repo.packageName], {
45+
cwd: process.cwd(),
46+
shell: true,
47+
stdio: 'inherit'
48+
})
49+
if (exitCode !== 0) {
50+
failed.push({
51+
name: repo.name,
52+
des: `${repo.packageManager} link ${repo.packageName} failed`
53+
});
54+
console.error(color.red + `${repo.name}: ${repo.packageManager} link ${repo.packageName} failed` + color.reset)
55+
}
4256
}
43-
}
4457

45-
// await doLink(repo.deps, repo, repos, failed, isLinked)
46-
// await doLink(repo.devDeps, repo, repos, failed, isLinked)
58+
}
4759
}
60+
4861
}
4962
catch (err) {
5063
failed.push({ name: 'GENERAL', des: err.message })
@@ -53,55 +66,3 @@ module.exports = async function linkPackages(repos, args) {
5366

5467
return failed;
5568
}
56-
57-
58-
async function doLink(deps, repo, repos, failed, isLinked) {
59-
let { packageManager } = repo;
60-
61-
for (let dep of deps) {
62-
let depMeta = repos.find(meta => meta.packageName === dep);
63-
try {
64-
65-
if (depMeta && !isLinked[depMeta.packageName]) {
66-
67-
isLinked[depMeta.packageName] = true;
68-
let exitCode = await spawn(packageManager, ['link'], {
69-
cwd: depMeta.absolutePath,
70-
shell: true,
71-
stdio: 'inherit'
72-
});
73-
74-
if (exitCode !== 0) {
75-
failed.push({
76-
name: depMeta.name,
77-
des: `${packageManager} link failed`
78-
})
79-
console.error(color.red + `${depMeta.name}: ${packageManager} link failed` + color.reset)
80-
}
81-
}
82-
83-
if (!depMeta)
84-
depMeta = { packageName: dep }
85-
console.log(repo.packageName, 'linking', depMeta.packageName, '...')
86-
87-
let exitCode = await spawn(packageManager, ['link', depMeta.packageName], {
88-
cwd: repo.absolutePath,
89-
shell: true,
90-
stdio: 'inherit'
91-
})
92-
if (exitCode !== 0) {
93-
failed.push({
94-
name: repo.name,
95-
des: `${packageManager} link ${depMeta.packageName} failed`
96-
});
97-
console.error(color.red + `${repo.name}: ${packageManager} link ${depMeta.packageName} failed` + color.reset)
98-
}
99-
100-
}
101-
catch (err) {
102-
failed.push({ name: repo.packageName, des: err.message })
103-
console.error(color.red + `${err}` + color.reset)
104-
}
105-
106-
}
107-
}

src/commands/symlink.js

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
const fs = require('fs')
22
const path = require("path")
3-
const util = require('node:util');
43
const spawn = require('../spawn');
54

65
const cwdPath = path.resolve(process.cwd());
@@ -9,7 +8,7 @@ let cwdNodeModulesPath = path.resolve(cwdPath, 'node_modules')
98

109
let reposLength, failed = [];
1110

12-
module.exports = async function symlink(repos, args) {
11+
module.exports = async function (repos, args) {
1312
reposLength = repos.length
1413

1514
for (let i = 0; i < repos.length; i++) {
@@ -25,6 +24,10 @@ module.exports = async function symlink(repos, args) {
2524
}
2625

2726
}
27+
28+
console.log('symlink complete');
29+
return failed;
30+
2831
}
2932

3033

@@ -39,8 +42,6 @@ async function createSymlink(repo) {
3942
try {
4043
let dest = path.resolve(dpath, 'node_modules');
4144
if (dest) {
42-
// let exists = await fs.promises.access(filePath, fs.constants.F_OK);
43-
4445
if (fs.existsSync(dest)) {
4546

4647
if (!cwdNodeModulesPath.includes('/CoCreateJS')) {
@@ -53,18 +54,10 @@ async function createSymlink(repo) {
5354
}
5455
}
5556
}
57+
}
5658

57-
fs.rm(dest, { recursive: true, force: true }, function (err) {
58-
if (err) {
59-
failed.push({ name: 'symlink', des: 'with response:' + response, err })
60-
console.error(repo.name, 'failed to aquire symlink', 'with response:', response, err)
59+
await symlink(repo.name, dest)
6160

62-
} else
63-
runSymlink(repo.name, dest)
64-
});
65-
} else {
66-
runSymlink(repo.name, dest)
67-
}
6861
}
6962
}
7063
catch (err) {
@@ -74,23 +67,18 @@ async function createSymlink(repo) {
7467

7568
}
7669

77-
function runSymlink(name, dest) {
78-
fs.symlink(cwdNodeModulesPath, dest, 'dir', (err) => {
79-
reposLength -= 1
80-
81-
if (err)
82-
console.log(err);
83-
else {
84-
console.log(name, "node_modules symlink added");
85-
}
86-
87-
if (!reposLength) {
88-
console.log('symlink complete')
89-
return failed
90-
}
70+
async function symlink(name, dest) {
71+
try {
72+
if (fs.existsSync(dest))
73+
await fs.promises.rm(dest, { recursive: true, force: true });
9174

92-
})
75+
await fs.promises.symlink(cwdNodeModulesPath, dest, 'dir');
76+
console.log(name, 'node_modules symlink added');
9377

78+
} catch (err) {
79+
failed.push({ name: 'symlink', des: 'with response: ' + response, err });
80+
console.error(repo.name, 'failed to acquire symlink', 'with response:', response, err);
81+
}
9482
}
9583

9684

@@ -145,3 +133,4 @@ async function getSymlinkTargetPath(symlinkPath) {
145133
}
146134
}
147135

136+
// module.exports = { symlink }

0 commit comments

Comments
 (0)