2012-02-07 27 views
5

Estoy a punto de hacer un gran proyecto con node.js y actualmente intento resolver algunas cosas.Mejor flujo de trabajo usando node.js npm y git

En los proyectos de nodos anteriores, tenía una carpeta adicional para todos los módulos de nodos que usaba. Esta carpeta fue ignorado por git y me las arreglé versión y actualizaciones a través de submódulos git, que no era fácil

Lo que estoy buscando es (sin dependencias, la actualización a la nueva versión no siempre fue divertido.):

npm install packagename
npm dump_modules_into_file

Así que todo el mundo que esté involucrado en este proyecto podría hacer:

npm install_or_update_modules_from_file

No quiero tener node_modules rastreado por mi repositorio de git. Básicamente, quiero algo similar a cómo lo maneja symonfy2 bundles.

P.S .: Conozco npm submodule packagename, pero este comando no es muy útil porque no instala dependencias y no actualiza los módulos.

P.S.2: Estoy listo sobre el package.json, pero esto también tiene algunos defectos. (Sin parámetros y tiene que actualizar las versiones del módulo a mano.)

+1

¿Qué quiere decir "' package.json' no tiene parámetros? " –

+0

P. ej .: para instalar mongodb con el analizador de C++ nativo, debe hacer: 'npm install mongodb --mongodb: native'. No he descubierto cómo pasar esta parte nativa a npm cuando utilizo un 'paquete.json'. – TheHippo

Respuesta

6

package.json logrará lo que está buscando. En su comentario sobre pasar la bandera --mongodb:native, esa bandera es un argumento para el comando npm y funciona cuando usa un package.json en su propio proyecto. El paquete mongodb tiene un "script de instalación" que busca ese indicador en el entorno de procesamiento del nodo. Si ese indicador está presente, genera otro proceso para la compilación. Por lo tanto, si ha MongoDB como una dependencia en su package.json

{ 
    "name": "MyProject" 
    , "description": "Test" 
    , "version": "0.0.1" 
    , "dependencies": { 
     "mongodb": "*" 
    } 
} 

Correr npm install --mongodb:native hará el trabajo.

En cuanto a "actualizarlo a mano", es realmente solo la primera vez que puede tomar un tiempo, y estoy seguro de que podría escribir un script para generarlo si hay muchas dependencias. Sin embargo, parece que tienes un equipo bastante grande, y si ese es el caso, entonces la automatización de las actualizaciones a package.json se pondrá realmente desagradable (piensa en nuevos desarrolladores, funciones experimentales, etc.Tener responsabilidad por construcciones rotas en esta parte del ciclo de desarrollo no es necesariamente una mala idea.

Referencias:

EDIT: Y como se mencionó Nick, añadiendo el directorio 'node_modules' a .gitignore evitará cualquier de esos archivos de ser registrado en su repo

+0

¡Gracias por la sugerencia con los parámetros pasados ​​a npm en general! Incluiré el comando npm en un script bash o Makefile y estamos en condiciones de hacerlo ... – TheHippo

+0

http://npmjs.org/doc/shrinkwrap.html podría haber ayudado ... – TheHippo

2

Afaik, las únicas formas de administrar paquetes son las que usted ha descrito, aunque no estoy seguro de lo que no le interesa de wrt package.json .

Si desea un control estricto sobre las versiones de los módulos que usa, puede especificar explícitamente el número de versión. También puede utilizar el enfoque >=X.X.X para obtener automáticamente el último (por encima de un umbral) que a veces está bien para fines de desarrollo.

Esto permite que sus compañeros de equipo para hacer:

npm install . 

que instalará todas las dependencias que figuran dentro del archivo package.json. Estos se instalarán en ./node_modules pero puede .gitignore que, como anotó.

6

Su Es un buen artículo que explica cuándo debe y no debe comprobar sus node_modules en git. Puede responder tus preguntas

node_modules in git

+1

Prefiere http: // npmjs .org/doc/shrinkwrap.html –

+0

Vale la pena leer tanto el artículo dado como el enlace sobre node-shrinkwrap –

0

Con el fin de probar completamente la configuración del paquete y asegurarse de que los módulos se comportan como lo serán en el despliegue final ahora utilizar el siguiente procedimiento. Evita por completo la necesidad de hackear los directorios de node_module o el código require() para que cuando vaya a implementarlo solo funcione.

Para proyectos internos o prelanzamiento a github también puede querer configurar "private": true en su package.json para que npm se niegue a publicarlo.

  1. Crear un directorio del proyecto bajo control de versiones Git y añadir todos los módulos de nodo como subdirectorios. Los nombres de los subdirectorios deben coincidir con los nombres de sus paquetes. Si está trabajando con github, querrá crear un repositorio de git separado para cada directorio de módulos. Pueden ser submódulos de Git en el repositorio del proyecto. Agregue node_module a sus archivos .gitignore.

  2. Instale una herramienta como npm-server y ejecútela en el directorio del proyecto. A continuación, configure npm registry en localhost para que ahora npm se comunique con su servidor npm local para buscar paquetes. Cualquiera que encuentre como subdirectorios enviará. Cualquiera que no encuentre lo hará proxy a registry.npmjs.org. $ npm set registry http://localhost:6070/ $ cd ~/projects $ npm-server

  3. iniciar una nueva cáscara y crear un directorio recinto separado $ mkdir sandbox $ cd sandbox

  4. Instalar la aplicación para utilizar el servidor de registro local. Limpia la memoria caché npm local y vuelve a instalar tu aplicación. Hago esto en una línea, así que es fácil rehacerlo a través del shell. Es posible que desee guiarlo.

    $ npm cache clear; sleep 3; npm uninstall -g app; sleep 3; npm install -g app

  5. Prueba de su aplicación:

    $ app ....

  6. Deregister registro NPM local cuando haya terminado de instalar:

    $ npm set registry http://registry.npmjs.org:80/

  7. Una vez que haya completado probando puedes publicar es su aplicación y vuelva a probar la implementación con npm-server detenido.

$ cd ~/projects $ npm publish app


En lugar de registrarse & cancelar el registro del Sever, sólo puede utilizar el servidor localhost para el que está de instalar: $ npm --registry=http://localhost:6070/ install app


estoy en el proceso de escribir una versión bifurcada de npm-server, así que simplemente hazlo: $ npmsvr on // Registers local registry server $ npmsvr start // Start local registry server $ npmsvr off // Deregisters local registry server

+0

Acabo de publicar el registro 'npmsvr' to npm para facilitar esta tarea. https://www.npmjs.org/package/npmsvr –

+0

Tenga en cuenta que esta versión es solo una pequeña interfaz para 'npm' y' npm-server' por lo que todavía necesita instalar 'npm-server' –

Cuestiones relacionadas