Fixes dependencies using bins from their own dependencies (#6712)

This commit is contained in:
Maël Nison
2018-11-21 14:32:50 +00:00
committed by GitHub
parent 0d4861052f
commit 77f04c3497
4 changed files with 45 additions and 3 deletions

View File

@@ -0,0 +1,10 @@
/* @flow */
module.exports = require(`./package.json`);
for (const key of [`dependencies`, `devDependencies`, `peerDependencies`]) {
for (const dep of Object.keys(module.exports[key] || {})) {
// $FlowFixMe The whole point of this file is to be dynamic
module.exports[key][dep] = require(dep);
}
}

View File

@@ -0,0 +1,10 @@
{
"name": "one-dep-scripted",
"version": "1.0.0",
"dependencies": {
"has-bin-entries": "1.0.0"
},
"scripts": {
"install": "has-bin-entries"
}
}

View File

@@ -203,5 +203,17 @@ module.exports = (makeTemporaryEnv: PackageDriver) => {
]);
}),
);
test(
`it should allow dependencies with install scripts to run the binaries exposed by their own dependencies`,
makeTemporaryEnv(
{
dependencies: {[`one-dep-scripted`]: `1.0.0`},
},
async ({path, run, source}) => {
await run(`install`);
},
),
);
});
};

View File

@@ -203,11 +203,21 @@ export async function makeEnv(
}
}
const pnpFile = `${config.lockfileFolder}/${constants.PNP_FILENAME}`;
if (await fs.exists(pnpFile)) {
let pnpFile;
if (process.versions.pnp) {
pnpFile = dynamicRequire.resolve('pnpapi');
} else {
const candidate = `${config.lockfileFolder}/${constants.PNP_FILENAME}`;
if (await fs.exists(candidate)) {
pnpFile = candidate;
}
}
if (pnpFile) {
const pnpApi = dynamicRequire(pnpFile);
const packageLocator = pnpApi.findPackageLocator(`${config.cwd}/`);
const packageLocator = pnpApi.findPackageLocator(`${cwd}/`);
const packageInformation = pnpApi.getPackageInformation(packageLocator);
for (const [name, reference] of packageInformation.packageDependencies.entries()) {