@unlimitechcloud/devlink 1.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/AGENTS.md +880 -0
- package/LICENSE +21 -0
- package/README.md +335 -0
- package/dist/__tests__/e2e.spec.d.ts +8 -0
- package/dist/__tests__/e2e.spec.d.ts.map +1 -0
- package/dist/__tests__/e2e.spec.js +253 -0
- package/dist/__tests__/e2e.spec.js.map +1 -0
- package/dist/__tests__/integration.spec.d.ts +8 -0
- package/dist/__tests__/integration.spec.d.ts.map +1 -0
- package/dist/__tests__/integration.spec.js +274 -0
- package/dist/__tests__/integration.spec.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +610 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/consumers.d.ts +37 -0
- package/dist/commands/consumers.d.ts.map +1 -0
- package/dist/commands/consumers.js +107 -0
- package/dist/commands/consumers.js.map +1 -0
- package/dist/commands/docs.d.ts +59 -0
- package/dist/commands/docs.d.ts.map +1 -0
- package/dist/commands/docs.js +262 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/docs.spec.d.ts +5 -0
- package/dist/commands/docs.spec.d.ts.map +1 -0
- package/dist/commands/docs.spec.js +213 -0
- package/dist/commands/docs.spec.js.map +1 -0
- package/dist/commands/index.d.ts +13 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +13 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/install.d.ts +31 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +234 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list.d.ts +22 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +45 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/list.spec.d.ts +5 -0
- package/dist/commands/list.spec.d.ts.map +1 -0
- package/dist/commands/list.spec.js +95 -0
- package/dist/commands/list.spec.js.map +1 -0
- package/dist/commands/prune.d.ts +27 -0
- package/dist/commands/prune.d.ts.map +1 -0
- package/dist/commands/prune.js +74 -0
- package/dist/commands/prune.js.map +1 -0
- package/dist/commands/publish.d.ts +16 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +225 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/publish.spec.d.ts +5 -0
- package/dist/commands/publish.spec.d.ts.map +1 -0
- package/dist/commands/publish.spec.js +98 -0
- package/dist/commands/publish.spec.js.map +1 -0
- package/dist/commands/push.d.ts +16 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +164 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/remove.d.ts +24 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +80 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/remove.spec.d.ts +5 -0
- package/dist/commands/remove.spec.d.ts.map +1 -0
- package/dist/commands/remove.spec.js +87 -0
- package/dist/commands/remove.spec.js.map +1 -0
- package/dist/commands/resolve.d.ts +20 -0
- package/dist/commands/resolve.d.ts.map +1 -0
- package/dist/commands/resolve.js +52 -0
- package/dist/commands/resolve.js.map +1 -0
- package/dist/commands/resolve.spec.d.ts +5 -0
- package/dist/commands/resolve.spec.d.ts.map +1 -0
- package/dist/commands/resolve.spec.js +87 -0
- package/dist/commands/resolve.spec.js.map +1 -0
- package/dist/commands/verify.d.ts +32 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +127 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/config.d.ts +22 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +70 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +65 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +116 -0
- package/dist/constants.js.map +1 -0
- package/dist/constants.spec.d.ts +5 -0
- package/dist/constants.spec.d.ts.map +1 -0
- package/dist/constants.spec.js +72 -0
- package/dist/constants.spec.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/installations.d.ts +79 -0
- package/dist/core/installations.d.ts.map +1 -0
- package/dist/core/installations.js +207 -0
- package/dist/core/installations.js.map +1 -0
- package/dist/core/installations.spec.d.ts +5 -0
- package/dist/core/installations.spec.d.ts.map +1 -0
- package/dist/core/installations.spec.js +261 -0
- package/dist/core/installations.spec.js.map +1 -0
- package/dist/core/lock.d.ts +37 -0
- package/dist/core/lock.d.ts.map +1 -0
- package/dist/core/lock.js +198 -0
- package/dist/core/lock.js.map +1 -0
- package/dist/core/lock.spec.d.ts +5 -0
- package/dist/core/lock.spec.d.ts.map +1 -0
- package/dist/core/lock.spec.js +161 -0
- package/dist/core/lock.spec.js.map +1 -0
- package/dist/core/registry.d.ts +80 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +231 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/registry.spec.d.ts +5 -0
- package/dist/core/registry.spec.d.ts.map +1 -0
- package/dist/core/registry.spec.js +281 -0
- package/dist/core/registry.spec.js.map +1 -0
- package/dist/core/resolver.d.ts +55 -0
- package/dist/core/resolver.d.ts.map +1 -0
- package/dist/core/resolver.js +127 -0
- package/dist/core/resolver.js.map +1 -0
- package/dist/core/resolver.spec.d.ts +5 -0
- package/dist/core/resolver.spec.d.ts.map +1 -0
- package/dist/core/resolver.spec.js +202 -0
- package/dist/core/resolver.spec.js.map +1 -0
- package/dist/core/store.d.ts +65 -0
- package/dist/core/store.d.ts.map +1 -0
- package/dist/core/store.js +245 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/store.spec.d.ts +5 -0
- package/dist/core/store.spec.d.ts.map +1 -0
- package/dist/core/store.spec.js +195 -0
- package/dist/core/store.spec.js.map +1 -0
- package/dist/formatters/flat.d.ts +41 -0
- package/dist/formatters/flat.d.ts.map +1 -0
- package/dist/formatters/flat.js +131 -0
- package/dist/formatters/flat.js.map +1 -0
- package/dist/formatters/flat.spec.d.ts +5 -0
- package/dist/formatters/flat.spec.d.ts.map +1 -0
- package/dist/formatters/flat.spec.js +130 -0
- package/dist/formatters/flat.spec.js.map +1 -0
- package/dist/formatters/index.d.ts +6 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +6 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/formatters/tree.d.ts +29 -0
- package/dist/formatters/tree.d.ts.map +1 -0
- package/dist/formatters/tree.js +256 -0
- package/dist/formatters/tree.js.map +1 -0
- package/dist/formatters/tree.spec.d.ts +5 -0
- package/dist/formatters/tree.spec.d.ts.map +1 -0
- package/dist/formatters/tree.spec.js +127 -0
- package/dist/formatters/tree.spec.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/installer.d.ts +13 -0
- package/dist/installer.d.ts.map +1 -0
- package/dist/installer.js +171 -0
- package/dist/installer.js.map +1 -0
- package/dist/store.d.ts +78 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +344 -0
- package/dist/store.js.map +1 -0
- package/dist/types.d.ts +235 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/docs/README.md +68 -0
- package/docs/inspection/consumers.md +178 -0
- package/docs/inspection/list.md +182 -0
- package/docs/inspection/resolve.md +172 -0
- package/docs/installation/configuration.md +238 -0
- package/docs/installation/install.md +184 -0
- package/docs/maintenance/prune.md +159 -0
- package/docs/maintenance/remove.md +174 -0
- package/docs/maintenance/verify.md +174 -0
- package/docs/publishing/publish.md +146 -0
- package/docs/publishing/push.md +146 -0
- package/docs/store/locking.md +118 -0
- package/docs/store/namespaces.md +141 -0
- package/docs/store/structure.md +163 -0
- package/package.json +58 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# Resolve Command
|
|
2
|
+
|
|
3
|
+
Debug package resolution by showing where packages would be found.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
devlink resolve <pkg@version> [...] [options]
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Arguments
|
|
12
|
+
|
|
13
|
+
| Argument | Description |
|
|
14
|
+
|----------|-------------|
|
|
15
|
+
| `<pkg@version>` | Package spec(s) to resolve |
|
|
16
|
+
|
|
17
|
+
## Options
|
|
18
|
+
|
|
19
|
+
| Option | Description |
|
|
20
|
+
|--------|-------------|
|
|
21
|
+
| `-n, --namespaces <list>` | Namespace precedence (comma-separated) |
|
|
22
|
+
| `--flat` | Use flat output format |
|
|
23
|
+
| `--repo <path>` | Use custom repo path |
|
|
24
|
+
|
|
25
|
+
## Description
|
|
26
|
+
|
|
27
|
+
The `resolve` command shows:
|
|
28
|
+
|
|
29
|
+
- Which namespace a package would be resolved from
|
|
30
|
+
- The full path to the package
|
|
31
|
+
- The package signature
|
|
32
|
+
- Which namespaces were searched
|
|
33
|
+
|
|
34
|
+
This is useful for debugging resolution issues before running `install`.
|
|
35
|
+
|
|
36
|
+
## Examples
|
|
37
|
+
|
|
38
|
+
### Resolve Single Package
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
devlink resolve @scope/core@1.0.0
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Output:
|
|
45
|
+
```
|
|
46
|
+
Resolving with precedence: global
|
|
47
|
+
|
|
48
|
+
@scope/core@1.0.0
|
|
49
|
+
✓ Found in: global
|
|
50
|
+
Path: ~/.devlink/namespaces/global/@scope/core/1.0.0
|
|
51
|
+
Signature: 6761ca1fefdde1b6e9ea372e7d6931e4
|
|
52
|
+
|
|
53
|
+
Summary: 1/1 resolved
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Resolve with Namespace Precedence
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
devlink resolve @scope/core@1.0.0 -n feature-v2,global
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Output:
|
|
63
|
+
```
|
|
64
|
+
Resolving with precedence: feature-v2 → global
|
|
65
|
+
|
|
66
|
+
@scope/core@1.0.0
|
|
67
|
+
✓ Found in: feature-v2
|
|
68
|
+
Path: ~/.devlink/namespaces/feature-v2/@scope/core/1.0.0
|
|
69
|
+
Signature: different123456
|
|
70
|
+
|
|
71
|
+
Summary: 1/1 resolved
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Resolve Multiple Packages
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
devlink resolve @scope/core@1.0.0 @scope/utils@2.0.0 -n feature-v2,global
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Output:
|
|
81
|
+
```
|
|
82
|
+
Resolving with precedence: feature-v2 → global
|
|
83
|
+
|
|
84
|
+
@scope/core@1.0.0
|
|
85
|
+
✓ Found in: feature-v2
|
|
86
|
+
Path: ~/.devlink/namespaces/feature-v2/@scope/core/1.0.0
|
|
87
|
+
Signature: abc123
|
|
88
|
+
|
|
89
|
+
@scope/utils@2.0.0
|
|
90
|
+
⊘ Not in: feature-v2
|
|
91
|
+
✓ Found in: global
|
|
92
|
+
Path: ~/.devlink/namespaces/global/@scope/utils/2.0.0
|
|
93
|
+
Signature: def456
|
|
94
|
+
|
|
95
|
+
Summary: 2/2 resolved
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Package Not Found
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
devlink resolve @scope/missing@1.0.0 -n feature-v2,global
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Output:
|
|
105
|
+
```
|
|
106
|
+
Resolving with precedence: feature-v2 → global
|
|
107
|
+
|
|
108
|
+
@scope/missing@1.0.0
|
|
109
|
+
⊘ Not in: feature-v2
|
|
110
|
+
⊘ Not in: global
|
|
111
|
+
✗ Not found in any namespace
|
|
112
|
+
|
|
113
|
+
Summary: 0/1 resolved
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Flat Output
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
devlink resolve @scope/core@1.0.0 @scope/utils@2.0.0 --flat
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Output:
|
|
123
|
+
```
|
|
124
|
+
✓ @scope/core@1.0.0 global 6761ca1f
|
|
125
|
+
✓ @scope/utils@2.0.0 global a1b2c3d4
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Use Cases
|
|
129
|
+
|
|
130
|
+
### Debug Installation Issues
|
|
131
|
+
|
|
132
|
+
Before running `install`, verify packages can be resolved:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# Check all packages from your config
|
|
136
|
+
devlink resolve @scope/core@1.0.0 @scope/utils@1.0.0 -n feature-v2,global
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Verify Namespace Precedence
|
|
140
|
+
|
|
141
|
+
Check which namespace would be used:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
# Same package in multiple namespaces
|
|
145
|
+
devlink resolve @scope/core@1.0.0 -n feature-v2,global
|
|
146
|
+
# Shows: Found in feature-v2
|
|
147
|
+
|
|
148
|
+
devlink resolve @scope/core@1.0.0 -n global,feature-v2
|
|
149
|
+
# Shows: Found in global (different precedence)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Check Package Availability
|
|
153
|
+
|
|
154
|
+
Verify a package was published correctly:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
devlink resolve @scope/new-pkg@1.0.0
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Resolution Algorithm
|
|
161
|
+
|
|
162
|
+
1. Parse package spec (`name@version`)
|
|
163
|
+
2. For each namespace in order:
|
|
164
|
+
- Check if `namespace/name/version` exists in registry
|
|
165
|
+
- If found, return path and signature
|
|
166
|
+
3. If not found in any namespace, report as not found
|
|
167
|
+
|
|
168
|
+
## See Also
|
|
169
|
+
|
|
170
|
+
- [List Command](list.md) - See all packages in the store
|
|
171
|
+
- [Namespaces](../store/namespaces.md) - Understanding namespace precedence
|
|
172
|
+
- [Install Command](../installation/install.md) - How resolution is used during install
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# Configuration
|
|
2
|
+
|
|
3
|
+
DevLink uses a configuration file to define which packages to manage and how to resolve them.
|
|
4
|
+
|
|
5
|
+
## Config File
|
|
6
|
+
|
|
7
|
+
Create `devlink.config.mjs` in your project root:
|
|
8
|
+
|
|
9
|
+
```javascript
|
|
10
|
+
export default {
|
|
11
|
+
packages: { /* ... */ },
|
|
12
|
+
dev: () => ({ /* ... */ }),
|
|
13
|
+
prod: () => ({ /* ... */ }),
|
|
14
|
+
detectMode: (ctx) => { /* ... */ },
|
|
15
|
+
};
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Supported File Names
|
|
19
|
+
|
|
20
|
+
In order of priority:
|
|
21
|
+
1. `devlink.config.mjs`
|
|
22
|
+
2. `devlink.config.js`
|
|
23
|
+
3. `devlink.config.cjs`
|
|
24
|
+
|
|
25
|
+
## Configuration Options
|
|
26
|
+
|
|
27
|
+
### packages
|
|
28
|
+
|
|
29
|
+
Defines which packages to manage and their versions per mode.
|
|
30
|
+
|
|
31
|
+
```javascript
|
|
32
|
+
packages: {
|
|
33
|
+
"@scope/core": { dev: "1.0.0", prod: "1.0.0" },
|
|
34
|
+
"@scope/utils": { dev: "2.0.0", prod: "1.5.0" },
|
|
35
|
+
"simple-pkg": { dev: "1.0.0" }, // prod defaults to dev version
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### dev
|
|
40
|
+
|
|
41
|
+
Configuration for development mode.
|
|
42
|
+
|
|
43
|
+
```javascript
|
|
44
|
+
dev: (ctx) => ({
|
|
45
|
+
manager: "store", // Use DevLink store
|
|
46
|
+
namespaces: ["feature", "global"], // Namespace precedence
|
|
47
|
+
})
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### prod
|
|
51
|
+
|
|
52
|
+
Configuration for production mode.
|
|
53
|
+
|
|
54
|
+
```javascript
|
|
55
|
+
prod: (ctx) => ({
|
|
56
|
+
manager: "npm", // Use npm
|
|
57
|
+
args: ["--no-save"], // Additional npm arguments
|
|
58
|
+
})
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### detectMode
|
|
62
|
+
|
|
63
|
+
Function to determine which mode to use.
|
|
64
|
+
|
|
65
|
+
```javascript
|
|
66
|
+
detectMode: (ctx) => {
|
|
67
|
+
// ctx.env - Environment variables
|
|
68
|
+
// ctx.args - Command line arguments
|
|
69
|
+
// ctx.cwd - Current working directory
|
|
70
|
+
|
|
71
|
+
if (ctx.env.NODE_ENV === "development") return "dev";
|
|
72
|
+
if (ctx.env.SST_LOCAL === "true") return "dev";
|
|
73
|
+
if (ctx.args.includes("--dev")) return "dev";
|
|
74
|
+
return "prod";
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Context Object
|
|
79
|
+
|
|
80
|
+
The `ctx` object passed to functions contains:
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
interface Context {
|
|
84
|
+
env: Record<string, string>; // process.env
|
|
85
|
+
args: string[]; // Command line arguments
|
|
86
|
+
cwd: string; // Current working directory
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Manager Types
|
|
91
|
+
|
|
92
|
+
### store
|
|
93
|
+
|
|
94
|
+
Uses the DevLink store to resolve packages:
|
|
95
|
+
|
|
96
|
+
```javascript
|
|
97
|
+
{
|
|
98
|
+
manager: "store",
|
|
99
|
+
namespaces: ["feature-v2", "global"],
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### npm
|
|
104
|
+
|
|
105
|
+
Uses npm to install packages:
|
|
106
|
+
|
|
107
|
+
```javascript
|
|
108
|
+
{
|
|
109
|
+
manager: "npm",
|
|
110
|
+
args: ["--no-save", "--legacy-peer-deps"],
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Complete Example
|
|
115
|
+
|
|
116
|
+
```javascript
|
|
117
|
+
import { fileURLToPath } from "url";
|
|
118
|
+
import { dirname } from "path";
|
|
119
|
+
|
|
120
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
121
|
+
|
|
122
|
+
export default {
|
|
123
|
+
// Packages to manage
|
|
124
|
+
packages: {
|
|
125
|
+
"@myorg/core": { dev: "1.0.0", prod: "1.0.0" },
|
|
126
|
+
"@myorg/utils": { dev: "1.0.0", prod: "1.0.0" },
|
|
127
|
+
"@myorg/http": { dev: "1.0.0", prod: "1.0.0" },
|
|
128
|
+
},
|
|
129
|
+
|
|
130
|
+
// Development mode: use local store
|
|
131
|
+
dev: (ctx) => ({
|
|
132
|
+
manager: "store",
|
|
133
|
+
namespaces: getNamespaces(ctx),
|
|
134
|
+
}),
|
|
135
|
+
|
|
136
|
+
// Production mode: use npm
|
|
137
|
+
prod: (ctx) => ({
|
|
138
|
+
manager: "npm",
|
|
139
|
+
args: ["--no-save"],
|
|
140
|
+
}),
|
|
141
|
+
|
|
142
|
+
// Mode detection
|
|
143
|
+
detectMode: (ctx) => {
|
|
144
|
+
// SST local development
|
|
145
|
+
if (ctx.env.SST_LOCAL === "true") return "dev";
|
|
146
|
+
|
|
147
|
+
// Explicit flags
|
|
148
|
+
if (ctx.args.includes("--dev")) return "dev";
|
|
149
|
+
if (ctx.args.includes("--prod")) return "prod";
|
|
150
|
+
|
|
151
|
+
// Environment variable
|
|
152
|
+
if (ctx.env.NODE_ENV === "development") return "dev";
|
|
153
|
+
|
|
154
|
+
return "prod";
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
// Helper to determine namespaces based on context
|
|
159
|
+
function getNamespaces(ctx) {
|
|
160
|
+
// Use feature namespace if specified
|
|
161
|
+
if (ctx.env.DEVLINK_NAMESPACE) {
|
|
162
|
+
return [ctx.env.DEVLINK_NAMESPACE, "global"];
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Default to global only
|
|
166
|
+
return ["global"];
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Namespace Override
|
|
171
|
+
|
|
172
|
+
The `-n` flag overrides configured namespaces:
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
# Uses namespaces from config
|
|
176
|
+
devlink install
|
|
177
|
+
|
|
178
|
+
# Overrides to use feature-v2 first
|
|
179
|
+
devlink install -n feature-v2,global
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Mode Override
|
|
183
|
+
|
|
184
|
+
The `--dev` and `--prod` flags override mode detection:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
# Uses detectMode function
|
|
188
|
+
devlink install
|
|
189
|
+
|
|
190
|
+
# Forces dev mode
|
|
191
|
+
devlink install --dev
|
|
192
|
+
|
|
193
|
+
# Forces prod mode
|
|
194
|
+
devlink install --prod
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Tips
|
|
198
|
+
|
|
199
|
+
### Dynamic Namespaces
|
|
200
|
+
|
|
201
|
+
Use environment variables for flexible namespace configuration:
|
|
202
|
+
|
|
203
|
+
```javascript
|
|
204
|
+
dev: (ctx) => ({
|
|
205
|
+
manager: "store",
|
|
206
|
+
namespaces: ctx.env.FEATURE_BRANCH
|
|
207
|
+
? [ctx.env.FEATURE_BRANCH, "global"]
|
|
208
|
+
: ["global"],
|
|
209
|
+
})
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Version Pinning
|
|
213
|
+
|
|
214
|
+
Pin exact versions for reproducibility:
|
|
215
|
+
|
|
216
|
+
```javascript
|
|
217
|
+
packages: {
|
|
218
|
+
"@scope/core": { dev: "1.2.3", prod: "1.2.3" },
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Different Dev/Prod Versions
|
|
223
|
+
|
|
224
|
+
Use different versions for development and production:
|
|
225
|
+
|
|
226
|
+
```javascript
|
|
227
|
+
packages: {
|
|
228
|
+
"@scope/core": {
|
|
229
|
+
dev: "2.0.0-beta.1", // Latest beta for development
|
|
230
|
+
prod: "1.5.0", // Stable for production
|
|
231
|
+
},
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## See Also
|
|
236
|
+
|
|
237
|
+
- [Install Command](install.md) - Using the configuration
|
|
238
|
+
- [Namespaces](../store/namespaces.md) - Understanding namespace precedence
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# Install Command
|
|
2
|
+
|
|
3
|
+
Installs packages from the DevLink store into a project.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
devlink install [options]
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Options
|
|
12
|
+
|
|
13
|
+
| Option | Description |
|
|
14
|
+
|--------|-------------|
|
|
15
|
+
| `-n, --namespaces <list>` | Override namespace precedence (comma-separated) |
|
|
16
|
+
| `-c, --config <path>` | Path to config file |
|
|
17
|
+
| `--dev` | Force dev mode |
|
|
18
|
+
| `--prod` | Force prod mode |
|
|
19
|
+
| `--repo <path>` | Use custom repo path |
|
|
20
|
+
|
|
21
|
+
## Description
|
|
22
|
+
|
|
23
|
+
The `install` command:
|
|
24
|
+
|
|
25
|
+
1. Reads `devlink.config.mjs` from the project
|
|
26
|
+
2. Determines the mode (dev or prod)
|
|
27
|
+
3. Resolves packages using namespace precedence
|
|
28
|
+
4. Creates symlinks in `node_modules`
|
|
29
|
+
5. Registers the project as a consumer
|
|
30
|
+
6. Creates/updates `devlink.lock`
|
|
31
|
+
|
|
32
|
+
## Configuration File
|
|
33
|
+
|
|
34
|
+
Create `devlink.config.mjs` in your project root:
|
|
35
|
+
|
|
36
|
+
```javascript
|
|
37
|
+
export default {
|
|
38
|
+
packages: {
|
|
39
|
+
"@scope/core": { dev: "1.0.0", prod: "1.0.0" },
|
|
40
|
+
"@scope/utils": { dev: "2.0.0", prod: "1.5.0" },
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
dev: () => ({
|
|
44
|
+
manager: "store",
|
|
45
|
+
namespaces: ["feature-v2", "global"],
|
|
46
|
+
}),
|
|
47
|
+
|
|
48
|
+
prod: () => ({
|
|
49
|
+
manager: "npm",
|
|
50
|
+
args: ["--no-save"],
|
|
51
|
+
}),
|
|
52
|
+
|
|
53
|
+
detectMode: (ctx) => {
|
|
54
|
+
if (ctx.env.NODE_ENV === "development") return "dev";
|
|
55
|
+
if (ctx.args.includes("--dev")) return "dev";
|
|
56
|
+
return "prod";
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
See [Configuration](configuration.md) for full reference.
|
|
62
|
+
|
|
63
|
+
## Examples
|
|
64
|
+
|
|
65
|
+
### Basic Install
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
cd my-project
|
|
69
|
+
devlink install
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Force Dev Mode
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
devlink install --dev
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Override Namespaces
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
devlink install -n feature-v2,global
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Custom Config Path
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
devlink install -c ./config/devlink.config.mjs
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Resolution Process
|
|
91
|
+
|
|
92
|
+
For each package in the config:
|
|
93
|
+
|
|
94
|
+
1. Get version for current mode (dev/prod)
|
|
95
|
+
2. Search namespaces in order
|
|
96
|
+
3. Find first match
|
|
97
|
+
4. Create symlink to store location
|
|
98
|
+
|
|
99
|
+
Example:
|
|
100
|
+
```
|
|
101
|
+
Config: @scope/core@1.0.0
|
|
102
|
+
Namespaces: ["feature-v2", "global"]
|
|
103
|
+
|
|
104
|
+
1. Search feature-v2/@scope/core/1.0.0 → Not found
|
|
105
|
+
2. Search global/@scope/core/1.0.0 → Found!
|
|
106
|
+
3. Symlink: node_modules/@scope/core → ~/.devlink/namespaces/global/@scope/core/1.0.0
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Lock File
|
|
110
|
+
|
|
111
|
+
After installation, `devlink.lock` is created/updated:
|
|
112
|
+
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"packages": {
|
|
116
|
+
"@scope/core": {
|
|
117
|
+
"version": "1.0.0",
|
|
118
|
+
"namespace": "global",
|
|
119
|
+
"signature": "6761ca1f...",
|
|
120
|
+
"resolved": "~/.devlink/namespaces/global/@scope/core/1.0.0"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
This file:
|
|
127
|
+
- Records exact resolution for reproducibility
|
|
128
|
+
- Tracks signatures for change detection
|
|
129
|
+
- Should be committed to version control
|
|
130
|
+
|
|
131
|
+
## Consumer Registration
|
|
132
|
+
|
|
133
|
+
Installing registers your project in `installations.json`, enabling:
|
|
134
|
+
|
|
135
|
+
- `devlink push` to update your project
|
|
136
|
+
- `devlink consumers` to list your project
|
|
137
|
+
|
|
138
|
+
## Modes
|
|
139
|
+
|
|
140
|
+
### Dev Mode
|
|
141
|
+
|
|
142
|
+
Uses packages from the DevLink store:
|
|
143
|
+
|
|
144
|
+
```javascript
|
|
145
|
+
dev: () => ({
|
|
146
|
+
manager: "store",
|
|
147
|
+
namespaces: ["feature-v2", "global"],
|
|
148
|
+
})
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Prod Mode
|
|
152
|
+
|
|
153
|
+
Uses npm to install packages:
|
|
154
|
+
|
|
155
|
+
```javascript
|
|
156
|
+
prod: () => ({
|
|
157
|
+
manager: "npm",
|
|
158
|
+
args: ["--no-save"],
|
|
159
|
+
})
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Errors
|
|
163
|
+
|
|
164
|
+
### Package Not Found
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
Error: @scope/core@1.0.0 not found in namespaces: feature-v2, global
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
The package hasn't been published to any of the configured namespaces.
|
|
171
|
+
|
|
172
|
+
### Config Not Found
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
Error: devlink.config.mjs not found
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Create a configuration file in your project root.
|
|
179
|
+
|
|
180
|
+
## See Also
|
|
181
|
+
|
|
182
|
+
- [Configuration](configuration.md) - Full config file reference
|
|
183
|
+
- [Namespaces](../store/namespaces.md) - Understanding namespace precedence
|
|
184
|
+
- [Push Command](../publishing/push.md) - How push updates consumers
|