Gibt es eine Möglichkeit, die Datei package.json für Node.js-Projekte automatisch zu erstellen?

412

Soll package.json manuell bearbeitet werden? Könnte ein Programm wie npm nicht einfach die Dateien durchsuchen, die "require" -Anweisungen anzeigen und dann die erforderlichen Einträge in die Datei package.json einfügen? Gibt es solche Programme?

Neuromant
quelle
2
Bis jetzt habe ich die Datei von Hand bearbeitet: Ich habe jedes Paket (und jede Min-Version) hinzugefügt, die ich brauche. dann laufennpm link
pkyeck
22
@neuromancer Könnten Sie bitte die richtige Antwort akzeptieren ? Es ist eindeutig der mit 38+ Stimmen ...
Esteban
2
npmjs.org/doc/install.html , dies kann auch verwendet werden, um die package.json automatisch zu aktualisieren, während ein neues Paket installiert wird
V31
1
@neromancer, leg deine Gibson-Bücher weg und behebe das! :)
Prasanthv
1
npmjs.com/package/npm-collect macht genau dies und mehr
coderofsalvation

Antworten:

601

Die Datei package.json wird von npm verwendet , um mehr über Ihr node.js-Projekt zu erfahren.

Verwenden Sie npm initdiese Option, um package.json-Dateien für Sie zu generieren!

Es kommt mit npm gebündelt. Lesen Sie die Dokumentation hier: https://docs.npmjs.com/cli/init

Außerdem gibt es ein offizielles Tool, mit dem Sie diese Datei programmgesteuert generieren können: https://github.com/npm/init-package-json

Ore4444
quelle
9
Danke npm initwar genau das, wonach ich gesucht habe! Auch danach laufe ich normalerweise npm shrinkwrap, um eine npm-shrinkwrap.jsonDatei zu erstellen
Jasdeep Khalsa
75
Per npm init: Verwenden npm install <pkg> --saveSie diese Option anschließend, um ein Paket zu installieren und als Abhängigkeit in der Datei package.json zu speichern.
Brad Koch
5
Nach der Ausführung npm initin der Package Manager-Konsole von Visual Studio 2015 wird sie nur angezeigt [...] Press ^C at any time to quit.und gestoppt, ohne dass Sie etwas fragen oder die JSON-Datei erstellen müssen. Vermisse ich etwas
Michael Hilus
2
npmjs.com/package/npm-collect ermöglicht es Ihnen, bereits installierte Module zu sammeln
coderofsalvation
3
npm init --force --yesist der einzige Liner, der diese Datei generiert
Bernhard Döbler
204

Zuerst laufen

npm init

... wird Ihnen einige Fragen ( lesen Sie diese zuerst ) zu Ihrem Projekt / Paket stellen und dann eine package.json-Datei für Sie generieren.

Sobald Sie eine package.json-Datei haben, verwenden Sie

npm install <pkg> --save

oder

npm install <pkg> --save-dev

... eine Abhängigkeit zu installieren und automatisch hängen Sie ihn an Ihre package.json‚s dependenciesListe.

(Hinweis: Möglicherweise müssen Sie die Versionsbereiche für Ihre Abhängigkeiten manuell anpassen.)

nzondlo
quelle
6
Anscheinend erstellt es jetzt nicht package.json. win7x64 node0.10.9
atian25
33
Ich schätze es nicht wirklich, dass meine Antwort vollständig ist, abgesehen von einer Zeile, die neu geschrieben und mir immer noch zugeschrieben wird. Unabhängig davon, ob es veraltet war oder nicht.
Nzondlo
Die spezifische Dokumentation zu npm init ist hier
shmim
1
Dies muss die richtige Antwort sein. Sie müssen nicht immer manuell berühren package.json, es wird normalerweise automatisch behandelt.
Sallar
1
--saveist in neueren npm-Versionen nicht mehr erforderlich
David Callanan
180

Ich habe gerade ein einfaches Skript geschrieben, um die Abhängigkeiten in ./node_modules zu sammeln. Es erfüllt meine Anforderungen im Moment. Dies kann einigen anderen helfen, ich poste es hier.

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

In meinem Fall gibt das obige Skript Folgendes aus:

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

Jetzt können Sie sie kopieren und einfügen. Habe Spaß!

douyw
quelle
39
Sie sollten dies als npm-Modul veröffentlichen
Ben
Was machst du jetzt, wenn du 770 Zeilen zurück bekommst? Ich habe nur 58 in package.json einschließlich devDependencies: - /
Sherzod
3
Beachten Sie, dass die integrierte Funktion npm ls --depth=0mehr oder weniger gleich gedruckt wird (nicht sicher, ob dies 2012 der Fall war)
jakub.g
3
Dies ist kein korrekter Weg, um damit umzugehen. Dies gibt jede Abhängigkeit in jedem Modul aus. Also , wenn Ihr Paket benötigt Paket aund Paket abenötigt Pakete bund c, dieses Skript gibt alle Ebenen, so a, b, cdas ist nicht richtig. Es sollte nur ausgegeben werden a, die Unterpakete werden automatisch aufgelöst.
Sallar
Bin ich es oder scheinen die meisten Antworten davon auszugehen, dass Sie nicht von einem vorhandenen System ausgehen, in dem die node_modules von Hand kopiert oder erstellt wurden? Es gibt Zeiten, in denen mir ein Projektordner mit privaten Modulen übergeben wird und ich keinen Zugriff auf das Repository habe. Ich möchte die Neuerstellung des Projekts weiterhin automatisieren, sobald ich Module in MEIN Repository gestellt habe. Oder vielleicht wird mir gesagt, ich soll einfach diesen Ordner node_modules kopieren. Ja, ja, Best Practices, aber ich beschäftige mich mit der Realität von Entwicklern, die möglicherweise nicht wissen, was sie tun. Dies hilft mir, ein solches Projekt zu begradigen. Danke für das Teilen!
Noelhx
82

npm init

um die package.json Datei zu erstellen und dann verwenden Sie

ls node_modules/ | xargs npm install --save

um die Module auszufüllen, die Sie im Ordner node_modules haben.

Bearbeiten: @paldepind wies darauf hin, dass der zweite Befehl redundant ist, da npm initjetzt automatisch hinzugefügt wird, was Sie in Ihrem node_modules / Ordner haben. Ich weiß nicht, ob dies schon immer der Fall war, aber jetzt funktioniert es zumindest ohne den zweiten Befehl.

Pylinux
quelle
5
Dies ist äußerst hilfreich, wenn Sie nicht --save für jedes von Ihnen installierte Modul verwendet haben.
7
Ich stellte fest, dass npm initAbhängigkeiten basierend auf installierten Paketen automatisch hinzugefügt wurden und dass der zweite Befehl nicht ausgeführt werden musste.
Paldepind
Ich bin so froh, dass Sie sich auf diese Weise auf die Ordnernamen node_modules verlassen können ... puh!
DT Rush
Dies ist auch bei der Verwendung fantastisch nützlich. Dadurch werden npm dedupeAbhängigkeiten, die von Ihren Modulen gemeinsam genutzt werden, aus diesen Modulen entfernt und auf der obersten Ebene Ihres node_modulesVerzeichnisses gespeichert . Aber es berührt nicht package.json! Auf diese Weise können Sie Ihr dedupliziertes Setup festschreiben und freigeben.
Pathogen
1
Tolle Antwort für alle, die package.json nachträglich hinzufügen.
Carrie Kendall
24

Befehlszeile :

npm init

erstellt die Datei package.json

So installieren, aktualisieren und deinstallieren Sie Pakete unter Abhängigkeiten in der Datei package.json:

Befehlszeile :

npm install <pkg>@* --save 

fügt automatisch die neueste Version für das Paket unter Abhängigkeiten in die Datei package.json ein

EX:

npm install node-markdown@* --save

Befehlszeile :

npm install <pkg> --save

Außerdem wird automatisch die neueste Version für das Paket unter Abhängigkeiten in die Datei package.json eingefügt

Wenn Sie eine bestimmte Version für ein Paket benötigen, verwenden Sie diese Befehlszeile :

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

fügt automatisch eine bestimmte Version des Pakets unter Abhängigkeiten in die Datei package.json ein

EX:

npm install koa-views@1.0.0 --save

Wenn Sie einen bestimmten Versionsbereich für ein Paket benötigen, verwenden Sie diese Befehlszeile :

npm install <pkg>@<version range>

fügt automatisch die neueste Version für das Paket zwischen dem Versionsbereich unter Abhängigkeiten in die Datei package.json ein

EX:

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

Für weitere Informationen darüber , wie Version für Paket schreiben npm Doc

Befehlszeile :

npm update --save

aktualisiert Pakete in der Datei package.json und fügt automatisch eine aktualisierte Version für alle Pakete unter Abhängigkeiten in die Datei package.json ein

Befehlszeile :

npm uninstall <pkg> --save

Entfernt das Paket automatisch aus den Abhängigkeiten in die Datei package.json und entfernt das Paket aus dem Ordner node_module

ahmed hamdy
quelle
14

Laufen npm init -ymacht Sie package.jsonmit allen Standardeinstellungen.
Anschließend können Sie ändern package.jsondementsprechend
Dieses Mal viele Zeiten spart , indem Sie verhindern enterauf jeden Befehl innpm init

Abhinav Singi
quelle
6

Sie können das Yeoman - Modern Web App Scaffolding Tool jetzt in drei einfachen Schritten auf dem Knotenterminal verwenden.

Zuerst müssen Sie yo und andere erforderliche Tools installieren:

$ npm install -g yo bower grunt-cli gulp

Installieren Sie den Generator-Webapp- Generator , um eine Webanwendung zu erstellen :

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

Lauf yo und ... du bist fertig:

$ yo webapp  // create scaffolding 

Yeoman kann Boilerplate-Code für Ihre gesamte Webanwendung oder Controller und Modelle schreiben. Es kann einen Webserver mit Live-Vorschau zum Bearbeiten und Kompilieren starten. Sie können nicht nur Unit-Tests durchführen, Ihren Code minimieren und verketten, Bilder optimieren und vieles mehr ...

Yeoman (yo) - Gerüstwerkzeug, das ein Ökosystem von gerüstspezifischen Gerüsten bietet, die als Generatoren bezeichnet werden und zur Ausführung einiger der zuvor genannten mühsamen Aufgaben verwendet werden können.

Grunzen / Schlucken - wird verwendet, um Ihr Projekt zu erstellen, in der Vorschau anzuzeigen und zu testen.

Bower - wird für das Abhängigkeitsmanagement verwendet, sodass Sie Ihre Front-End-Bibliotheken nicht mehr manuell herunterladen müssen.

Adesh M.
quelle
5

Basierend auf der Antwort von Pylinux finden Sie unten eine Lösung für das Windows-Betriebssystem:

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

Ich hoffe es hilft.

Anmol Saraf
quelle
Entweder können Sie einfach npm install oben in abc.txt und unten eingeben - speichern mit neuem Link entfernen funktioniert sogar.
Roni
Beachten Sie, dass dies zwar hilfreich ist, jedoch möglicherweise die falschen Versionen der NPM-Pakete installiert, was dazu führen kann, dass die App fehlschlägt.
Jarmod
1

Verwenden Sie den Befehl npm init -f, um die Datei package.json zu generieren, und verwenden Sie danach --save nach jedem Befehl, damit jedes Modul automatisch in Ihrer package.json aktualisiert wird, z. B. npm install express --save

Nitin Nodiyal
quelle
0

1. Wahl

Wenn Sie Git und GitHub Benutzer:

    generate-packageeinfacher als npm init.

sonst

und / oder Sie mögen keine package.jsonVorlage, die ein Paket npm initgeneriert oder generiert:

    Sie können Ihre eigene Vorlage über Gerüst-Apps wie Generieren , Segeln oder Yeoman erstellen .


2. Relevanz

Diese Antwort ist für März 2018 relevant. In Zukunft sind die Daten aus dieser Antwort möglicherweise veraltet.

Der Autor dieser Antwort hat das Generate-Paket im März 2018 persönlich verwendet.


3. Einschränkungen

Sie müssen git und GitHub verwenden, um generate-package zu verwenden.


4. Demonstration

Zum Beispiel erstelle ich einen leeren Ordner sasha-npm-init-vs-generate-package.

4.1. Generate-Package

Befehl:

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

Ich denke, das generate-packageeinfacher, das npm init.


5. Customizing

Das erstellen Sie Ihre eigene package.jsonVorlage, siehe generieren und yeoman Beispiele.

Саша Черных
quelle