2011-09-29 23 views
9

Me he encontrado con este escenario bastantes veces y todavía no he encontrado la respuesta. Estoy comenzando un nuevo proyecto Node.js, y este proyecto dependerá de algunas otras bibliotecas. En aras de la argumentación, digamos que algunas son bibliotecas puramente JS que podrían agregarse como submódulos de git en el nuevo proyecto, pero algunas tienen piezas que requieren un esfuerzo extra (como dependencias del sistema que npm instala o bibliotecas de C que deben compilarse).)¿Cómo puedo manejar las dependencias de Node.js en un proyecto en git con NPM?

Cuál es la mejor manera de empezar este proyecto y agregarlo a GIT, con los siguientes dos requisitos:

  • bibliotecas de otras personas no están comprometidas con nuestro propio repo, y en cambio se submódulos o se tiran en dinámicamente e instalado por npm.
  • No necesita tener una gran lista de instrucciones que deben seguirse solo para clonar el repositorio y tener un entorno de trabajo. Ejecutar la actualización de los submódulos de git --init --recursive está bien, ejecutar un comando npm para leer package.json e instalar las dependencias está bien (¿existe tal comando?), Pero obligando a todos a ejecutar una instalación de "npm _ _ "de cada dependencia no está bien, y prefiero no usar 'hacer' o 'ant' para hacer eso si no es necesario.

¿Alguna idea de la mejor manera de hacerlo? Parece una cosa simple y básica, pero no pude encontrar un solo ejemplo de lo que estoy tratando de hacer.

Editar: Gramática

+0

Por cierto, puedes usar 'git clone --recursive ... foo' que es lo mismo que' git clone ...foo && cd foo && git submódulo actualización --init --recursive' – Pauan

Respuesta

10

edición Ignorar a continuación, pero dejó de referencia. A veces no pensar con claridad en la mañana :)

crea un archivo package.json, añadir sus dependencias y su instalación, simplemente se convierte en:

npm install 

desde el directorio del proyecto. git ignore todos los proyectos agregados.


npm submodule foo 

Se instala los paquetes a través de node_modulesgit submodule por lo github, etc reconocerá que son enlace. Esto funciona siempre que el paquete npm tenga un URI de git incluido. Lamentablemente, un buen número no lo hace, por lo que no tiene suerte con eso.

Además, tenga en cuenta que cuando hace esto, npm ya no funcionará en el módulo, p. no se puede actualizar a través de npm, usted tiene que hacerlo a través de git


O usted podría hacer algo como:

./modules.js

modules.exports = [ '[email protected]', '[email protected]', '[email protected]' ]; 

./make

#!/usr/bin/env node 
var modules = require('./modules') 
    , spawn = require('child_process').spawn; 

for(var i=0, l=modules.length; i<l; i++){ 
    spawn('npm', [ 'install', modules[i] ]); 
} 
+0

Sheezus - parece tan tonto que no sabía sobre 'npm install' sin argumentos! Eso es exactamente lo que necesitaba ... ¡aunque tu solución personalizada también es muy ingeniosa! Gracias por la ayuda :). –

+0

Gracias por no quitar su impresora original, era justo lo que necesitaba. :) – mik01aj

Cuestiones relacionadas