Existe-t-il un moyen de générer automatiquement le fichier package.json pour les projets Node.js

412

Package.json est-il censé être modifié manuellement? Un programme comme npm ne pourrait-il pas simplement parcourir les fichiers, voir les instructions "require", puis l'utiliser pour placer les entrées nécessaires dans le fichier package.json? Y a-t-il des programmes comme ça?

neuromancien
la source
2
jusqu'à présent, j'ai édité le fichier à la main: en ajoutant tous les packages (et versions min.) dont j'ai besoin. puis exécuteznpm link
pkyeck
22
@neuromancer pourriez-vous accepter la bonne réponse? C'est clairement celui avec 38+ votes ...
Esteban
2
npmjs.org/doc/install.html , cela peut également être utilisé pour mettre à jour automatiquement le package.json lors de l'installation d'un nouveau package
V31
1
@neromancer, posez vos livres Gibson et corrigez cela! :)
prasanthv
1
npmjs.com/package/npm-collect fait exactement cela et plus encore
coderofsalvation

Réponses:

601

Le fichier package.json est utilisé par npm pour en savoir plus sur votre projet node.js.

Utilisation npm init pour générer des fichiers package.json pour vous!

Il est fourni avec npm. Lisez sa documentation ici: https://docs.npmjs.com/cli/init

En outre, il existe un outil officiel que vous pouvez utiliser pour générer ce fichier par programme: https://github.com/npm/init-package-json

Ore4444
la source
9
Merci npm initétait exactement ce que je cherchais! Aussi après cela, je cours généralement npm shrinkwrappour créer un npm-shrinkwrap.jsonfichier
Jasdeep Khalsa
75
Par npm init: Utilisez npm install <pkg> --saveensuite pour installer un package et l'enregistrer en tant que dépendance dans le fichier package.json.
Brad Koch
5
Après avoir été exécuté npm initdans la console du gestionnaire de packages à partir de Visual Studio 2015, il s'affiche [...] Press ^C at any time to quit.et s'arrête sans rien demander ni créer le fichier json. Suis-je en train de manquer quelque chose?
Michael Hilus
2
npmjs.com/package/npm-collect vous permet de collecter tous les modules déjà installés
coderofsalvation
3
npm init --force --yesest le seul liner à avoir généré ce fichier
Bernhard Döbler
204

Tout d'abord, courez

npm init

... vous posera quelques questions ( lisez d'abord ) sur votre projet / package, puis générera un fichier package.json pour vous.

Ensuite, une fois que vous avez un fichier package.json, utilisez

npm install <pkg> --save

ou

npm install <pkg> --save-dev

... d'installer une dépendance et ajouter automatiquement à votre package.jsonde dependenciesliste.

(Remarque: vous devrez peut-être modifier manuellement les plages de versions pour vos dépendances.)

nzondlo
la source
6
semble qu'il ne crée pas package.json maintenant. win7x64 node0.10.9
atian25
33
Je n'apprécie pas vraiment d'avoir l'intégralité de ma réponse, sauf pour une ligne, réécrite et toujours attribuée à moi. Qu'il soit obsolète ou non.
nzondlo
La documentation spécifique sur npm init est ici
shmim
1
Ce doit être la bonne réponse. Vous n'avez pas toujours besoin de toucher manuellement package.json, il est généralement géré automatiquement.
Sallar
1
--saven'est plus nécessaire dans les nouvelles versions de npm
David Callanan
180

Je viens d'écrire un script simple pour collecter les dépendances dans ./node_modules. Cela répond à mes exigences pour le moment. Cela peut en aider d'autres, je le poste ici.

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

Dans mon cas, le script ci-dessus génère:

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

Maintenant, vous pouvez les copier-coller. S'amuser!

douyw
la source
39
vous devriez le publier en tant que module npm
Ben
maintenant que faites-vous quand vous récupérez 770 lignes ..? Je n'ai que 58 dans package.json, y compris devDependencies: - /
Sherzod
3
Notez que intégré npm ls --depth=0imprimera plus ou moins la même chose (je ne sais pas si c'était le cas en 2012)
jakub.g
3
Ce n'est pas une bonne façon de gérer cela. Cela produira chaque dépendance dans chaque module. Donc , si votre paquet a besoin paquet a, et le paquet a abesoin de programmes bet c, ce script va afficher tous les niveaux, donc a, b, ce cqui est pas correct. Il devrait seulement sortir a, les sous-paquets seront automatiquement résolus.
Sallar
Est-ce moi ou semble-t-il que la plupart des réponses supposent que vous ne partez pas d'un système existant où les node_modules ont été copiés ou construits à la main? Il y a des moments où on me remet un dossier de projet, avec des modules privés et je n'ai pas accès au référentiel. Je veux toujours automatiser la recréation du projet une fois que j'ai placé les modules dans MON référentiel. Ou peut-être me dit-on de «copier ce dossier node_modules». oui, oui, les meilleures pratiques, mais je m'occupe de la réalité des développeurs qui ne savent peut-être pas ce qu'ils font. Cela m'aide à commencer à redresser un tel projet. Merci d'avoir partagé!
noelhx
82

npm init

pour créer le fichier package.json, puis vous utilisez

ls node_modules/ | xargs npm install --save

pour remplir les modules que vous avez dans le dossier node_modules.

Edit: @paldepind a souligné que la deuxième commande est redondante car npm initajoute maintenant automatiquement ce que vous avez dans votre dossier node_modules /. Je ne sais pas si cela a toujours été le cas, mais maintenant au moins, cela fonctionne sans la deuxième commande.

Pylinux
la source
5
Ceci est extrêmement utile si vous n'utilisez pas --save pour chaque module que vous avez installé.
7
J'ai trouvé qu'il npm initavait automatiquement ajouté des dépendances basées sur les packages installés et qu'il n'était pas nécessaire d'exécuter la deuxième commande.
paldepind
Je suis tellement content que vous puissiez dépendre des noms de dossier node_modules de cette manière ... ouf!
DT Rush
Cela est également incroyablement utile lors de l'utilisation npm dedupe, ce qui extrait les dépendances partagées entre vos modules de ces modules et les stocke au niveau supérieur de votre node_modulesrépertoire. Mais ça ne touche pas package.json! Avec cela, vous pouvez valider et partager votre configuration dédupliquée.
Pathogène
1
Excellente réponse pour quiconque ajoute package.json après coup.
Carrie Kendall
24

Ligne de commande :

npm init

va créer le fichier package.json

Pour installer, mettre à jour et désinstaller des packages sous dépendances dans le fichier package.json:

Ligne de commande :

npm install <pkg>@* --save 

ajoutera automatiquement la dernière version du package sous dépendances dans le fichier package.json

EX:

npm install node-markdown@* --save

Ligne de commande :

npm install <pkg> --save

ajoutera également automatiquement la dernière version du package sous dépendances dans le fichier package.json

si vous avez besoin d'une version spécifique pour un package, utilisez cette ligne de commande :

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

ajoutera automatiquement une version spécifique du package sous les dépendances dans le fichier package.json

EX:

npm install koa-views@1.0.0 --save

si vous avez besoin d'une plage de version spécifique pour un package, utilisez cette ligne de commande :

npm install <pkg>@<version range>

ajoutera automatiquement la dernière version du package entre la plage de versions sous dépendances dans le fichier package.json

EX:

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

Pour plus de détails sur la façon d'écrire la version du package npm Doc

Ligne de commande :

npm update --save

mettra à jour les packages dans le fichier package.json et ajoutera automatiquement la version mise à jour pour tous les packages sous dépendances dans le fichier package.json

Ligne de commande :

npm uninstall <pkg> --save

supprimera automatiquement le package des dépendances dans le fichier package.json et supprimera le package du dossier node_module

ahmed hamdy
la source
14

La course npm init -yfait votre package.jsonavec tous les défauts.
Vous pouvez ensuite modifier en package.jsonconséquence
Cela permet de gagner du temps plusieurs fois en empêchant d'appuyer entersur chaque commande dansnpm init

Abhinav Singi
la source
6

Vous pouvez maintenant utiliser Yeoman - Outil d'échafaudage d'application Web moderne sur le terminal de noeud en 3 étapes simples.

Tout d'abord, vous devrez installer yo et les autres outils requis:

$ npm install -g yo bower grunt-cli gulp

Pour échafauder une application Web, installez le générateur Generator-Webapp :

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

Exécutez yo et ... vous avez terminé:

$ yo webapp  // create scaffolding 

Yeoman peut écrire du code passe-partout pour l'ensemble de votre application Web ou contrôleurs et modèles. Il peut lancer un serveur Web en direct pour les modifications et la compilation; vous pouvez non seulement exécuter vos tests unitaires, minimiser et concaténer votre code, optimiser les images, etc.

Yeoman (yo) - outil d'échafaudage qui offre un écosystème d'échafaudages spécifiques au framework, appelés générateurs, qui peuvent être utilisés pour effectuer certaines des tâches fastidieuses mentionnées précédemment.

Grunt / gulp - utilisé pour construire, prévisualiser et tester votre projet.

Bower - est utilisé pour la gestion des dépendances, afin que vous n'ayez plus à télécharger manuellement vos bibliothèques frontales.

Adesh M
la source
5

Basé sur la réponse de Pylinux, voici une solution pour Windows OS,

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

J'espère que cela aide.

Anmol Saraf
la source
Soit, vous pouvez simplement taper npm install en haut de abc.txt et en bas - enregistrer avec supprimer le nouveau lien fonctionnera même.
Roni
Notez que, bien qu'utile, cela peut installer les mauvaises versions des packages NPM, ce qui peut entraîner l'échec de l'application.
jarmod
1

utilisez la commande npm init -f pour générer le fichier package.json et ensuite utilisez --save après chaque commande afin que chaque module soit automatiquement mis à jour dans votre package.json pour ex: npm install express --save

Nitin Nodiyal
la source
0

1. Choix

Si vous git et utilisateur GitHub:

    generate-packageplus simplement que npm init.

autre

et / ou vous n'aimez pas le package.jsonmodèle, qui génère un package ou npm initgénère:

    vous pouvez générer votre propre modèle via des applications d'échafaudage comme générer , naviguer ou yeoman .


2. Pertinence

Cette réponse est pertinente pour mars 2018. À l'avenir, les données de cette réponse pourraient être obsolètes.

L'auteur de cette réponse a personnellement utilisé generate-package en mars 2018.


3. Limitations

Vous devez utiliser git et GitHub pour utiliser generate-package.


4. Démonstration

Par exemple, je crée un dossier vide sasha-npm-init-vs-generate-package.

4.1. générer-package

Commander:

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

Je pense que, generate-packageplus simplement, cela npm init.


5. Personnalisation

Cela crée votre propre package.jsonmodèle, voir des exemples de génération et yeoman .

Саша Черных
la source