Dependência local em package.json

Eu quero fazer algo parecido com isso, então o npm install também instala o ../somelocallib de ../somelocallib ou, mais importante, suas dependencies.

 "dependencies": { "express": "*", "../somelocallib": "*" } 

Atualização de 2014-setembro

Esse recurso foi implementado na versão 2.0.0 do npm. Exemplo:

 { "name": "baz", "dependencies": { "bar": "file:../foo/bar" } } 

Qualquer um dos seguintes caminhos também é válido:

 ../foo/bar ~/foo/bar ./foo/bar /foo/bar 

O pacote local será copiado para o prefixo ( ./node-modules ).


Resposta antiga

Coloque o somelocallib como dependência no seu package.json como normal:

 "dependencies": { "somelocallib": "0.0.x" } 

Em seguida, execute o npm link ../somelocallib e o npm instalará a versão em que você está trabalhando como um link simbólico .

 app@0.0.1 /private/tmp/app └── somelocallib@0.0.1 -> /private/tmp/somelocallib 

Referência: link (1)

Agora é possível especificar os caminhos de instalação do módulo do nó local no seu package.json diretamente. Dos docs:

Caminhos Locais

A partir da versão 2.0.0, você pode fornecer um caminho para um diretório local que contenha um pacote. Caminhos locais podem ser salvos usando npm install -S ou npm install --save , usando qualquer uma destas formas:

 ../foo/bar ~/foo/bar ./foo/bar /foo/bar 

Nesse caso, eles serão normalizados para um caminho relativo e adicionados ao seu package.json . Por exemplo:

 { "name": "baz", "dependencies": { "bar": "file:../foo/bar" } } 

Esse recurso é útil para o desenvolvimento local off-line e para a criação de testes que exigem a instalação do npm onde você não deseja acessar um servidor externo, mas não deve ser usado ao publicar pacotes no registro público.

Isso funciona para mim.

Coloque o seguinte no seu arquivo package.json

 "scripts": { "preinstall": "npm install ../my-own-module/" } 

Se você quiser automatizar isso ainda mais, porque você está verificando o seu módulo no version control, e não quer confiar nos devs lembrando do npm link, você pode adicioná-lo à sua seção “scripts” do package.json:

 "scripts": { "postinstall": "npm link ../somelocallib", "postupdate": "npm link ../somelocallib" } 

Isso parece além do hacky, mas parece “funcionar”. Recebi a dica desta edição npm: https://github.com/isaacs/npm/issues/1558#issuecomment-12444454

É assim que você adicionará dependencies locais:

npm install file:src/assets/js/FILE_NAME

Adicione-o ao pacote.json do NPM:

npm install --save file:src/assets/js/FILE_NAME

Adicione diretamente ao package.json assim:

 .... "angular2-autosize": "1.0.1", "angular2-text-mask": "8.0.2", "animate.css": "3.5.2", "LIBRARY_NAME": "file:src/assets/js/FILE_NAME" .... 

Na verdade, a partir do npm 2.0, há suporte agora a caminhos locais (veja aqui ).

Eu sei que o npm install ../somelocallib funciona.

No entanto, não sei se a syntax mostrada na pergunta funcionará a partir de package.json

Infelizmente, doc parece mencionar apenas URL como uma dependência.

Tente file:///.../...tar.gz , apontando para uma biblioteca local zipada … e diga-nos se funciona.

Isso funcionou para mim: primeiro, certifique-se de que os diretórios npm tenham o usuário certo

 sudo chown -R myuser ~/.npm sudo chown -R myuser /usr/local/lib/node_modules 

Então o seu em seu package.json link o diretório

 "scripts": { "preinstall": "npm ln mylib ../../path/to/mylib" }, "dependencies": { "mylib" : "*" } 

Curioso ….. pelo menos no Windows (meu npm é 3.alguma coisa) eu precisava fazer:

 "dependencies": { "body-parser": "^1.17.1", "module1": "../module1", "module2": "../module2", 

Quando eu fiz uma npm install ../module1 --savenpm install ../module1 --save resultou em caminhos absolutos e não relativos pela documentação.

Eu ../xxx um pouco mais e determinei que ../xxx era suficiente.

Especificamente, eu tenho os módulos de nó local verificados para dizer d: \ build \ module1, d: \ build \ module2 e meu projeto de nó (aplicativo) em d: \ build \ nodeApp.

Para ‘instalar’, eu:

 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 

O package.json do module1 tem uma dependência de “module2”: “../module2”; module2 não possui dependência local; nodeApp tem dependencies “module1”: “../module1” e “module2”: “../module2”.

Não tenho certeza se isso só funciona para mim já que todas as 3 pastas (module1, module2 e nodeApp) estão no mesmo nível …….

Dois passos para um desenvolvimento local completo:

  1. Forneça o caminho para o diretório local que contém o pacote.
  2. Symlink a pasta do pacote