Czy istnieje sposób automatycznego budowania pliku package.json dla projektów Node.js

412

Czy pakiet.json ma być edytowany ręcznie? Czy program taki jak npm nie może po prostu przejrzeć plików, wyświetlić instrukcji „wymagają”, a następnie użyć ich do umieszczenia niezbędnych wpisów w pliku package.json? Czy są jakieś takie programy?

neuromancer
źródło
2
do tej pory edytowałem plik ręcznie: dodając każdy pakiet (i minimalną wersję), którego potrzebuję. następnie biegnijnpm link
pkyeck
22
@neuromancer, czy możesz zaakceptować prawidłową odpowiedź? To z pewnością ten, który ma ponad 38 głosów ...
Esteban
2
npmjs.org/doc/install.html , można go również użyć do automatycznej aktualizacji package.json podczas instalowania nowego pakietu
V31
1
@neromancer, odłóż książki Gibsona i napraw to! :)
prasanthv
1
npmjs.com/package/npm-collect robi dokładnie to i więcej
coderofsalvation

Odpowiedzi:

601

Plik package.json jest używany przez npm do poznania twojego projektu node.js.

Służy npm initdo generowania plików package.json dla Ciebie!

Jest dostarczany w pakiecie z npm. Przeczytaj dokumentację tutaj: https://docs.npmjs.com/cli/init

Istnieje również oficjalne narzędzie, którego można użyć do programowego wygenerowania tego pliku: https://github.com/npm/init-package-json

Ore4444
źródło
9
Dzięki npm initwłaśnie tego szukałem! Poza tym zwykle biegam, npm shrinkwrapaby utworzyć npm-shrinkwrap.jsonplik
Jasdeep Khalsa
75
Na npm init: Użyj npm install <pkg> --savepóźniej, aby zainstalować pakiet i zapisać go jako zależność w pliku package.json.
Brad Koch
5
Po uruchomieniu npm initw konsoli Menedżera pakietów z programu Visual Studio 2015 po prostu wyświetla [...] Press ^C at any time to quit.i zatrzymuje się, nie pytając o nic ani nie tworząc pliku json. Czy coś brakuje?
Michael Hilus,
2
npmjs.com/package/npm-collect umożliwia zebranie już zainstalowanych modułów
coderofsalvation
3
npm init --force --yesto jedyna linijka, która wygenerowała ten plik
Bernhard Döbler
204

Po pierwsze, biegnij

npm init

... zada Ci kilka pytań ( najpierw przeczytaj ) na temat twojego projektu / pakietu, a następnie wygeneruje dla Ciebie plik package.json.

Następnie, gdy masz plik package.json, użyj

npm install <pkg> --save

lub

npm install <pkg> --save-dev

... zainstalować zależność i automatycznie dołączyć go do swojej package.json„s dependencieslisty.

(Uwaga: Może być konieczne ręczne dostosowanie zakresów wersji dla zależności).

nzondlo
źródło
6
wygląda na to, że nie tworzy teraz package.json. węzeł win7x640.10.9
atian25
33
Nie bardzo doceniam to, że mam całą odpowiedź, z wyjątkiem wiersza, przepisanego i wciąż przypisywanego mi. Niezależnie od tego, czy był przestarzały.
nzondlo
Szczegółowa dokumentacja na temat npm init znajduje się tutaj
shmim
1
To musi być poprawna odpowiedź. Nie zawsze musisz dotykać ręcznie package.json, zwykle jest to obsługiwane automatycznie.
Sallar,
1
--savenie jest już konieczne w nowszych wersjach npm
David Callanan
180

Właśnie napisałem prosty skrypt do zbierania zależności w ./node_modules. W tej chwili spełnia moje wymagania. Może to pomóc niektórym innym, zamieszczam to tutaj.

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

W moim przypadku powyższy skrypt generuje:

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

Teraz możesz je skopiować i wkleić. Baw się dobrze!

douyw
źródło
39
powinieneś opublikować to jako moduł npm
Ben
co teraz robisz, gdy odzyskasz 770 linii ..? Mam tylko 58 w pakiecie.json, w tym devDependencies: - /
Sherzod
3
Pamiętaj, że wbudowany npm ls --depth=0wydrukuje mniej więcej to samo (nie jestem pewien, czy tak było w 2012 roku)
jakub.g
3
To nie jest właściwy sposób, aby sobie z tym poradzić. Spowoduje to wyświetlenie każdej zależności w każdym module. Jeśli tak, to pakiet potrzebuje pakietu a, a pakiet amusi pakiety bi cskrypt ten wyjście będzie wszystkie poziomy, tak a, b, cktóry jest nie poprawny. Powinien tylko wyświetlać a, paczki zostaną automatycznie rozwiązane.
Sallar,
Czy to ja, czy wydaje się, że większość odpowiedzi zakłada, że ​​nie zaczynasz od istniejącego systemu, w którym moduły_węzła zostały skopiowane lub zbudowane ręcznie? Są chwile, kiedy wręcza mi folder projektu, w którym znajdują się prywatne moduły i nie mam dostępu do repozytorium. Nadal chcę zautomatyzować odtwarzanie projektu po umieszczeniu modułów w MOIM repozytorium. A może powiedziano mi, że „po prostu skopiuj ten folder node_modules”. tak, tak, najlepsze praktyki, ale mam do czynienia z rzeczywistością deweloperów, którzy mogą nie wiedzieć, co robią. To pomaga mi zacząć prostować taki projekt. Dzięki za udostępnienie!
noelhx
82

npm init

aby utworzyć plik package.json, a następnie użyć

ls node_modules/ | xargs npm install --save

aby wypełnić moduły, które masz w folderze node_modules.

Edycja: @paldepind wskazał, że drugie polecenie jest zbędne, ponieważ npm initteraz automatycznie dodaje to, co masz w folderze node_modules /. Nie wiem, czy zawsze tak było, ale teraz przynajmniej działa bez drugiego polecenia.

Pylinux
źródło
5
Jest to niezwykle pomocne, jeśli nie używasz opcji --save dla każdego zainstalowanego modułu.
7
Odkryłem, że npm initautomatycznie dodałem zależności na podstawie zainstalowanych pakietów i że nie było potrzeby uruchamiania drugiego polecenia.
paldepind
Tak się cieszę, że możesz polegać na nazwach folderów node_modules w ten sposób ... uff!
DT Rush
Jest to również fantastycznie przydatne podczas używania npm dedupe, który wyciąga zależności, które są współużytkowane przez moduły z tych modułów i przechowuje je na najwyższym poziomie node_moduleskatalogu. Ale to nie dotyka package.json! Dzięki temu możesz zatwierdzać i udostępniać swoją deduplikowaną konfigurację.
Patogen
1
Świetna odpowiedź dla każdego, kto doda fakt Package.json po fakcie.
Carrie Kendall,
24

Wiersz poleceń :

npm init

utworzy plik package.json

Aby zainstalować, zaktualizować i odinstalować pakiety w zależności od pliku package.json:

Wiersz poleceń :

npm install <pkg>@* --save 

automatycznie doda najnowszą wersję pakietu pod zależnościami do pliku package.json

DAWNY:

npm install node-markdown@* --save

Wiersz poleceń :

npm install <pkg> --save

automatycznie doda również najnowszą wersję pakietu pod zależnościami do pliku package.json

jeśli potrzebujesz konkretnej wersji pakietu, użyj tego wiersza poleceń :

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

automatycznie doda określoną wersję pakietu w zależności od pliku do pliku package.json

DAWNY:

npm install koa-views@1.0.0 --save

jeśli potrzebujesz określonego zakresu wersji pakietu, użyj tego wiersza poleceń :

npm install <pkg>@<version range>

automatycznie doda najnowszą wersję pakietu między zakresem wersji w zależnościach do pliku package.json

DAWNY:

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

Aby uzyskać więcej informacji na temat pisania wersji dla pakietu npm Doc

Wiersz poleceń :

npm update --save

zaktualizuje pakiety do pliku package.json i automatycznie doda zaktualizowaną wersję dla wszystkich pakietów zależnych do pliku package.json

Wiersz poleceń :

npm uninstall <pkg> --save

automatycznie usunie pakiet z zależności do pliku package.json i usunie pakiet z folderu node_module

Ahmed Hamdy
źródło
14

Uruchamianie npm init -ysprawia, że ​​masz package.jsonwszystkie ustawienia domyślne.
Następnie możesz package.jsonodpowiednio zmienić.
To oszczędza czas wiele razy, uniemożliwiając naciśnięcie enterkażdego polecenia wnpm init

Abhinav Singi
źródło
6

Teraz możesz korzystać z narzędzia Yeoman - Nowoczesne narzędzie do rusztowania aplikacji sieci Web na terminalu węzłowym, wykonując 3 proste kroki.

Najpierw musisz zainstalować yo i inne wymagane narzędzia:

$ npm install -g yo bower grunt-cli gulp

Aby rusztować aplikację internetową, zainstaluj generator generator-webapp :

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

Uruchom i ... wszystko gotowe:

$ yo webapp  // create scaffolding 

Yeoman może napisać pełny kod dla całej aplikacji internetowej lub sterowników i modeli. Może uruchomić serwer WWW z podglądem na żywo w celu edycji i kompilacji; nie tylko możesz uruchamiać testy jednostkowe, minimalizować i konkatenować kod, optymalizować obrazy i więcej ...

Yeoman (yo) - narzędzie do rusztowań, które oferuje ekosystem rusztowań specyficznych dla ram, zwanych generatorami, które mogą być użyte do wykonania niektórych żmudnych zadań wspomnianych wcześniej.

Grunt / gulp - służy do budowania, podglądu i testowania projektu.

Bower - służy do zarządzania zależnościami, dzięki czemu nie trzeba już ręcznie pobierać bibliotek frontonu.

Adesh M.
źródło
5

Na podstawie odpowiedzi Pylinux poniżej znajduje się rozwiązanie dla systemu operacyjnego Windows,

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

Mam nadzieję, że to pomoże.

Anmol Saraf
źródło
Albo możesz po prostu wpisać npm install na górze abc.txt, a na dole - zapisz z usuń nowy link będzie działał nawet.
Roni
Pamiętaj, że chociaż może to pomóc, może to spowodować zainstalowanie niewłaściwych wersji pakietów NPM, co może spowodować awarię aplikacji.
jarmod
1

użyj polecenia npm init -f, aby wygenerować plik package.json, a następnie użyj --save po każdym poleceniu, aby każdy moduł był automatycznie aktualizowany w pakiecie.json na przykład: npm install express --save

Nitin Nodiyal
źródło
0

1. Wybór

Jeśli korzystasz z Git i GitHub:

    generate-packageprościej niż npm init.

jeszcze

i / lub nie podoba ci się package.jsonszablon, który generuje pakiet lub npm initgeneruje:

    możesz wygenerować własny szablon za pomocą aplikacji do rusztowań, takich jak generowanie , żagle lub szlachta .


2. Trafność

Ta odpowiedź dotyczy marca 2018 r. W przyszłości dane z tej odpowiedzi mogą być nieaktualne.

Autor tej odpowiedzi osobiście wykorzystał pakiet generujący w marcu 2018 r.


3. Ograniczenia

Do korzystania z pakietu-generatora potrzebujesz git i GitHub.


4. Demonstracja

Na przykład tworzę pusty folder sasha-npm-init-vs-generate-package.

4.1 pakiet generowania

Komenda:

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

Myślę, że generate-packageprościej, że npm init.


5. Dostosowywanie

Które tworzą własny package.jsonszablon, zobacz przykłady generowania i Yeoman .

Саша Черных
źródło