¿Hay alguna manera de generar automáticamente el archivo package.json para proyectos Node.js

412

¿Se supone que package.json se edita manualmente? ¿No podría un programa como npm simplemente mirar a través de los archivos, ver las declaraciones "require" y luego usar eso para colocar las entradas necesarias en el archivo package.json? ¿Hay algún programa como ese?

neuromante
fuente
2
Hasta ahora, edité el archivo a mano: agregando todos los paquetes (y la versión mínima) que necesito. luego correnpm link
pkyeck
22
@neuromancer, ¿podría aceptar la respuesta correcta ? Es claramente el que tiene más de 38 votos ...
Esteban
2
npmjs.org/doc/install.html , esto también se puede usar para actualizar automáticamente el package.json al instalar un nuevo paquete
V31
1
@neromancer, deja tus libros de Gibson y arregla esto. :)
prasanthv
1
npmjs.com/package/npm-collect hace exactamente esto y más
coderofsalvation

Respuestas:

601

Npm utiliza el archivo package.json para conocer su proyecto node.js.

Utilizar npm init para generar archivos package.json para usted!

Viene incluido con npm. Lea su documentación aquí: https://docs.npmjs.com/cli/init

Además, hay una herramienta oficial que puede usar para generar este archivo mediante programación: https://github.com/npm/init-package-json

Ore4444
fuente
99
¡Gracias npm initfue justo lo que estaba buscando! También después de eso, generalmente corro npm shrinkwrappara crear un npm-shrinkwrap.jsonarchivo
Jasdeep Khalsa
75
Por npm init: Use npm install <pkg> --savedespués para instalar un paquete y guárdelo como una dependencia en el archivo package.json.
Brad Koch
55
Después de ejecutarse npm initen Package Manager Console de Visual Studio 2015, simplemente se muestra [...] Press ^C at any time to quit.y se detiene sin preguntar nada ni crear el archivo json. ¿Me estoy perdiendo de algo?
Michael Hilus
2
npmjs.com/package/npm-collect le permite recopilar los módulos ya instalados
coderofsalvation
3
npm init --force --yeses el único revestimiento para generar este archivo
Bernhard Döbler
204

Primero, corre

npm init

... le hará algunas preguntas ( lea esto primero ) sobre su proyecto / paquete y luego generará un archivo package.json para usted.

Luego, una vez que tenga un archivo package.json, use

npm install <pkg> --save

o

npm install <pkg> --save-dev

... para instalar una dependencia y agregarla automáticamente a su package.json 's dependencieslista.

(Nota: es posible que deba ajustar manualmente los rangos de versión para sus dependencias).

nzondlo
fuente
66
parece que no crea package.json ahora. win7x64 node0.10.9
atian25
33
Realmente no aprecio tener la totalidad de mi respuesta, salvo por una línea, reescrita y aún atribuida a mí. Independientemente de si estaba desactualizado o no.
nzondlo
La documentación específica sobre npm init está aquí
shmim
1
Esta debe ser la respuesta correcta. No siempre necesita tocar manualmente package.json, generalmente se maneja automáticamente.
Sallar
1
--saveya no es necesario en las nuevas versiones de npm
David Callanan
180

Acabo de escribir un script simple para recopilar las dependencias en ./node_modules. Cumple mi requisito en este momento. Esto puede ayudar a otros, lo publico aquí.

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

En mi caso, el script anterior genera:

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

Ahora puedes copiarlos y pegarlos. ¡Que te diviertas!

douyw
fuente
39
deberías publicar esto como un módulo npm
Ben
ahora, ¿qué haces cuando recuperas 770 líneas ...? Solo tengo 58 en package.json incluyendo devDependencies: - /
Sherzod
3
Tenga en cuenta que una función de npm ls --depth=0imprimirá más o menos lo mismo (no estoy seguro si era el caso en 2012, aunque)
jakub.g
3
Esta no es una forma correcta de manejar esto. Esto generará cada dependencia en cada módulo. Así que si su paquete necesita el paquete a, y el paquete anecesita paquetes by c, esta es la salida de la escritura todos los niveles, por lo que a, b, cque es no correcta. Solo debería salir a, los subpaquetes se resolverán automáticamente.
Sallar
¿Soy yo, o parece que la mayoría de las respuestas suponen que no está comenzando desde un sistema existente donde los módulos_nodo se copiaron o construyeron a mano? Hay momentos en que se me entrega una carpeta de proyecto, con módulos privados y no tengo acceso al repositorio. Todavía quiero automatizar la recreación del proyecto una vez que coloque los módulos en MI repositorio. O tal vez me dicen que 'simplemente copie esta carpeta node_modules'. sí, sí, las mejores prácticas, pero trato con la realidad de los desarrolladores que podrían no saber lo que están haciendo. Esto me ayuda a comenzar a enderezar tal proyecto. ¡Gracias por compartir!
noelhx
82

npm init

para crear el archivo package.json y luego usas

ls node_modules/ | xargs npm install --save

para completar los módulos que tiene en la carpeta node_modules.

Editar: @paldepind señaló que el segundo comando es redundante porque npm initahora agrega automáticamente lo que tiene en su carpeta node_modules /. No sé si este siempre ha sido el caso, pero ahora al menos, funciona sin el segundo comando.

Pylinux
fuente
55
Esto es extremadamente útil si no estaba usando --save para cada módulo que instaló.
77
Descubrí que npm inithabía agregado automáticamente dependencias basadas en paquetes instalados y que no había necesidad de ejecutar el segundo comando.
paldepind
Estoy tan contento de que pueda depender de los nombres de carpeta node_modules de esta manera ... ¡uf!
DT Rush
Esto también es fantásticamente útil cuando se usa npm dedupe, que extrae las dependencias que se comparten entre sus módulos de esos módulos y las almacena en el nivel superior de su node_modulesdirectorio. ¡Pero no toca package.json! Con esto, puede confirmar y compartir su configuración deduplicada.
Patógeno
1
Gran respuesta para cualquiera que agregue package.json después del hecho.
Carrie Kendall el
24

Línea de comando :

npm init

creará el archivo package.json

Para instalar, actualizar y desinstalar paquetes bajo dependencias en el archivo package.json:

Línea de comando :

npm install <pkg>@* --save 

agregará automáticamente la última versión del paquete bajo dependencias en el archivo package.json

EX:

npm install node-markdown@* --save

Línea de comando :

npm install <pkg> --save

también agregará automáticamente la última versión del paquete bajo dependencias en el archivo package.json

Si necesita una versión específica para un paquete, use esta línea de comando :

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

agregará automáticamente una versión específica del paquete bajo dependencias en el archivo package.json

EX:

npm install koa-views@1.0.0 --save

Si necesita un rango específico de versión para un paquete, use esta línea de comando :

npm install <pkg>@<version range>

agregará automáticamente la última versión del paquete entre el rango de versiones bajo dependencias en el archivo package.json

EX:

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

Para más detalles sobre cómo escribir la versión para el paquete npm Doc

Línea de comando :

npm update --save

actualizará los paquetes en el archivo package.json y agregará automáticamente la versión actualizada para todos los paquetes bajo dependencias en el archivo package.json

Línea de comando :

npm uninstall <pkg> --save

eliminará automáticamente el paquete de las dependencias en el archivo package.json y eliminará el paquete de la carpeta node_module

Ahmed Hamdy
fuente
14

Correr te npm init -yhace package.jsoncon todos los valores predeterminados.
Luego puede cambiar en package.jsonconsecuencia
Esto ahorra tiempo muchas veces al evitar presionar entercada comando ennpm init

Abhinav Singi
fuente
6

Ahora puede usar Yeoman: herramienta de andamiaje de aplicación web moderna en el terminal de nodo mediante 3 sencillos pasos.

Primero, necesitará instalar yo y otras herramientas requeridas:

$ npm install -g yo bower grunt-cli gulp

Para andamiar una aplicación web, instale el generador generator-webapp :

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

Corre yo y ... ya terminaste:

$ yo webapp  // create scaffolding 

Yeoman puede escribir código repetitivo para toda su aplicación web o Controladores y Modelos. Puede iniciar un servidor web de vista previa en vivo para editar y compilar; no solo que también puede ejecutar sus pruebas unitarias, minimizar y concatenar su código, optimizar imágenes y más ...

Yeoman (yo) : herramienta de andamiaje que ofrece un ecosistema de andamios específicos del marco, llamados generadores, que se pueden utilizar para realizar algunas de las tareas tediosas mencionadas anteriormente.

Grunt / gulp : se usa para construir, previsualizar y probar su proyecto.

Bower : se utiliza para la administración de dependencias, de modo que ya no tenga que descargar manualmente sus bibliotecas front-end.

Adesh M
fuente
5

Según la respuesta de Pylinux, a continuación se muestra una solución para el sistema operativo Windows,

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

Espero eso ayude.

Anmol Saraf
fuente
O bien, puede escribir npm install en la parte superior de abc.txt y en la parte inferior: guardar con eliminar nuevo enlace funcionará de manera uniforme.
Roni
Tenga en cuenta que, si bien es útil, esto puede instalar versiones incorrectas de los paquetes de NPM, lo que puede provocar que la aplicación falle.
jarmod
1

use el comando npm init -f para generar el archivo package.json y luego use --save después de cada comando para que cada módulo se actualice automáticamente dentro de su package.json por ejemplo: npm install express --save

Nitin Nodiyal
fuente
0

1. Elección

Si git y usuario de GitHub:

    generate-package más simplemente que npm init .

más

y / o no le gusta la package.jsonplantilla, que genera-paquete onpm init genera:

    puede generar su propia plantilla a través de aplicaciones de andamios como generate , sails o yeoman .


2. Relevancia

Esta respuesta es relevante para marzo de 2018. En el futuro, los datos de esta respuesta pueden quedar obsoletos.

El autor de esta respuesta usó personalmente generate-package en marzo de 2018.


3. Limitaciones

Necesita usar git y GitHub para usar generate-package.


4. Demostración

Por ejemplo, creo una carpeta en blanco sasha-npm-init-vs-generate-package .

4.1. generar-paquete

Mando:

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

Creo que, generate-packagemás simplemente, eso npm init.


5. Personalización

Para crear su propia package.jsonplantilla, vea los ejemplos de generate y yeoman .

Саша Черных
fuente