Custom paths for package managers like Nuget/npm/bower/typings

Alexander Efimov picture Alexander Efimov · Apr 6, 2016 · Viewed 10.7k times · Source

I'm setting up a project in Visual Studio based on AngularJS and Typescript and it's a bit discouraging that I have to deal with yet another package manager as soon as I need to install dependencies.

The issue I have is that package managers require files containing dependencies to be located in a particular place.

Let's take npm for example. I place packages.json at ./SolutionDirectory/MyApp.Web/ But when I run npm install, I just get ENOENT: No such file or directory. because cwd is ./SolutionDirectory

It works fine if I'm doing cd ./SolutionDirectory/MyApp.Web and run npm install after that.

For bower I was able to handle similar issue by just passing additional arguments like:

bower install --config.cwd=./SolutionDirectory/MyApp.Web/app/lib --config.directory=vendor

This command just gets bower.json from ./SolutionDirectory/MyApp.Web/app/lib and installs packages to ./SolutionDirectory/MyApp.Web/app/lib/vendor

  1. Is there a way to have same thing to pass packages.json location to npm before it installs?

  2. Is there a way to pass typings.json location to typings before it installs? to pass target directory location for typings installed?

  3. Is the same doable for Nuget?

Answer

Daijirō Wachi picture Daijirō Wachi · Apr 19, 2016
  1. Is there a way to have same thing to pass packages.json location to npm before it installs?

No, there isn't. Currently there is no way to overwrite cwd value in npm. You should move directory and run it:

`$ cd SolutionDirectory/MyApp.Web/ && npm install`

Here is the similar discussion to this: https://github.com/npm/npm/pull/10958

  1. Is there a way to pass typings.json location to typings before it installs? to pass target directory location for typings installed?

Technically yes, but I guess you'd like to just do typings install with typings.json. How about to put typings.json to the same path with package.json and use npm lifecycle script?

$ ls
package.json typings.json
$ cat package.json
{
  "name": "name",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "postinstall": "typings install"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "typings": "^0.7.12"
  }
}
$ npm install
=> after npm install, typings install will start with typings.json
  1. Is the same doable for Nuget?

Nuget is also package manager, so it should has similar features, like nuget mirror command can be npm config set registry and nuget locales can be npm cache I guess. Technically it's a different software, but I think understanding about both softwares is good way to know the concept and summary of each others.