Cómo especificar módulos locales como dependencias del paquete npm
Tengo una aplicación que tiene el conjunto habitual de dependencias en módulos de terceros (por ejemplo, 'express') especificado en el archivo package.json en dependencias. P.ej
"express" : "3.1.1"
Me gustaría estructurar mi propio código de forma modular y que package.json instale un conjunto de módulos locales (es decir, en el sistema de archivos en el que estoy actualmente). Sé que puedo instalar un módulo local ejecutando:
npm install path/to/mymodule
Sin embargo, no sé cómo hacer que esto suceda a través de la estructura de dependencias de package.json. Usar la --save
opción en este comando es simplemente ponerlo "mymodule": "0.0.0"
en mi paquete.json (no hace referencia a la ubicación de la ruta del archivo). Si luego elimino la versión instalada de node_modules e intento volver a instalarla desde package.json, falla (porque busca "mymodule" en el registro central y no busca localmente).
Estoy seguro de que es una forma de decirle a la "dependencies": {}
estructura que quiero que se instale desde una ruta del sistema de archivos, pero no sé cómo.
¿Alguien más ha tenido este problema? Gracias.
npm install
ahora apoya esto
npm install --save ../path/to/mymodule
Para que esto funcione mymodule
se debe configurar como un módulo propio package.json
. Consulte Creación de módulos NodeJS .
A partir de npm 2.0, las dependencias locales se admiten de forma nativa. Vea la respuesta de danilopopeye a una pregunta similar . Copié su respuesta aquí porque esta pregunta ocupa un lugar muy alto en los resultados de búsqueda web.
Esta característica se implementó en la versión 2.0.0 de npm. Por ejemplo:
{
"name": "baz",
"dependencies": {
"bar": "file:../foo/bar"
}
}
Cualquiera de las siguientes rutas también es válida:
../foo/bar
~/foo/bar
./foo/bar
/foo/bar
sincronizando actualizaciones
Dado que npm install <folder>
agrega el paquete en el directorio como un enlace simbólico en el proyecto actual, cualquier cambio en el paquete local se sincroniza automáticamente.
Ver: Dependencia local en package.json
Parece que la respuesta es npm link
: https://docs.npmjs.com/cli/link
Lo siguiente debería ayudar (suponiendo que la biblioteca y la aplicación comparten la misma carpeta principal)
En la biblioteca :
npm pack // this will pack the library in a .tgz file
En la aplicación que necesita la biblioteca.
npm i ../mylibrary/../library-package-X.X.tgz
Esto realizará los siguientes cambios en su aplicación .
package.json
ahora tendrá
"@mylibrary": "file:../mylibrary/library-package-X.X.tgz",