Skip to content

Commit

Permalink
feat: support peerDependenciesMeta
Browse files Browse the repository at this point in the history
closes #436
  • Loading branch information
fengmk2 committed Jan 7, 2023
1 parent b7255be commit 9a4788a
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 21 deletions.
15 changes: 10 additions & 5 deletions bin/install.js
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,7 @@ debug('argv: %j, env: %j', argv, env);
config.env.npm_rootpath = process.env.npm_rootpath || root;
config.env.INIT_CWD = process.env.INIT_CWD || root;
await installGlobal(config, context);
console.log('');
return;
}

Expand Down Expand Up @@ -521,13 +522,17 @@ debug('argv: %j, env: %j', argv, env);
utils.exitWithError('npminstall', err);
});

let _versionSavePrefix = null;
function getVersionSavePrefix() {
try {
return execSync('npm config get save-prefix').toString().trim();
} catch (err) {
debug(`exec npm config get save-prefix ERROR: ${err.message}`);
return '^';
if (_versionSavePrefix === null) {
try {
_versionSavePrefix = execSync('npm config get save-prefix').toString().trim();
} catch (err) {
debug(`exec npm config get save-prefix ERROR: ${err.message}`);
_versionSavePrefix = '^';
}
}
return _versionSavePrefix;
}

function getStrictSSL() {
Expand Down
28 changes: 12 additions & 16 deletions lib/install_package.js
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ async function _install(parentDir, pkg, ancestors, options, context) {
const nodeModulesDir = path.join(realPkgDir, 'node_modules');

const peerDependencies = realPkg.peerDependencies || {};
const peerDependenciesMeta = realPkg.peerDependenciesMeta || {};
const needLinkPeerDependencies = [];
if (Object.keys(peerDependencies).length > 0) {
const unmatched = {};
Expand All @@ -243,9 +244,9 @@ async function _install(parentDir, pkg, ancestors, options, context) {
// check in reverse
const res = await matchAncestorDependencies(childPkg, reverseAncestors, options, context);
if (res) {
pkgs.push({ name, version: res.ancestorSpec, peer: true });
pkgs.push({ name, version: res.ancestorSpec });
needLinkPeerDependencies.push({ name, version: res.ancestorSpec });
} else {
} else if (peerDependenciesMeta[name]?.optional !== true) {
unmatched[name] = version;
}
}
Expand Down Expand Up @@ -392,20 +393,15 @@ function forceFlatten(pkg) {

// link module and bin files
async function linkModule(pkg, parentDir, realPkg, realPkgDir, options) {
if (!pkg.peer) {
// fix concurrent install same bin name error
try {
await bin(parentDir, realPkg, realPkgDir, options);
} catch (err) {
if (err.code !== 'EEXIST') {
throw err;
}
// retry
await bin(parentDir, realPkg, realPkgDir, options);
// fix concurrent install same bin name error
try {
await bin(parentDir, realPkg, realPkgDir, options);
} catch (err) {
if (err.code !== 'EEXIST') {
throw err;
}
await link(parentDir, realPkg, realPkgDir, pkg.alias, options);
} else {
// peer dependencies will link after check root
options.linkPeerDependencies.push({ parentDir, realPkg, realPkgDir });
// retry
await bin(parentDir, realPkg, realPkgDir, options);
}
await link(parentDir, realPkg, realPkgDir, pkg.alias, options);
}

0 comments on commit 9a4788a

Please sign in to comment.