Quiero hacer algo como esto, por lo que npm install
también instala el package.json
de ../somelocallib
o más importante sus dependencias.
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
Quiero hacer algo como esto, por lo que npm install
también instala el package.json
de ../somelocallib
o más importante sus dependencias.
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
Respuestas:
Esta característica se implementó en la versión 2.0.0 de npm. 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
El paquete local se copiará al prefijo ( ./node-modules
).
Pon somelocallib
como dependencia en tu package.json
como de costumbre:
"dependencies": {
"somelocallib": "0.0.x"
}
Entonces corre npm link ../somelocallib
y npm instalará la versión en la que estás trabajando como un enlace simbólico .
app@0.0.1 /private/tmp/app
└── somelocallib@0.0.1 -> /private/tmp/somelocallib
Referencia: enlace (1)
npm dedup
para solucionar este problema. npmjs.org/doc/cli/npm-dedupe.html
npm install <folder>
descripción dice Instalar el paquete en el directorio como un enlace simbólico en el proyecto actual.
Ahora es posible especificar rutas de instalación del módulo de nodo local en su package.json
directamente. De los documentos:
Caminos locales
A partir de la versión 2.0.0, puede proporcionar una ruta a un directorio local que contenga un paquete. Las rutas locales se pueden guardar usando
npm install -S
onpm install --save
, usando cualquiera de estos formularios:../foo/bar ~/foo/bar ./foo/bar /foo/bar
en cuyo caso se normalizarán a una ruta relativa y se agregarán a su
package.json
. Por ejemplo:{ "name": "baz", "dependencies": { "bar": "file:../foo/bar" } }
Esta característica es útil para el desarrollo local fuera de línea y la creación de pruebas que requieren la instalación de npm donde no desea acceder a un servidor externo, pero no debe usarse al publicar paquetes en el registro público.
"bar": "file:///home/user/src/foo/bar"
node:onbuild
imágenes estándar solo copian el directorio actual y, por lo tanto, omiten cualquier cosa ../foo
.
npm install
provienen u otro repositorio git en la LAN? Cuando intento la instalación anterior y npm desde git + ssh, parece que se ve en el directorio node_modules y no intento pasar por git + ssh, aunque así es como estoy instalando el paquete de nivel superior.
Esto funciona para mi.
Coloque lo siguiente en su archivo package.json
"scripts": {
"preinstall": "npm install ../my-own-module/"
}
.gitignore
en la carpeta del módulo, se creó .npmignore
y la primera vez que lo ejecuté aplicó 777 recursivamente en todas las carpetas excepto node_modules
. Pero sí, instaló las dependencias. Usando npm versión 1.4.14.
"dependencies": { "my-own-module": "file:../my-own-module" }
?
npm link
es que no necesita hacerlo npm install
cada vez para actualizar sus dependencias.
Si desea automatizar aún más esto, porque está revisando su módulo en el control de versiones y no quiere confiar en que los desarrolladores recuerden el enlace npm, puede agregar esto a la sección de "scripts" de package.json:
"scripts": {
"postinstall": "npm link ../somelocallib",
"postupdate": "npm link ../somelocallib"
}
Esto se siente más allá de hacky, pero parece "funcionar". Recibí el consejo de este problema de npm: https://github.com/npm/npm/issues/1558#issuecomment-12444454
postinstall
y en postupdate
lugar de preinstall
y preupdate
?
Así es como agregará dependencias locales:
npm install file:src/assets/js/FILE_NAME
Agréguelo a package.json desde NPM:
npm install --save file:src/assets/js/FILE_NAME
Agregue directamente a package.json así:
....
"angular2-autosize": "1.0.1",
"angular2-text-mask": "8.0.2",
"animate.css": "3.5.2",
"LIBRARY_NAME": "file:src/assets/js/FILE_NAME"
....
Aquí está el package.json que usará para el proyecto maestro:
"dependencies": {
"express": "*",
"somelocallib": "file:./somelocallib"
}
Ahí ./somelocallib
está la referencia a la carpeta de la biblioteca en relación con el proyecto maestro package.json .
Referencia: https://docs.npmjs.com/files/package.json#local-paths
Maneja las dependencias de tu biblioteca.
Además de correr npm install
, deberás correr(cd node_modules/somelocallib && npm install)
.
Este es un error conocido con NPM.
Referencia: https://github.com/npm/npm/issues/1341 (buscando una referencia más actualizada)
Revisa tu maestro package.lock
y tusomelocallib/package.lock
administrador de código fuente.
Luego, en su Dockerfile use:
FROM node:10
WORKDIR /app
# ...
COPY ./package.json ./package-lock.json ./
COPY somelocallib somelocallib
RUN npm ci
RUN (cd node_modules/zkp-utils/ && npm ci)
# ...
Utilizo paréntesis en mis (cd A && B)
construcciones para hacer que la operación sea idempotente.
Sé que eso npm install ../somelocallib
funciona.
Sin embargo, no sé si la sintaxis que muestra en la pregunta funcionará o no package.json
...
Desafortunadamente, el documento parece mencionar solo la URL como una dependencia.
Intente file:///.../...tar.gz
, señalando una lib local comprimida ... y díganos si funciona.
Esto funcionó para mí: primero, asegúrese de que los directorios npm tengan el usuario correcto
sudo chown -R myuser ~/.npm
sudo chown -R myuser /usr/local/lib/node_modules
Entonces su en su package.json enlace el directorio
"scripts": {
"preinstall": "npm ln mylib ../../path/to/mylib"
},
"dependencies": {
"mylib" : "*"
}
npm install
.
En realidad, a partir de npm 2.0, ahora hay soporte para rutas locales (ver aquí ).
Curioso ... al menos en Windows (mi npm es 3.algo) que necesitaba hacer:
"dependencies": {
"body-parser": "^1.17.1",
"module1": "../module1",
"module2": "../module2",
Cuando hice un npm install ../module1 --save
resultado resultó en rutas absolutas y no relativas según la documentación.
Jugueteé un poco más y determiné que ../xxx
era suficiente.
Específicamente, compruebo los módulos de nodo local para decir d: \ build \ module1, d: \ build \ module2 y mi proyecto de nodo (aplicación) en d: \ build \ nodeApp.
Para 'instalar', yo:
d:\build\module1> rmdir "./node_modules" /q /s && npm install
d:\build\module2> rmdir "./node_modules" /q /s && npm install
d:\build\nodeApp> rmdir "./node_modules" /q /s && npm install
package.json del módulo1 tiene una dependencia de "module2": "../module2"; module2 no tiene dependencia local; nodeApp tiene dependencias "module1": "../module1" y "module2": "../module2".
No estoy seguro de si esto solo funciona para mí, ya que las 3 carpetas (módulo1, módulo2 y nodeApp) se encuentran en ese mismo nivel .......
Dos pasos para un desarrollo local completo: