Skip to content

Commit e29747e

Browse files
authored
fix(install): cannot install when workdir not name and version (#20)
Signed-off-by: Kevin Cui <[email protected]>
1 parent 55bebe6 commit e29747e

File tree

2 files changed

+30
-22
lines changed

2 files changed

+30
-22
lines changed

src/cmd/install.ts

+10-9
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { env } from "../utils/misc";
77
import {
88
findLatestVersion,
99
generatePackageJson,
10+
getDependencies,
1011
initPackageJson,
1112
transformNodeModules,
1213
updateDependencies,
@@ -101,7 +102,7 @@ export async function installFile(options: InstallFileOptions): Promise<InstallF
101102
// oopm install foo
102103
// oopm install [email protected]
103104
export async function installPackage(options: InstallPackageOptions): Promise<InstallPackageResult> {
104-
const libraryMeta = await generatePackageJson(options.workdir, false);
105+
const dependencies = await getDependencies(options.workdir);
105106

106107
const alreadyInstalled: Deps = [];
107108
const needInstall: Deps = [];
@@ -112,16 +113,16 @@ export async function installPackage(options: InstallPackageOptions): Promise<In
112113
let version = dep.version;
113114

114115
if (!version) {
115-
if (libraryMeta?.dependencies?.[dep.name]) {
116-
version = libraryMeta?.dependencies?.[dep.name] as string;
116+
if (dependencies?.[dep.name]) {
117+
version = dependencies?.[dep.name] as string;
117118
}
118119
else {
119120
version = await findLatestVersion(dep.name, options.registry, options.token);
120121
}
121122
}
122123

123124
const existsDisk = await exists(path.join(options.distDir, `${dep.name}-${version}`, ooPackageName));
124-
if (existsDisk && libraryMeta?.dependencies?.[dep.name] === version) {
125+
if (existsDisk && dependencies?.[dep.name] === version) {
125126
alreadyInstalled.push({
126127
name: dep.name,
127128
version,
@@ -135,11 +136,11 @@ export async function installPackage(options: InstallPackageOptions): Promise<In
135136
}
136137
});
137138

138-
Object.keys(libraryMeta?.dependencies || {}).forEach((key) => {
139+
Object.keys(dependencies).forEach((key) => {
139140
p.push((async (key) => {
140141
const dep: Dep = {
141142
name: key,
142-
version: libraryMeta.dependencies![key],
143+
version: dependencies![key],
143144
};
144145

145146
const existsDisk = await exists(path.join(options.distDir, `${dep.name}-${dep.version}`, ooPackageName));
@@ -169,16 +170,16 @@ export async function installPackage(options: InstallPackageOptions): Promise<In
169170

170171
// oopm install
171172
export async function installAll(options: InstallAllOptions): Promise<InstallAllResult> {
172-
const libraryMeta = await generatePackageJson(options.workdir, false);
173+
const dependencies = await getDependencies(options.workdir);
173174

174175
const alreadyInstalled: Deps = [];
175176
const needInstall: Deps = [];
176177

177178
{
178-
const p = Object.keys(libraryMeta?.dependencies || {}).map(async (key) => {
179+
const p = Object.keys(dependencies).map(async (key) => {
179180
const dep: Dep = {
180181
name: key,
181-
version: libraryMeta.dependencies![key],
182+
version: dependencies![key],
182183
};
183184

184185
const existsDisk = await exists(path.join(options.distDir, `${dep.name}-${dep.version}`, ooPackageName));

src/utils/npm.ts

+20-13
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@ import { ooPackageName } from "../const";
66
import { exists, readFile, writeFile } from "./fs";
77
import { nerfURL } from "./misc";
88

9+
export async function getDependencies(dir: string): Promise<Record<string, string>> {
10+
const ooPackagePath = path.join(dir, ooPackageName);
11+
if (!await exists(path.join(dir, ooPackageName))) {
12+
return {};
13+
}
14+
15+
const content = YAML.parse(await readFile(ooPackagePath)) as OOPackageSchema;
16+
return content.dependencies ?? {};
17+
}
18+
919
export async function generatePackageJson(dir: string, stringify: true): Promise<string>;
1020
export async function generatePackageJson(dir: string): Promise<string>;
1121
export async function generatePackageJson(dir: string, stringify: false): Promise<OOPackageSchema>;
@@ -37,23 +47,20 @@ export async function generatePackageJson(dir: string, stringify = true): Promis
3747
}
3848

3949
export async function updateDependencies(dir: string, deps: Deps) {
40-
const meta = await generatePackageJson(dir, false);
41-
if (!meta.dependencies) {
42-
meta.dependencies = {};
43-
}
50+
const rawContent = await readFile(path.join(dir, ooPackageName));
51+
const content = YAML.parse(rawContent) as OOPackageSchema;
4452

45-
for (const dep of deps) {
46-
meta.dependencies[dep.name] = dep.version;
53+
if (!content.dependencies) {
54+
content.dependencies = {};
4755
}
48-
49-
if ("scripts" in meta) {
50-
// eslint-disable-next-line ts/ban-ts-comment
51-
// @ts-expect-error
52-
delete meta.scripts;
56+
else {
57+
for (const dep of deps) {
58+
content.dependencies[dep.name] = dep.version;
59+
}
5360
}
5461

55-
const content = YAML.stringify(meta);
56-
await writeFile(path.join(dir, ooPackageName), content);
62+
const yamlContent = YAML.stringify(content);
63+
await writeFile(path.join(dir, ooPackageName), yamlContent);
5764
}
5865

5966
export async function findLatestVersion(name: string, registry: string, token?: string): Promise<string> {

0 commit comments

Comments
 (0)