Actualizar un module de nodo sin actualizar sus dependencies

Tenemos nuestro propio module de nodo que utilizamos para mantener el código compartido para varios de nuestros proyectos internos. La input en package.json se ve así:

"dependencies": { "foo": "git+https://github.secureserver.net/MyProject/foo.git#master", } 

Como cuestión de práctica, mantenemos nuestros modules de nodo dependientes marcados en git junto con el código del proyecto. Por ejemplo, nuestro tree en git se parece a esto:

 application\ config\ package.json node_modules\ test\ 

Cada vez que hacemos un "foo de actualización de npm" en cualquiera de los proyectos que dependen de foo, obtenemos el foo actualizado, pero luego npm también actualiza los modules de nodos de los que depende foo aunque estén marcados en git junto con foo. Esto no es lo que queremos. En "npm update" queremos que foo y todos sus modules de nodos reflejen exactamente lo que está en master porque eso es con lo que foo se probó. Podríamos requerir versiones exactas de los modules en el package.json in foo, pero eso hace que la actualización de las dependencies de foo sea más problemática cuando queremos verificar nuevas versiones. ¿Cómo podemos get "npm update foo" para sacar a Foo de Github sin tener que actualizar los node_modules de foo?

¡Esto parece un trabajo para npm shrinkwrap !

En el directory del proyecto foo , ejecute npm shrinkwrap . Esto generará npm-shrinkwrap.json con las versiones instaladas de sus dependencies, sus dependencies, hasta el final.

Cuando la npm install se ejecuta contra foo , las versiones especificadas en npm-shrinkwrap.json tendrán prioridad sobre package.json .

Una advertencia: npm no se verá en package.json en absoluto, así que si usa npm install --save o edite package.json directamente para instalar nuevos packages, necesitará volver a ejecutar npm shrinkwrap .