How to install NPM package under alias or different name
Asked Answered
E

2

82

How can I npm install a package into a different directory?

Enhance answered 14/5, 2019 at 16:30 Comment(0)
E
166

Say you want to install Case package, you can have a specific version under an alias:

npm i case-1.5.3@npm:[email protected]

or just give it a different name

npm i kool@npm:case

If you want to edit package.json directly:

"dependencies": {
  "case-1.5.3": "npm:case@^1.5.3",
  "kool": "npm:case@^1.6.1"
}

require():

let Case = require( 'case-1.5.3' );
let Kool = require( 'kool' );

Yarn used to have this functionality for a long time, and npm finally got it since v6.9.0, Mar 2019.

If you want to update your npm:

sudo npm i -g npm@latest
Enhance answered 14/5, 2019 at 16:30 Comment(6)
How do you then get specific dependencies to use a package alias? I'm trying to upgrade from material UI 0.x to 4.x in an existing app. I need React 16.3 for 0.x and 16.8 for 4.xElectromotor
Is it possible to install a package that has multiple names?Luis
Thank you so much for including the syntax for the package.json - every other answer I came across neglects this.Charmeuse
This is brilliant! We used that to force a browserified version of dependencies of react-pdf/renderer package, in context where we cannot do it using Webpack aliasesAblaut
This is a cool approach, but one drawback I noticed is that sometimes after running npm install the package version gets updated in package-lock.json. Is there a way to avoid that?Jarietta
@Jarietta Specify 1.5.3 not ^1.5.3. More on semver: https://mcmap.net/q/36066/-what-39-s-the-difference-between-tilde-and-caret-in-package-json docs.npmjs.com/cli/v8/configuring-npm/package-json#dependenciesEnhance
B
5

with PNPM
if want to use two different versions of a package in your project. It is possible with following commands

pnpm add <any-alias-name>@npm:package-name

for example 

pnpm add new-lodash@npm:lodash@2
pnpm add old-lodash@npm:lodash@1

Now we can use both lodash in our project

const newLodash = require('new-lodash');
const oldLodash = require('old-lodash');

Note that it worked only for require and not for ESM import statement i.e.

import oldLodash from 'old-lodash' // will throw error
Brion answered 5/8, 2020 at 4:22 Comment(1)
> Note that it worked only for require and not for ESM import statement… Any update on this 3 years on? I'm trying to import an alias in an ESM project, and TypeScript says it's ‘not a module.’Marlo

© 2022 - 2024 — McMap. All rights reserved.