Respuestas:
De la documentación de npm-link :
En el directorio del módulo local:
$ cd ./package-dir
$ npm link
En el directorio del proyecto para usar el módulo:
$ cd ./project-dir
$ npm link package-name
O de una vez usando rutas relativas:
$ cd ./project-dir
$ npm link ../package-dir
Esto es equivalente a usar dos comandos anteriores debajo del capó.
npm link
creará una segunda instancia de dependencias externas. Entonces, si tiene un paquete A necesita B y C, B necesita C. vincular B hará que la aplicación A tenga dos instancias de C.
solo debe proporcionar un <folder>
argumento npm install
, el argumento debe apuntar hacia la carpeta local en lugar del nombre del paquete:
npm install /path
rm -rf node_modules
antes y npm install
después de ejecutar el script de respuesta.
Dado que la misma persona me preguntó y respondió, agregaré un enlace npm como alternativa.
de documentos:
Esto es útil para instalar sus propias cosas, para que pueda trabajar en ellas y probarlas de forma iterativa sin tener que reconstruirlas continuamente.
cd ~/projects/node-bloggy # go into the dir of your main project
npm link ../node-redis # link the dir of your dependency
[Editar] A partir de NPM 2.0, puede declarar dependencias locales en package.json
"dependencies": {
"bar": "file:../foo/bar"
}
npm link
contra la carpeta una vez (para crear un enlace simbólico global) y luego ejecutarla npm link package-name
dentro de la carpeta del proyecto (para usar el enlace simbólico global en su proyecto). La respuesta a continuación es la respuesta correcta.
file:
enfoque) permitió que mi aplicación y el módulo local compartieran una dependencia. Mi prueba de npm link
resultó en una dependencia duplicada, que rompe cosas si la dependencia necesita ser utilizada como un singleton.
npm pack
+ package.json
Esto es lo que funcionó para mí:
module project
, ejecute npm pack
:Esto construirá un <package-name>-<version>.tar.gz
archivo.
consumer project
Idealmente, puede colocar todos esos archivos en una tmp
carpeta en su consumer-project
raíz:
package.json
:"dependencies": {
"my-package": "file:/./tmp/my-package-1.3.3.tar.gz"
}
Install
los paquetes:npm install
o npm i
oyarn
consumer-project's node_modules
carpeta.Buena suerte...
Ninguno de estos enfoques ( npm link
opackage.json
dependencia de archivos) funciona si el módulo local tiene dependencias pares que solo desea instalar en el alcance de su proyecto.
Por ejemplo:
/local/mymodule/package.json:
"name": "mymodule",
"peerDependencies":
{
"foo": "^2.5"
}
/dev/myproject/package.json:
"dependencies":
{
"mymodule": "file:/local/mymodule",
"foo": "^2.5"
}
En este escenario, npm configura myproject
's node_modules/
así:
/dev/myproject/node_modules/
foo/
mymodule -> /local/mymodule
Cuando el nodo se carga mymodule
y lo hace require('foo')
, el nodo resuelve el mymodule
enlace simbólico, y luego solo busca /local/mymodule/node_modules/
(y sus antepasados) foo
, lo que no encuentra. En cambio, queremos que el nodo mire /local/myproject/node_modules/
, ya que desde allí ejecutamos nuestro proyecto y dónde foo
está instalado.
Por lo tanto, necesitamos una forma de decirle al nodo que no resuelva este enlace simbólico cuando lo busque foo
, o necesitamos una forma de decirle a npm que instale una copia de mymodule
cuándo se usa la sintaxis de dependencia de archivos package.json
. Tampoco he encontrado una manera de hacerlo, desafortunadamente :(
NODE_PATH
para apuntar al lugar node_modules/
donde foo
está instalado. Entonces, para el caso anterior, sería este: NODE_PATH=/dev/myproject/node_modules/
eso permite mymodule
encontrar foo
.
Como han respondido las personas anteriores npm --save ../location-of-your-packages-root-directory
. Sin ../location-of-your-packages-root-directory
embargo, debe tener dos cosas para que funcione.
1) package.json
en ese directorio apuntado hacia
2) la main
propiedad en el package.json
debe establecerse y trabajar ig "main": "src/index.js",
si el archivo de entrada ../location-of-your-packages-root-directory
es../location-of-your-packages-root-directory/src/index.js