Say you want to install a library lib-a
which has dependencies dep-1
and dep-2
. If lib-a
has declared in its package.json to use a version of dep-2
that is out of date (say it doesn't work on node 0.8.0 which just came out), but there is a branch of dep-2
that works with node 0.8.0 - branch name node0.8.0
.
So the packages in the equation are:
git://github.com/user-a/lib-a
git://github.com/user-b/dep-1
git://github.com/user-c/dep-2
git://github.com/user-c/dep-2#node0.8.0
Is there a way to tell NPM to install lib-a
, but use dep-2#node0.8.0
instead of dep-2
?
With NPM you can install a specific branch of a project like this:
npm install git://github.com/user-c/dep-2#node0.8.0
And if I were to customize the package.json of lib-a
, you could tell it to use dep-2#node0.8.0
like this:
{
"name": "lib-a",
"dependencies": {
"dep-1": ">= 1.5.0",
"dep-2": "git://github.com/user-c/dep-2#node0.8.0"
}
}
By modifying the package.json you can then run
npm install lib-a
and it will install the node 0.8.0 compatible dep-2
branch. But, that requires I have access to modifying lib-a
, which for my specific case I don't. Technically, I could fork lib-a
and make the above change to package.json. But in my specific case, lib-a
is a dependency of another library, so I'd have to fork the project it's referenced in, and on and on...
So the question is, is there a way to tell NPM to install lib-a
, and tell it to use the node0.8.0
branch of dep-2
? Something like this:
npm install lib-a --overrides dep-2:git://github.com/user-c/dep-2#node0.8.0
That would be awesome. If it's not possible, that would be good to know so I can prepare myself to have to fork/customize the chain of projects.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…