O npm install não instala o devDependencies


256

No Windows, por algum motivo, quando executo, npm installele não instala o devDependencies . AFAIK deveria. Se eu executar o npm install --dev devDependencies estão instalados. Não entendo por npm installque não instala o devDependencies também, mas instala apenas dependências. Qual seria a razão? Como posso corrigir isso?

Talvez algo esteja errado com o meu package.json ? Está listado abaixo, se for útil:

{
  "name": "try-brunch",
  "version": "0.1.0",
  "private": "true",
  "devDependencies": {
    "brunch": "^2.0.4",
    "cssnano-brunch": "^1.1.5",
    "javascript-brunch": "^1.8.0",
    "sass-brunch": "^1.9.2",
    "uglify-js-brunch": "^1.7.8"
  },
  "dependencies": {
    "jquery": "^2.1.4"
  }
}

5
Por que precisamos de uma correção para isso? Deve ser o padrão! devDependenciessão literalmente dependências para os desenvolvedores do módulo . Aposto que muitos de nós temos npm installum módulo para usá-lo, em vez de desenvolvê-lo.
Константин Ван

Digamos que você crie um aplicativo e precise de um plug-in de logger ou webpack. esses são devdeps. esses precisam ser instalados. O npm não os instala em alguns casos.
Tristan Tzara

1
Quero dizer, a instalação para devDependenciesé necessária apenas quando você escreve o pacote (aplicativo). Usá-lo não requer o devDependencies. Portanto , é razoável devDependenciesexigir a instalação de sinalizadores extras. Se npm installinstalado devDependencies por padrão , os usuários também receberão pacotes redundantes.
Константин Ван

o comportamento documentado é que, quando o faço npm ina minha pasta, ele pega o py package.jsone instala os deps e os devdeps. É assim que ele deve funcionar e faz sentido (por exemplo, quando eu faço npm idepois git cloneque espero ter tudo o que preciso, incluindo, por exemplo, plugins webpack). Esta pergunta aborda um erro, quando o comportamento real é diferente do pretendido. pls, consulte docs - docs.npmjs.com/cli/install . Há uma bandeira para não instalar o devdeps, mas o comportamento padrão é instalá-los, o que faz todo o sentido e é o que todos esperam
Tristan Tzara

Não vejo razões sãs para me lembrar de executar outro comando para instalar, por exemplo, plugins webpack ou defs do tipo datilografado ou qualquer outro devdeps toda vez que puxo. npm i deve inicializar os dois, que é o comportamento pretendido, são e documentado, por isso sinceramente não entendo por que você diz que esse problema deve ser um padrão
Tristan Tzara

Respostas:


306

Verifique os documentos do NPM para instalar

Com o --productionsinalizador (ou quando a variável de ambiente NODE_ENV estiver definida como produção), o npm não instalará os módulos listados em devDependencies. "

O --only={prod[uction]|dev[elopment]}argumento fará com que apenas devDependencies ou apenas non-devDependencies sejam instalados independentemente do NODE_ENV. "

Você tentou

npm install --only=dev

Se você está preocupado que seu package.json esteja incorreto, a melhor coisa a fazer é isso. Crie uma nova pasta e execute:

npm init --yes

Então:

npm install --save-dev brunch@^2.0.4
npm install --save-dev cssnano-brunch@^1.1.5
npm install --save-dev javascript-brunch@^1.8.0
npm install --save-dev sass-brunch@^1.9.2
npm install --save-dev uglify-js-brunch@^1.7.8
npm install jquery@^2.1.4 --save

E você deve estar pronto! Caso contrário, continuará postando outras opções.

Verifique sua configuração do npm:

npm config list

O npm obtém suas definições de configuração na linha de comando, variáveis ​​de ambiente e arquivos npmrc. Portanto, verifique as variáveis ​​de ambiente e o npmrc arquivo .

Ainda está falhando?

Ok, crie uma nova pasta, idealmente em outro lugar no seu sistema de arquivos. ie não na mesma hierarquia de pastas. Por exemplo, C: \ myNewFolder - quanto mais próximo da base C:, melhor.

Então corra:

npm init --yes

Agora execute:

npm install underscore --save

e finalmente:

npm install mocha --save-dev

Tudo funciona como esperado?

O que estou tentando fazer é entender se o seu problema é global ou se é algo local para a pasta e as dependências anteriores.


Tristan - isso ajuda a sua situação? Você pode marcar a resposta como correta ou me informar o resultado da tentativa acima?
Arcseldon

2
npm install --only = dev instala o devdeps, mas eu gostaria de instalar o deps e o devdeps de uma só vez. O package.json parece estar bem, pois a recriação não muda nada. Estou certo de que NODE_ENV existe globalmente, como um valor padrão e localmente, como um valor para o projeto? Onde posso verificar e alterar esses valores em janelas (Eu olhei e não tenho NODE_ENV variável de sistema)
Tristan Tzara

@TristanTzara - hoje trabalho quase exclusivamente no MAC. No entanto, a partir das memórias de dias passados ​​(anos atrás no NT e XP) - você pode digitar algo como "set" na janela do prompt de comando. Ou então, vá para algo como Propriedades do sistema -> Avançado -> Variáveis ​​de ambiente e verifique suas entradas lá . Você está procurando uma "chave" com NODE_ENV. Vou procurar no Google agora por uma opção do Windows, mas postei isso no caso de ajudar.
Arcseldon


@TristanTzara - é bom saber. Um pensamento, verifique todos os diretórios principais acima do diretório que não funcionam. Procure por uma pasta node_modules existente ... o npm pesquisará para cima ao tentar resolver uma dependência e pode ser algo estranho como se ele estivesse pegando um módulo instalado existente na árvore de diretórios e, portanto, se recusando a instalar o seu na pasta filho . O local usual está logo abaixo do seu diretório pessoal. Boa sorte e obrigado por aceitar minha resposta: D
arcseldon

85

Verifique se o valor de produção da configuração npm está definido como true. Se esse valor for verdadeiro, ele ignorará as dependências de desenvolvimento.

Corre npm config get production

Para configurá-lo: npm config set -g production false


Gostaria de saber se, em algum lugar entre npm 5.xe npm 6.x, se nenhum valor foi definido, o padrão se tornou, em truevez de false?
James Perih

38

certifique-se de não ter a variável env NODE_ENVdefinida como 'produção'.

Se o fizer, as dependências de desenvolvimento não serão instaladas sem o --devsinalizador


Eu dei uma olhada nas minhas variáveis ​​de sistema e ainda não tenho essa aqui. Talvez eu olhe para o lugar errado?
precisa saber é o seguinte

13
Observe que npm install --devinstala o devDependencies recursivamente . Isso quase nunca é o que você deseja e, de fato, é preterido .
Wonko

Obrigado. Eu não sabia que isso teria impacto nas instalações regulares do npm, mas é lógico. :)
Lothre1

6
O uso da --devopção está obsoleto. Use em --only=devvez disso
Sarath Ak 06/02

16

Eu tinha um package-lock.jsonarquivo de uma versão antiga do meu package.json, excluí isso e tudo foi instalado corretamente.


Bingo! Isso resolveu meu problema. Parece que deveríamos ter comprometido isso com o repo.
Aleatório # 6/17

9

Eu tive um problema parecido. npm install --only=devnão funcionou e nem npm rebuild. Em última análise, eu tive que excluir node_modulese package-lock.jsone correr npm installnovamente. Isso consertou para mim.


7

Você pode usar o caminho curto para dependências de instalação apenas para desenvolvimento, da seguinte maneira:

npm i -D <dependencies-names>

melhor resposta. Deveria estar no topo
wwwwwwwwwwww

6

Verifique se o seu package.jsoné válido ...

Eu tive o seguinte erro ...

npm WARN Invalid name: "blah blah blah"

e que, da mesma forma, causou a devDependenciesnão instalação.

FYI, alterando o package.json"nome" para blah-blah-blahcorrigi-lo.


0

Eu tenho o mesmo problema porque eu configurei o NODE_ENV=productionenquanto construí o Docker. Então eu adiciono mais um npm install --only=dev. Tudo funciona bem. Preciso das devDependencies para criar módulos TypeSciprt

RUN npm install
RUN npm install --only=dev
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.