'How do I install a package with npm with a different/custom module name
I want to install a specific revision from a github tarball named something like "mymodule" and name it something like "mymoduleTemp", and then load a potentially different version of it that will take the real name "mymodule".
So, how do I do the first thing? I'm looking for something like:
npm install https://github.com/me/mymodule/tarball/someTag -name mymoduleTemp
Is there any way to do that? A nice-to-have:
- If mymodule already exists, it doesn't get clobbered when mymoduleTemp is installed (ie ideally the process wouldn't be to install as mymodule then rename the folder)
Solution 1:[1]
there was an issue filed on the npm-github repository requesting that feature.
read on here: https://github.com/npm/npm/issues/2943
Solution 2:[2]
Since [email protected]
you could install package under a custom module name. [email protected]
introduces support for package aliases.
To install a tarball under custom module name use custom-name@tarball-url
argument, e.g. install specific express
tarball as my-express
module:
npm i my-express@https://github.com/expressjs/express/archive/4.16.3.tar.gz
This feature also allows to alias packages published to npm registry:
npm i express@npm:@my-scope/express
Solution 3:[3]
In newer versions of npm (6+), its now possible to alias the module name with
npm i <alias_name>@npm:<original_package_name>
Solution 4:[4]
You could do this:
- Get the tarball and extract it
- Change the
name
in itspackage.json
to@me/mymoduleTemp
(you could skip steps 1 and 3 by editing the tarball in place withvim mymoduleTemp.tgz
) - Compress it to
mymoduleTemp.tgz
- Run
npm publish mymoduleTemp.tgz
(with--access public
unless you want it to be restricted) - In your main project, run
npm install @me/mymoduleTemp
I'd recommend publishing it as a scoped package, because if you publish it as unscoped mymoduleTemp
, then no one else can use that name.
If you think even publishing scoped packages is polluting the npm registry, then you can just put the new tarball on your own private server (or in GitHub, or wherever) and install it via URL.
Solution 5:[5]
Specfically for browser you can add an alias in package.json
https://github.com/defunctzombie/package-browser-field-spec
eg:
{
....
"browser": {
"someTag": "mymoduleTemp"
}
}
This also works for "react-native" with metro bundler. I've never tested with webpack bundles.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Omar Alshaker |
Solution 2 | |
Solution 3 | |
Solution 4 | |
Solution 5 | bucabay |