Como editar um módulo de nó instalado via npm?


124

Estou usando o módulo node_swiz, que por sua vez usa o módulo validador.

Quero fazer alterações no módulo validador, mas usei o npm install para instalar os módulos / dependências.

Posso apenas fazer alterações no módulo validador dentro de node_modules ou essas dependências de node_modules serão recriadas e a versão mais recente obtida quando eu publicar no heroku ou na próxima vez que executar npm install?

A estrutura é semelhante a esta:

myNodeApplication
  - node_modules
     - swiz
         - node_modules
            - validator [this is the library I want to edit]

Obrigado pela ajuda!

Respostas:


242

Você pode editar o arquivo diretamente, mas ele será sobrescrito sempre que o npm for atualizado, a melhor coisa a fazer é ir direto para a fonte.

Se as mudanças afetam a funcionalidade do módulo geral e podem ser úteis para outros, você pode contribuir com a fonte original no github e procurar a mudança a ser implementada.

Se esta é uma funcionalidade proprietária necessária e não ajudaria no desenvolvimento do módulo, a melhor coisa a fazer é bifurcá-la do github e fazer suas alterações. Você pode instalar itens diretamente do github usando o NPM, e este método permite que você integre mudanças futuras em sua versão personalizada da fonte original.

Para instalar diretamente do github, use o seguinte comando:

npm install https://github.com/<username>/<repository>/tarball/master


2
Obrigado! Isso é exatamente o que eu queria saber. Além disso, para outros que estão lendo isto ... Eu queria incluir o módulo que está no meu github no arquivo package.json, e há informações aqui sobre isso: stackoverflow.com/a/8306715/1810875
user1810875

22
antes de bifurcar, estou mudando no sistema local, mas a mudança não parece afetar. Alterar qualquer arquivo javascript que é node_modules / package_name / lib / file_name.js afeta?
inquisitivo

1
Apenas uma observação, não tenho certeza se algo mudou, mas pessoalmente eu tive que especificar o URL do Git como git: //github.com/ <usuário> / <pacote> .git "
Craig

5
@JohnDevor Em vez de instalar o módulo personalizado, use o comando "npm link" para apenas criar um link simbólico
Venryx

3
Descobri isso, tive que navegar até a pasta /node_modulese executar npm installentão está tudo bem!
Adam Moisa

6

Você pode usar patch-package para fazer e persistir mudanças nos módulos do nó.

Isso pode ser feito primeiro fazendo alterações no pacote interno node_modulese, em seguida, executando o seguinte comando, <package name>sendo o nome do pacote que você acabou de fazer.

npx patch-package <package name>

patch-package criará então uma patchespasta com um arquivo dentro, representando suas mudanças. Este arquivo pode então ser enviado ao git e os patches podem ser restaurados posteriormente executando npx patch-package(sem nenhum argumento).

Etapa opcional:

Adicione o seguinte na seção de script de seu package.json para corrigir automaticamente a dependência ao executar "instalação npm".

"postinstall": "npx patch-package" 

1
Solução muito boa que funcionou para mim sem problemas.
ヨ ハ ン ソ ン

Isso é muito legal! Para sua informação: Eu tive que usar "pré-instalação" em vez de "pós-instalação" porque meu patch foi para o script de pós-instalação da dependência. Como você implementaria isso se tivesse outros patches que precisassem ser aplicados na fase de pós-instalação?
Superole

1
Resposta incrível, eu precisava fazer modificações em um dep antes de implantar no netlify. preinstall 'npx patch-package' foi o bilhete mágico. A imagem adequada agora é exibida no site.
TheBetterJORT

1

Eu não queria publicar um novo módulo e também não queria npm installsobrescrever minhas alterações. Eu encontrei uma solução para esses dois problemas, mas provavelmente seria melhor seguir o conselho de @Sdedelbrock. Mas se você quiser fazer isso, veja como:

  1. Edite o seu package.json arquivo para remover a dependência que você deseja editar.
  2. Vá para o do seu projeto /node_modulese mova a pasta para outro lugar em seu repositório que possa ser submetido. Então agora /node_modules/dependencyestá em/dependency
  3. cd no diretório de dependência e digite npm link
  4. cdna raiz do diretório do seu projeto e digite npm link dependency É importante que você faça isso fora de /node_modulese/dependency

Se tudo funcionou, agora você deve ter um link simbólico que foi criado em /node_modules/dependency. Agora você pode executar seu projeto para ver se funciona.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.