Apakah ada cara untuk secara otomatis membangun file package.json untuk proyek Node.js

412

Apakah package.json seharusnya diedit secara manual? Tidak bisakah program seperti npm hanya melihat melalui file, melihat pernyataan "memerlukan", dan kemudian menggunakannya untuk meletakkan entri yang diperlukan dalam file package.json? Apakah ada program seperti itu?

ahli saraf
sumber
2
sampai sekarang, saya mengedit file dengan tangan: menambahkan setiap paket (dan versi min.) yang saya butuhkan. kemudian jalankannpm link
pkyeck
22
@neuromancer dapatkah Anda menerima jawaban yang benar ? Ini jelas satu dengan 38+ suara ...
Esteban
2
npmjs.org/doc/install.html , ini juga dapat digunakan untuk memperbarui package.json secara otomatis saat menginstal paket baru
V31
1
@neromancer, letakkan buku Gibson Anda dan perbaiki ini! :)
prasanthv
1
npmjs.com/package/npm-collect melakukan ini dan lebih
tepatnya

Jawaban:

601

File package.json digunakan oleh npm untuk mempelajari tentang proyek node.js Anda.

Gunakan npm inituntuk menghasilkan file package.json untuk Anda!

Muncul dibundel dengan npm. Baca dokumentasinya di sini: https://docs.npmjs.com/cli/init

Juga, ada alat resmi yang dapat Anda gunakan untuk membuat file ini secara terprogram: https://github.com/npm/init-package-json

Ore4444
sumber
9
Terima kasih npm inithanya apa yang saya cari! Juga setelah itu saya biasanya menjalankan npm shrinkwrapuntuk membuat npm-shrinkwrap.jsonfile
Jasdeep Khalsa
75
Per npm init: Gunakan npm install <pkg> --savesesudahnya untuk menginstal paket dan menyimpannya sebagai dependensi dalam file package.json.
Brad Koch
5
Setelah berjalan npm initdi Package Manager Console dari Visual Studio 2015, itu hanya menampilkan [...] Press ^C at any time to quit.dan berhenti tanpa meminta apa pun atau membuat file json. Apakah saya melewatkan sesuatu?
Michael Hilus
2
npmjs.com/package/npm-collect memungkinkan Anda mengumpulkan modul apa pun yang sudah diinstal
coderofsalvation
3
npm init --force --yesadalah
pelaut yang
204

Pertama, lari

npm init

... akan menanyakan beberapa pertanyaan ( baca ini dulu ) tentang proyek / paket Anda dan kemudian buat file package.json untuk Anda.

Kemudian, setelah Anda memiliki file package.json, gunakan

npm install <pkg> --save

atau

npm install <pkg> --save-dev

... untuk menginstal ketergantungan dan secara otomatis menambahkan ke Anda package.json's dependenciesdaftar.

(Catatan: Anda mungkin perlu mengubah rentang versi secara manual untuk dependensi Anda.)

nzondlo
sumber
6
sepertinya tidak membuat package.json sekarang. win7x64 node0.10.9
atian25
33
Saya tidak benar-benar menghargai memiliki keseluruhan jawaban saya, menabung untuk satu baris, ditulis ulang dan masih dikaitkan dengan saya. Terlepas dari apakah itu sudah ketinggalan zaman.
nzondlo
Dokumentasi khusus tentang npm init ada di sini
shmim
1
Ini harus jawaban yang benar. Anda tidak selalu perlu menyentuh secara manual package.json, biasanya ditangani secara otomatis.
Sallar
1
--savetidak lagi diperlukan dalam versi npm yang lebih baru
David Callanan
180

Saya baru saja menulis skrip sederhana untuk mengumpulkan dependensi di ./node_modules. Itu memenuhi kebutuhan saya saat ini. Ini mungkin membantu beberapa orang lain, saya mempostingnya di sini.

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

Dalam kasus saya, skrip di atas menghasilkan:

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

Sekarang, Anda dapat menyalin & menempelkannya. Selamat bersenang-senang!

douyw
sumber
39
Anda harus menerbitkan ini sebagai modul npm
Ben
sekarang apa yang Anda lakukan ketika Anda mendapatkan 770 baris kembali ..? Saya hanya punya 58 di package.json termasuk devDependencies: - /
Sherzod
3
Perhatikan bahwa built-in npm ls --depth=0akan mencetak kurang lebih sama (tidak yakin apakah itu yang terjadi pada 2012)
jakub.g
3
Ini bukan cara yang benar untuk menangani ini. Ini akan menampilkan setiap ketergantungan pada setiap modul. Jadi jika paket Anda membutuhkan paket a, dan paket akebutuhan paket bdan c, naskah ini akan menampilkan semua tingkatan, sehingga a, b, cyang tidak benar. Seharusnya hanya menampilkan a, sub-paket akan secara otomatis diselesaikan.
Sallar
Apakah ini saya, atau sepertinya sebagian besar jawaban mengasumsikan bahwa Anda tidak memulai dari sistem yang ada di mana node_modules disalin atau dibangun dengan tangan? Ada saat-saat ketika saya diberikan folder proyek, dengan modul pribadi di dalamnya dan saya tidak memiliki akses ke repositori. Saya masih ingin mengotomatiskan membuat ulang proyek begitu saya meletakkan modul di repositori MY. Atau mungkin saya diberitahu untuk 'hanya menyalin folder node_modules ini'. ya, ya, praktik terbaik, tetapi saya berurusan dengan realitas para devs yang mungkin tidak tahu apa yang mereka lakukan. Ini membantu saya mulai meluruskan proyek semacam itu. Terima kasih telah berbagi!
noelhx
82

npm init

untuk membuat file package.json dan kemudian Anda gunakan

ls node_modules/ | xargs npm install --save

untuk mengisi modul yang Anda miliki di folder node_modules.

Sunting: @paldepind menunjukkan bahwa perintah kedua berlebihan karena npm initsekarang secara otomatis menambahkan apa yang Anda miliki di node_modules / folder Anda. Saya tidak tahu apakah ini selalu terjadi, tetapi sekarang setidaknya, ia bekerja tanpa perintah kedua.

Pylinux
sumber
5
Ini sangat membantu jika Anda tidak menggunakan --save untuk setiap modul yang Anda instal.
7
Saya menemukan bahwa npm initsecara otomatis menambahkan dependensi berdasarkan paket yang diinstal dan tidak perlu menjalankan perintah kedua.
paldepind
Saya sangat senang bahwa Anda dapat bergantung pada nama folder node_modules dengan cara ini ... Fiuh!
DT Rush
Ini juga sangat berguna saat menggunakan npm dedupe, yang menarik dependensi yang dibagikan di antara modul Anda dari modul-modul itu dan menyimpannya di tingkat teratas node_modulesdirektori Anda . Tapi itu tidak menyentuh package.json! Dengan ini, Anda dapat mengkomit dan membagikan setup deduplicated Anda.
Pathogen
1
Jawaban yang bagus untuk siapa pun yang menambahkan package.json setelah fakta.
Carrie Kendall
24

Baris perintah :

npm init

akan membuat file package.json

Untuk menginstal, memperbarui dan menghapus instalasi paket di bawah dependensi ke file package.json:

Baris perintah :

npm install <pkg>@* --save 

akan secara otomatis menambahkan versi terbaru untuk paket di bawah dependensi ke dalam file package.json

EX:

npm install node-markdown@* --save

Baris perintah :

npm install <pkg> --save

juga akan secara otomatis menambahkan versi terbaru untuk paket di bawah dependensi ke dalam file package.json

jika Anda memerlukan versi spesifik untuk suatu paket, gunakan baris perintah ini :

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

akan secara otomatis menambahkan versi spesifik paket di bawah dependensi ke dalam file package.json

EX:

npm install koa-views@1.0.0 --save

jika Anda memerlukan rentang versi tertentu untuk suatu paket, gunakan baris perintah ini :

npm install <pkg>@<version range>

akan secara otomatis menambahkan versi terbaru untuk paket antara rentang versi di bawah dependensi ke dalam file package.json

EX:

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

Untuk detail lebih lanjut tentang cara menulis versi untuk paket npm Doc

Baris perintah :

npm update --save

akan memperbarui paket ke file package.json dan secara otomatis akan menambahkan versi yang diperbarui untuk semua paket di bawah dependensi ke dalam file package.json

Baris perintah :

npm uninstall <pkg> --save

akan secara otomatis menghapus paket dari dependensi ke file package.json dan menghapus paket dari folder node_module

hammed ahmed
sumber
14

Menjalankan npm init -ymembuat Anda package.jsondengan semua default.
Anda kemudian dapat mengubah package.jsonsesuai
ini menghemat waktu banyak kali dengan mencegah menekan enterpada setiap perintah dalamnpm init

Abhinav Singi
sumber
6

Sekarang Anda dapat menggunakan Yeoman - Alat Perancah Aplikasi Web Modern pada terminal simpul menggunakan 3 langkah mudah.

Pertama, Anda harus menginstal yo dan alat lain yang diperlukan:

$ npm install -g yo bower grunt-cli gulp

Untuk merancah aplikasi web, instal generator-webapp generator:

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

Jalankan yo dan ... Anda semua selesai:

$ yo webapp  // create scaffolding 

Yeoman dapat menulis kode boilerplate untuk seluruh aplikasi web Anda atau Pengontrol dan Model. Ini dapat menjalankan server web pratinjau langsung untuk diedit dan dikompilasi; tidak hanya itu Anda juga dapat menjalankan tes unit Anda, meminimalkan dan menggabungkan kode Anda, mengoptimalkan gambar, dan banyak lagi ...

Yeoman (yo) - alat perancah yang menawarkan ekosistem kerangka kerja khusus, yang disebut generator, yang dapat digunakan untuk melakukan beberapa tugas membosankan yang disebutkan sebelumnya.

Grunt / tegukan - digunakan untuk membangun, melihat pratinjau, dan menguji proyek Anda.

Bower - digunakan untuk manajemen dependensi, sehingga Anda tidak perlu lagi mengunduh perpustakaan front-end Anda secara manual.

Adesh M
sumber
5

Berdasarkan jawaban Pylinux, di bawah ini adalah solusi untuk OS Windows,

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

Semoga ini bisa membantu.

Anmol Saraf
sumber
Anda bisa mengetikkan instalasi npm di atas abc.txt dan di bagian bawah - simpan dengan menghapus tautan baru akan berfungsi bahkan.
Roni
Perhatikan bahwa, meskipun bermanfaat, ini dapat menginstal versi yang salah dari paket NPM, yang dapat menyebabkan aplikasi gagal.
jarmod
1

gunakan perintah npm init -f untuk menghasilkan file package.json dan setelah itu gunakan --simpan setelah setiap perintah sehingga setiap modul secara otomatis akan diperbarui di dalam package.json Anda misalnya: npm install express --save

Nitin Nodiyal
sumber
0

1. Pilihan

Jika Anda pengguna git dan GitHub:

    generate-packagelebih sederhana, daripada npm init.

lain

dan / atau Anda tidak suka package.jsontemplate, yang menghasilkan paket atau npm initmenghasilkan:

    Anda dapat membuat templat sendiri melalui aplikasi perancah seperti menghasilkan , layar atau yeoman .


2. Relevansi

Jawaban ini relevan untuk Maret 2018. Di masa mendatang, data dari jawaban ini mungkin sudah usang.

Penulis jawaban ini secara pribadi menggunakan paket-menghasilkan pada Maret 2018.


3. Keterbatasan

Anda perlu menggunakan git dan GitHub untuk menggunakan paket-generate.


4. Demonstrasi

Sebagai contoh, saya membuat folder kosong sasha-npm-init-vs-generate-package.

4.1. menghasilkan-paket

Perintah:

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

Saya pikir, itu generate-packagelebih sederhana, itu npm init.


5. Menyesuaikan

Itu membuat package.jsontemplate Anda sendiri , lihat menghasilkan dan contoh yeoman .

Саша Черных
sumber