¿Hay alguna manera de instalar dependencies desde un file package.json en un directory diferente?

Me pregunto si hay una forma de que las dependencies de un file package.json entren en un directory diferente. El escenario es este:

Tengo un proyecto que estoy implementando con git y y el gancho post-receive . Cuando quiero implementar mi proyecto, lo paso al repository de git simple en mi server, que luego clona el repository en una carpeta separada (lo que hace que los files estén disponibles), ejecuta npm install para instalar las dependencies, ejecuta la compilation (en este caso grunt ), mueve el file de compilation a la carpeta que aloja el server web, sobrescribe los files más antiguos y luego procede a limpiar la carpeta clonada quitándola.

Desafortunadamente, esto también tiene el efecto secundario de eliminar la carpeta node_modules que significa que debe instalarse un nuevo set de dependencies en la próxima compilation, lo que lleva time si bash implementarlo rápidamente.

La razón detrás de mi pregunta es, en esencia, preguntarme si existe una solución más elegante que la que tengo actualmente. ¿Hay alguna manera de que pueda instalar las dependencies a un directory de dependencies en mi server y luego ejecutar todas las comstackciones desde allí? De esa manera podría mantener todos mis modules en un solo lugar y hacer que otras comstackciones que ejecuto en mi server también usen esos packages, al time que agregue las dependencies adicionales que requieran.

Mi investigación hasta ahora no ha sido exitosa, intenté correr

 npm install /some_folder --prefix /other_folder 

pero eso tuvo el efecto adverso de crear una estructura de directorys que se veía así:

 / ├── some_folder | ├── <various files> | └── package.json └── other_folder └── node_modules/ └── some_folder/ ├── <various files from first folder> ├── package.json └── node_modules/ 

que realmente no funcionaría para tener un directory central de dependencies.

También encontré 1 pregunta que habla sobre el uso de enlaces simbólicos. ¿Cómo funcionaría eso?

Lo que parece que realmente quiere es tener un caching de packages local en su server de compilation. NPM ya hace esto. Sin embargo, por defecto:

Los commands que realizan requestes de logging no esenciales (como búsqueda y vista, o las secuencias de commands de finalización) generalmente especifican un time de espera mínimo. Si el file .cache.json es más reciente que el time de espera especificado, entonces no hacen una request HTTP al logging.

Esto no incluye las instalaciones del package. Puede eludir esto haciendo lo siguiente:

 npm --cache-min 9999999 install <package-name> 

Hay pocas requestes para tener una interfaz más agradable para este command, ya que es un requisito bastante común.

También hay un par de proyectos que proporcionan mecanismos alternativos: