Estou desenvolvendo dois módulos para NodeJS, o primeiro nomeado aligator
e o segundo aligator-methods
. O segundo depende do primeiro para funcionar. Estou desenvolvendo esses dois módulos ao mesmo tempo e quero um link global aligator
para que possa usá-lo como se estivesse no registro npm e acabei de instalá-lo globalmente. Para fazer isso, a documentação do NPM diz que preciso usar, npm link
mas não está funcionando.
Arquivo package.json
do módulo aligator
:
{
"name": "aligator",
"version": "0.0.1",
"description": "",
"main": "index.js",
"private": true,
"directories": {
"doc": "docs",
"example": "examples",
"test": "spec"
},
"scripts": {
"test": "gulp jasmine"
},
"license": "MIT",
"devDependencies": {
"gulp": "^3.6.2",
"gulp-jasmine": "^0.2.0",
"gulp-jshint": "^1.6.1",
"gulp-rename": "^1.2.0",
"jasmine-node": "^1.14.3"
},
"dependencies": {
"bluebird": "^1.2.4",
"lodash": "^2.4.1",
"mathjs": "^0.22.0"
}
}
Arquivo package.json
do módulo aligator-methods
:
{
"name": "aligator-methods",
"version": "0.0.1",
"description": "",
"main": "index.js",
"private": true,
"directories": {
"doc": "docs",
"example": "examples",
"test": "jasmine"
},
"scripts": {
"test": "gulp jasmine"
},
"author": "",
"license": "MIT",
"devDependencies": {
"gulp": "^3.6.2",
"gulp-jasmine": "^0.2.0",
"gulp-jshint": "^1.6.1",
"gulp-rename": "^1.2.0",
"jasmine-node": "^1.14.3"
},
"dependencies": {
"lodash": "^2.4.1",
"mathjs": "^0.22.0",
"aligator": "^0.0.1"
}
}
Em primeiro lugar, vinculei o módulo globalmente:
$ cd ~/aligator
$ npm link
/usr/local/lib/node_modules/aligator -> /Users/roc/aligator
Isso se não me engano criou uma referência global do meu módulo aligator
e agora posso usar este módulo de qualquer lugar que eu quiser no computador.
Em seguida, fui para o outro módulo e tentei instalar a dependência, mas me deu esta saída:
$ cd ~/aligator-methods
$ npm install
npm ERR! 404 404 Not Found: aligator
npm ERR! 404
npm ERR! 404 'aligator' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it
npm ERR! 404 It was specified as a dependency of 'aligator-methods'
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, or http url, or git url.
npm ERR! System Darwin 13.2.0
npm ERR! command "node" "/usr/local/bin/npm" "install"
npm ERR! cwd /Users/roc/aligator-methods
npm ERR! node -v v0.10.28
npm ERR! npm -v 1.4.16
npm ERR! code E404
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /Users/roc/aligator-methods/npm-debug.log
npm ERR! not ok code 0
Eu até tentei vinculá-lo diretamente com:
$ cd ~/aligator-methods
$ npm link aligator
/Users/roc/aligator-methods/node_modules/aligator -> /usr/local/lib/node_modules/aligator -> /Users/roc/aligator
Mas também não funcionou.
Alguma ideia do que pode estar acontecendo? Eu li em algum lugar que talvez tenha algo a ver com a minha instalação de node e npm porque foi feito pelo Homebrew e então às vezes eu preciso usar sudo
, parecia improvável, mas tentei o que eles propuseram e não funcionou também.
aligtor
e você tenta se referir a ele no segundo módulo comoaligator
. Isso também pode fazer com que sua dependência falhe.main
da minhapackage.json
, obrigado por atualizar a resposta com sua correção!Respostas:
Encontrei esse problema por causa do NVM, estava executando uma versão do nó para a dependência e outra para o dependente.
fonte
Excluir
package-lock.json
e executarnpm install
novamente resolveu o problema para mim.fonte
package.json
também, mas na maioria das vezes vejo quepackage-lock.json
ouyarn.lock
foram os guardiões para isso.O problema era que a
main
propriedade depackage.json
estava apontando para um arquivo não existente. Parece que o problema pode ocorrer por vários motivos, portanto, verifique as outras respostas.fonte
main
. Na maioria das vezes, eu vivia sem ele, mas acho que ele cria esses problemas menores.Ao executar
npm link
pela primeira vez a partir doaligator
diretório, você cria um link do diretório global node_modules paraaligator
. Então, ao executar anpm link aligator
partir doaligator-methods
diretório, você vinculaaligator
de seus node_modules instalados localmente à fonte original (como a saída mostra em seu exemplo acima). Feito isso, não haverá mais necessidade de instalar, pois já está "instalado". Que erros você vê depois de executar onpm link aligator
comando?Se você deseja apenas instalar uma dependência de um diretório local, pode apenas tentar usar
npm install
. Por exemplo:fonte
npm link
não mostrou nenhum erro. O problema no meu caso era que a propriedademain
estava apontando para um arquivo não existente. Quanto ao meunpm install
você tem razão, não precisei instalar nada paranpm link
fazer tudo. Obrigado por isso eu não sabia.Meu problema acabou sendo que o repo A estava usando
npm
e o repo B estava usandoyarn
, então precisei executaryarn link
no repo B para puxá-lo vianpm link package-name
para o repo A.fonte
O que funcionou para mim foi:
node_modules
na dependência e no módulo do consumidor.npm unlink --no-save [dependency-module]
Agora posso testar totalmente meu módulo não publicado localmente.
Além disso, há um comando npm pack que pode ajudá-lo a testar seus módulos não publicados, embora não seja tão robusto.
npm-pack
fonte
Correção para minha versão desse problema; no npm v5.3.0, removi
node_modules
do repo que estava vinculando a outro projeto.Eu descobri que depois do npm v3 eles tentam colocar todas as dependências de node_modules em um diretório node_modules (um em seu projeto) para nivelar a estrutura tanto quanto possível ( http://codetunnel.io/npm-5-changes-to-npm -link / ).
fonte
Para mim, isso aconteceu quando diminuí o número da versão do meu pacote local de 0.1.0 para 0.0.1. E nos projetos que vinculei a este pacote ainda estava usando o número de versão superior. Atualizar dependências em
package.json
consertou.fonte
Ao usar peerDependency
Estou desenvolvendo dois pacotes
stejs
, estejs-loader
.stejs-loader
temstejs
como umpeerDependency
. Quando eu executeinpm link stejs-loader
enpm link stejs
em meu projeto estava recebendo um erro questejs-loader
não consegui encontrarstejs
. Consertei executandonpm link stejs
no diretório destejs-loader
.fonte
Verifique tsconfig moduleResolution
Se, como eu, você mudou o tsconfig
module
dees5
paraesnext
ou algo assim, então omoduleResolution
padrão pode ter mudado.Sem
moduleResolution
ser definido como "node", typescript não resolverá pacotes node_modules.Você pode ler na página Opções do compilador sobre como o valor padrão depende do valor de
module
, cujo padrão, por sua vez, dependetarget
- mas provavelmente defina-o como "nó" explicitamente.fonte