Esiste un modo per creare automaticamente il file package.json per i progetti Node.js


412

Package.json dovrebbe essere modificato manualmente? Un programma come npm non potrebbe semplicemente guardare attraverso i file, vedere le istruzioni "request" e quindi usarlo per inserire le voci necessarie nel file package.json? Ci sono programmi del genere?


2
fino ad ora, ho modificato il file a mano: aggiungendo ogni pacchetto (e versione minima) di cui ho bisogno. poi corrinpm link
pkyeck il

22
@neuromancer potresti per favore accettare la risposta giusta ? È chiaramente quello con più di 38 voti ...
Esteban

2
npmjs.org/doc/install.html , questo può anche essere usato per aggiornare automaticamente package.json durante l'installazione di un nuovo pacchetto
V31

1
@neromancer, metti giù i tuoi libri di Gibson e correggi questo! :)
prasanthv,

1
npmjs.com/package/npm-collect fa esattamente questo e altro ancora
coderofsalvation

Risposte:


601

Il file package.json viene utilizzato da npm per informazioni sul progetto node.js.

Utilizzare npm initper generare file package.json per te!

Viene fornito in bundle con npm. Leggi la sua documentazione qui: https://docs.npmjs.com/cli/init

Inoltre, c'è uno strumento ufficiale che puoi usare per generare questo file a livello di codice: https://github.com/npm/init-package-json


9
Grazie npm initera proprio quello che stavo cercando! Inoltre, di solito corro npm shrinkwrapper creare un npm-shrinkwrap.jsonfile
Jasdeep Khalsa,

75
Per npm init: utilizzare npm install <pkg> --savesuccessivamente per installare un pacchetto e salvarlo come dipendenza nel file package.json.
Brad Koch,

5
Dopo essere stato eseguito npm initnella console di Package Manager da Visual Studio 2015, viene visualizzato [...] Press ^C at any time to quit.e interrotto senza chiedere nulla o creare il file json. Mi sto perdendo qualcosa?
Michael Hilus,

2
npmjs.com/package/npm-collect ti permette di raccogliere tutti i moduli già installati
coderofsalvation

3
npm init --force --yesè l'unico liner a generare questo file
Bernhard Döbler,

204

Prima di tutto, corri

npm init

... ti farà alcune domande ( leggi prima ) sul tuo progetto / pacchetto e quindi genera un file package.json per te.

Quindi, una volta che hai un file package.json, usa

npm install <pkg> --save

o

npm install <pkg> --save-dev

... installare una dipendenza e aggiungere automaticamente al tuo package.json's dependencieslista.

(Nota: potrebbe essere necessario modificare manualmente gli intervalli di versione per le proprie dipendenze.)


6
sembra che non crei package.json ora. nodo win7x640.10.9
atian25

33
Non apprezzo molto la totalità della mia risposta, salvo una riga, riscritta e ancora attribuita a me. Indipendentemente dal fatto che fosse obsoleto o meno.
nzondlo,

La documentazione specifica su npm init è qui
shmim,

1
Questa deve essere la risposta corretta. Non è sempre necessario toccarlo manualmente package.json, di solito viene gestito automaticamente.
Sallar,

1
--savenon è più necessario nelle versioni npm più recenti
David Callanan del

180

Ho appena scritto una semplice sceneggiatura per raccogliere le dipendenze in ./node_modules. Soddisfa le mie esigenze al momento. Questo può aiutare alcuni altri, lo pubblico qui.

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();

Nel mio caso, lo script precedente mostra:

"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.

Ora puoi copiarli e incollarli. Divertiti!


39
dovresti pubblicarlo come modulo npm
Ben

ora cosa fai quando ricevi 770 linee indietro? Ho solo 58 in package.json incluso devDependencies: - /
Sherzod

3
Si noti che la npm ls --depth=0stampa integrata sarà più o meno la stessa (non sono sicuro che fosse il caso nel 2012)
jakub.g

3
Questo non è un modo corretto di gestirlo. Questo produrrà ogni dipendenza in ogni modulo. Quindi, se il vostro pacchetto ha bisogno di pacchetto a, e il pacchetto aha bisogno di pacchetti be c, questa uscita volontà scritto tutti i livelli, così a, b, cche è non è corretto. Dovrebbe solo produrre a, i sotto-pacchetti verranno automaticamente risolti.
Sallar,

Sono io o sembra che la maggior parte delle risposte stia presupponendo che non si stia partendo da un sistema esistente in cui i node_modules sono stati copiati o costruiti a mano? Ci sono momenti in cui mi viene consegnata una cartella di progetto, con moduli privati ​​al suo interno e non ho accesso al repository. Voglio ancora automatizzare la ricostruzione del progetto dopo aver inserito i moduli nel mio repository. O forse mi viene detto di 'copiare questa cartella node_modules'. sì, sì, migliori pratiche, ma mi occupo della realtà degli sviluppatori che potrebbero non sapere cosa stanno facendo. Questo mi aiuta a iniziare a raddrizzare un simile progetto. Grazie per la condivisione!
Noelhx,

82

npm init

per creare il file package.json e quindi utilizzarlo

ls node_modules/ | xargs npm install --save

per compilare i moduli presenti nella cartella node_modules.

Modifica: @paldepind ha sottolineato che il secondo comando è ridondante perché npm initora aggiunge automaticamente ciò che hai nella cartella node_modules /. Non so se sia sempre stato così, ma ora almeno funziona senza il secondo comando.


5
Ciò è estremamente utile se non si utilizzava --save per ogni modulo installato.

7
Ho scoperto che npm initaveva aggiunto automaticamente dipendenze in base ai pacchetti installati e che non era necessario eseguire il secondo comando.
paldepind,

Sono così felice che tu possa dipendere dai nomi delle cartelle node_modules in questo modo ... accidenti!
DT Rush,

Questo è anche straordinariamente utile durante l'utilizzo npm dedupe, che estrae le dipendenze condivise tra i tuoi moduli da quei moduli e le memorizza al livello più alto della tua node_modulesdirectory. Ma non tocca package.json! Con questo, puoi eseguire il commit e condividere la tua configurazione deduplicata.
Pathogen,

1
Ottima risposta per chiunque aggiunga package.json dopo il fatto.
Carrie Kendall,

24

Riga di comando :

npm init

creerà il file package.json

Per installare, aggiornare e disinstallare i pacchetti sotto dipendenze nel file package.json:

Riga di comando :

npm install <pkg>@* --save 

aggiungerà automaticamente l'ultima versione per il pacchetto sotto dipendenze nel file package.json

EX:

npm install node-markdown@* --save

Riga di comando :

npm install <pkg> --save

inoltre aggiungerà automaticamente l'ultima versione per il pacchetto sotto dipendenze nel file package.json

se hai bisogno di una versione specifica per un pacchetto usa questa riga di comando :

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

aggiungerà automaticamente la versione specifica del pacchetto sotto dipendenze nel file package.json

EX:

npm install koa-views@1.0.0 --save

se è necessario un intervallo specifico di versione per un pacchetto, utilizzare questa riga di comando :

npm install <pkg>@<version range>

aggiungerà automaticamente l'ultima versione per il pacchetto tra l'intervallo di versioni in dipendenze nel file package.json

EX:

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

Per maggiori dettagli su come scrivere la versione per il pacchetto npm Doc

Riga di comando :

npm update --save

aggiornerà i pacchetti nel file package.json e aggiungerà automaticamente la versione aggiornata per tutti i pacchetti sotto dipendenze nel file package.json

Riga di comando :

npm uninstall <pkg> --save

rimuoverà automaticamente il pacchetto dalle dipendenze nel file package.json e rimuoverà il pacchetto dalla cartella node_module


14

Correre npm init -yrende package.jsontutti con le impostazioni predefinite.
È quindi possibile modificare di package.jsonconseguenza
Ciò consente di risparmiare tempo più volte impedendo di premere entersu ogni comando innpm init


6

Ora puoi utilizzare Yeoman - Modern Web App Scaffolding Tool sul terminale del nodo in 3 semplici passaggi.

Innanzitutto, dovrai installare yo e altri strumenti richiesti:

$ npm install -g yo bower grunt-cli gulp

Per impilare un'applicazione Web, installare il generatore generatore-webapp :

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

Corri yo e ... hai finito:

$ yo webapp  // create scaffolding 

Yeoman può scrivere il codice del boilerplate per l'intera applicazione Web o controller e modelli. Può avviare un server Web di anteprima dal vivo per le modifiche e la compilazione; non solo puoi anche eseguire i test unitari, ridurre al minimo e concatenare il codice, ottimizzare le immagini e altro ancora ...

Yeoman (yo) - strumento per impalcature che offre un ecosistema di impalcature specifiche per il framework, chiamati generatori, che possono essere utilizzati per eseguire alcuni dei noiosi compiti menzionati in precedenza.

Grunt / gulp : utilizzato per creare, visualizzare in anteprima e testare il progetto.

Bower : viene utilizzato per la gestione delle dipendenze, pertanto non è più necessario scaricare manualmente le librerie front-end.


5

Sulla base della risposta di Pylinux, di seguito è riportata una soluzione per il sistema operativo Windows,

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

Spero che sia d'aiuto.


In entrambi i casi, puoi semplicemente digitare npm install nella parte superiore di abc.txt e nella parte inferiore - salva con rimuovi nuovo collegamento funzionerà anche.
Roni,

Si noti che, sebbene utile, questo potrebbe installare versioni errate dei pacchetti NPM, che potrebbero causare il fallimento dell'app.
jarmod,

1

usa il comando npm init -f per generare il file package.json e successivamente usa --save dopo ogni comando in modo che ciascun modulo venga automaticamente aggiornato all'interno del tuo package.json per es: npm install express --save


0

1. Scelta

Se l' utente git e GitHub:

    generate-packagepiù semplicemente di npm init.

altro

e / o non ti piace il package.jsontemplate, che genera-pacchetto o npm initgenera:

    puoi generare il tuo modello tramite app di ponteggi come generate , vele o yeoman .


2. Rilevanza

Questa risposta è pertinente per marzo 2018. In futuro, i dati di questa risposta potrebbero essere obsoleti.

L'autore di questa risposta ha usato personalmente generate-package a marzo 2018.


3. Limitazioni

Devi usare git e GitHub per usare generate-package.


4. Dimostrazione

Ad esempio, creo una cartella vuota sasha-npm-init-vs-generate-package.

4.1. generare pacchetto

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"
}

Penso, generate-packagepiù semplicemente, quello npm init.


5. Personalizzazione

Che crea il tuo package.jsonmodello, vedi esempi generati e yeoman .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.