Existe uma maneira de criar automaticamente o arquivo package.json para projetos Node.js.


412

O package.json deveria ser editado manualmente? Um programa como o npm não pôde apenas examinar os arquivos, ver as instruções "require" e usá-las para colocar as entradas necessárias no arquivo package.json? Existem programas como esse?


2
até agora, editei o arquivo manualmente: adicionando todos os pacotes (e versões mínimas) necessários. em seguida, executarnpm link
pkyeck

22
@neuromancer você poderia aceitar a resposta certa ? É claramente um com 38+ votos ...
Esteban

2
npmjs.org/doc/install.html , isso também pode ser usado para atualizar automaticamente o package.json durante a instalação de um novo pacote
V31

1
@neromancer, abaixe seus livros da Gibson e arrume isso! :)
prasanthv

1
npmjs.com/package/npm-collect faz exatamente isso e muito mais
coderofsalvation

Respostas:


601

O arquivo package.json é usado pelo npm para aprender sobre seu projeto node.js.

Usar npm init para gerar arquivos package.json para você!

Ele vem com o npm. Leia a documentação aqui: https://docs.npmjs.com/cli/init

Além disso, há uma ferramenta oficial que você pode usar para gerar esse arquivo programaticamente: https://github.com/npm/init-package-json


9
Obrigado npm initfoi exatamente o que eu estava procurando! Também depois que eu costumo correr npm shrinkwrappara criar um npm-shrinkwrap.jsonarquivo
Jasdeep Khalsa

75
Por npm init: use npm install <pkg> --saveposteriormente para instalar um pacote e salve-o como uma dependência no arquivo package.json.
Brad Koch

5
Após a execução npm initno Console do Gerenciador de Pacotes do Visual Studio 2015, ele é exibido [...] Press ^C at any time to quit.e interrompido sem perguntar nada ou criar o arquivo json. Estou esquecendo de algo?
Michael Hilus 4/15

2
npmjs.com/package/npm-collect permite recolher todos os módulos já instalados
coderofsalvation

3
npm init --force --yesé o único liner para que este arquivo seja gerado
Bernhard Döbler

204

Primeiro, corra

npm init

... fará algumas perguntas ( leia isso primeiro ) sobre seu projeto / pacote e, em seguida, gerará um arquivo package.json para você.

Depois de ter um arquivo package.json, use

npm install <pkg> --save

ou

npm install <pkg> --save-dev

... para instalar uma dependência e anexá-lo automaticamente para o seu package.json's dependencieslista.

(Nota: pode ser necessário ajustar manualmente os intervalos de versão para suas dependências.)


6
parece que não cria o package.json agora. win7x64 node0.10.9
atian25

33
Eu realmente não gosto de ter toda a minha resposta, exceto uma linha, reescrita e ainda assim atribuída a mim. Independentemente de estar desatualizado ou não.
Nzondlo 29/07

A documentação específica sobre o npm init está aqui
shmim

1
Essa deve ser a resposta correta. Você nem sempre precisa tocar manualmente package.json, geralmente é tratado automaticamente.
Sallar

1
--savenão é mais necessário em versões mais recentes do MPN
David Callanan

180

Acabei de escrever um script simples para coletar as dependências em ./node_modules. Cumpre minha exigência no momento. Isso pode ajudar alguns outros, eu posto aqui.

var fs = require("fs");

function main() {
  fs.readdir("./node_modules", function (err, dirs) {
    if (err) {
      console.log(err);
      return;
    }
    dirs.forEach(function(dir){
      if (dir.indexOf(".") !== 0) {
        var packageJsonFile = "./node_modules/" + dir + "/package.json";
        if (fs.existsSync(packageJsonFile)) {
          fs.readFile(packageJsonFile, function (err, data) {
            if (err) {
              console.log(err);
            }
            else {
              var json = JSON.parse(data);
              console.log('"'+json.name+'": "' + json.version + '",');
            }
          });
        }
      }
    });

  });
}

main();

No meu caso, o script acima gera:

"colors": "0.6.0-1",
"commander": "1.0.5",
"htmlparser": "1.7.6",
"optimist": "0.3.5",
"progress": "0.1.0",
"request": "2.11.4",
"soupselect": "0.2.0",   // Remember: remove the comma character in the last line.

Agora, você pode copiá-los e colá-los. Diverta-se!


39
você deve publicar este como um módulo npm
Ben

Agora, o que você faz quando recebe 770 linhas de volta ..? Eu tenho apenas 58 no package.json, incluindo devDependencies: - /
Sherzod

3
Note-se que built-in npm ls --depth=0irá imprimir mais ou menos o mesmo (não sei se foi o caso em 2012, embora)
jakub.g

3
Esta não é uma maneira correta de lidar com isso. Isso produzirá todas as dependências em todos os módulos. Então, se o seu pacote precisa pacote a, eo pacote aprecisa de pacotes be c, esta saída vontade roteiro todos os níveis, por isso a, b, cque é não correta. Só deve produzir a, os subpacotes serão resolvidos automaticamente.
Sallar

Sou eu, ou parece que a maioria das respostas está assumindo que você não está iniciando em um sistema existente em que os node_modules foram copiados ou construídos à mão? Há momentos em que me é entregue uma pasta do projeto, com módulos particulares, e não tenho acesso ao repositório. Ainda quero automatizar a recriação do projeto depois de colocar os módulos no MEU repositório. Ou talvez me disseram para 'apenas copiar esta pasta node_modules'. sim, sim, práticas recomendadas, mas trato da realidade dos desenvolvedores que podem não saber o que estão fazendo. Isso me ajuda a começar a endireitar esse projeto. Obrigado por compartilhar!
noelhx

82

npm init

para criar o arquivo package.json e, em seguida, você usa

ls node_modules/ | xargs npm install --save

para preencher os módulos que você possui na pasta node_modules.

Edit: @paldepind apontou que o segundo comando é redundante porque npm initagora adiciona automaticamente o que você tem na pasta node_modules /. Não sei se esse sempre foi o caso, mas agora, pelo menos, funciona sem o segundo comando.


5
Isso é extremamente útil se você não estava usando o --save para todos os módulos instalados.

7
Eu descobri que npm inithavia adicionado automaticamente dependências com base nos pacotes instalados e que não havia necessidade de executar o segundo comando.
paldepind

Estou tão feliz que você pode depender dos nomes das pastas node_modules dessa maneira ... ufa!
DT Rush

Isso também é fantasticamente útil ao usar npm dedupe, que extrai as dependências compartilhadas entre seus módulos e armazena-as no nível superior do node_modulesdiretório. Mas não toca package.json! Com isso, você pode confirmar e compartilhar sua configuração deduplicada.
Pathogen

1
Ótima resposta para quem adiciona package.json após o fato.
Carrie Kendall

24

Linha de comando :

npm init

criará o arquivo package.json

Para instalar, atualizar e desinstalar pacotes sob dependências no arquivo package.json:

Linha de comando :

npm install <pkg>@* --save 

adicionará automaticamente a versão mais recente do pacote em dependências ao arquivo package.json

EX:

npm install node-markdown@* --save

Linha de comando :

npm install <pkg> --save

também adicionará automaticamente a versão mais recente do pacote em dependências ao arquivo package.json

se você precisar de uma versão específica para um pacote, use esta linha de comando :

npm install <pkg>@<version> --save

adicionará automaticamente uma versão específica do pacote sob dependências ao arquivo package.json

EX:

npm install koa-views@1.0.0 --save

se você precisar de um intervalo específico de versão para um pacote, use esta linha de comando :

npm install <pkg>@<version range>

adicionará automaticamente a versão mais recente do pacote entre o intervalo de versões em dependências no arquivo package.json

EX:

npm install koa-views@">1.0.0 <1.2.0" --save

Para mais detalhes sobre como escrever a versão para o pacote npm Doc

Linha de comando :

npm update --save

atualizará os pacotes no arquivo package.json e adicionará automaticamente a versão atualizada de todos os pacotes sob dependências ao arquivo package.json

Linha de comando :

npm uninstall <pkg> --save

removerá automaticamente o pacote das dependências para o arquivo package.json e removerá o pacote da pasta node_module


14

Correr npm init -yfaz o seu package.jsoncom todos os padrões.
Você pode mudar de package.jsonacordo.
Isso economiza tempo várias vezes, impedindo a pressão enterde todos os comandosnpm init


6

Agora você pode usar o Yeoman - Modern Web App Scaffolding Tool no terminal do nó usando 3 etapas fáceis.

Primeiro, você precisará instalar o yo e outras ferramentas necessárias:

$ npm install -g yo bower grunt-cli gulp

Para estruturar um aplicativo Web, instale o gerador generator-webapp :

$ npm install -g generator-webapp  // create scaffolding 

Execute yo e ... está tudo pronto:

$ yo webapp  // create scaffolding 

A Yeoman pode escrever um código padrão para todo o seu aplicativo da Web ou Controladores e modelos. Ele pode iniciar um servidor da Web de visualização ao vivo para edições e compilação; não apenas que você também pode executar seus testes de unidade, minimizar e concatenar seu código, otimizar imagens e muito mais ...

Yeoman (yo) - ferramenta de andaime que oferece um ecossistema de andaimes específicos da estrutura, chamados geradores, que podem ser usados ​​para executar algumas das tarefas tediosas mencionadas anteriormente.

Grunt / gulp - usado para criar, visualizar e testar seu projeto.

Bower - é usado para gerenciamento de dependências, para que você não precise mais baixar manualmente suas bibliotecas front-end.


5

Com base na resposta do Pylinux, abaixo está uma solução para o sistema operacional Windows,

dir node_modules > abc.txt
FOR /F %k in (abc.txt) DO npm install --save

Espero que ajude.


Você também pode digitar npm install na parte superior do abc.txt e na parte inferior --save com remove new link funcionará mesmo.
Roni

Observe que, embora útil, isso pode instalar as versões incorretas dos pacotes NPM, o que pode causar a falha do aplicativo.
jarmod

1

use o comando npm init -f para gerar o arquivo package.json e depois use --save após cada comando para que cada módulo seja atualizado automaticamente dentro do seu package.json para ex: npm install express --save


0

1. Escolha

Se você git e usuário do GitHub:

    generate-packagemais simplesmente do que npm init.

outro

e / ou você não gosta de package.jsonmodelo, que gera pacote ou npm initgera:

    você pode gerar seu próprio modelo por meio de aplicativos de andaimes como gerar , velas ou yeoman .


2. Relevância

Esta resposta é relevante para março de 2018. No futuro, os dados desta resposta podem estar obsoletos.

O autor desta resposta usou pessoalmente o pacote generate em março de 2018.


3. Limitações

Você precisa usar o git e o GitHub para usar o generate-package.


4. Demonstração

Por exemplo, eu crio uma pasta em branco sasha-npm-init-vs-generate-package.

4.1 generate-package

Comando:

D:\SashaDemoRepositories\sasha-npm-init-vs-generate-package>gen package
[16:58:52] starting generate
[16:59:01]  running tasks: [ 'package' ]
[16:59:04] starting package
? Project description? generate-package demo
? Author's name? Sasha Chernykh
? Author's URL? https://vk.com/hair_in_the_wind
[17:00:19] finished package  1m

package.json:

{
  "name": "sasha-npm-init-vs-generate-package",
  "description": "generate-package demo",
  "version": "0.1.0",
  "homepage": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package",
  "author": "Sasha Chernykh (https://vk.com/hair_in_the_wind)",
  "repository": "Kristinita/sasha-npm-init-vs-generate-package",
  "bugs": {
    "url": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package/issues"
  },
  "license": "MIT",
  "engines": {
    "node": ">=4"
  },
  "scripts": {
    "test": "mocha"
  },
  "keywords": [
    "generate",
    "init",
    "npm",
    "package",
    "sasha",
    "vs"
  ]
}

4.2 npm init

D:\SashaDemoRepositories\sasha-npm-init-vs-generate-package>npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (sasha-npm-init-vs-generate-package)
version: (1.0.0) 0.1.0
description: npm init demo
entry point: (index.js)
test command: mocha
git repository: https://github.com/Kristinita/sasha-npm-init-vs-generate-package
keywords: generate, package, npm, package, sasha, vs
author: Sasha Chernykh
license: (ISC) MIT
About to write to D:\SashaDemoRepositories\sasha-npm-init-vs-generate-package\package.json:

{
  "name": "sasha-npm-init-vs-generate-package",
  "version": "0.1.0",
  "description": "npm init demo",
  "main": "index.js",
  "scripts": {
    "test": "mocha"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/Kristinita/sasha-npm-init-vs-generate-package.git"
  },
  "keywords": [
    "generate",
    "package",
    "npm",
    "package",
    "sasha",
    "vs"
  ],
  "author": "Sasha Chernykh",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package/issues"
  },
  "homepage": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package#readme"
}


Is this ok? (yes) y
{
  "name": "sasha-npm-init-vs-generate-package",
  "version": "0.1.0",
  "description": "npm init demo",
  "main": "index.js",
  "scripts": {
    "test": "mocha"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/Kristinita/sasha-npm-init-vs-generate-package.git"
  },
  "keywords": [
    "generate",
    "package",
    "npm",
    "package",
    "sasha",
    "vs"
  ],
  "author": "Sasha Chernykh",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package/issues"
  },
  "homepage": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package#readme"
}

Eu acho que, generate-packagemais simplesmente, isso npm init.


5. Customizando

Que criar o seu próprio package.jsonmodelo, consulte gerar e Yeoman exemplos.

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.