มีวิธีสร้างไฟล์ package.json โดยอัตโนมัติสำหรับโครงการ Node.js หรือไม่


412

package.json ควรแก้ไขด้วยตนเองหรือไม่ โปรแกรมอย่าง npm ไม่สามารถมองผ่านไฟล์ดูคำสั่ง "ต้องการ" แล้วใช้มันเพื่อใส่รายการที่จำเป็นในไฟล์ package.json มีโปรแกรมใด ๆ เช่นนั้นหรือไม่?


2
จนถึงตอนนี้ฉันแก้ไขไฟล์ด้วยมือ: เพิ่มทุกแพ็คเกจ (และเวอร์ชันต่ำสุด) ฉันต้องการ เรียกใช้แล้วnpm link
pkyeck

22
@ neuromancer คุณช่วยตอบรับคำตอบที่ถูกต้องได้ไหม? เห็นได้ชัดว่าเป็นหนึ่งเดียวที่มีการโหวต 38+ ...
Esteban

2
npmjs.org/doc/install.htmlซึ่งสามารถใช้เพื่ออัปเดต package.json โดยอัตโนมัติในขณะที่ติดตั้งแพ็คเกจใหม่
V31

1
@neromancer วางหนังสือกิบสันของคุณและแก้ไขสิ่งนี้! :)
prasanthv

1
npmjs.com/package/npm-collectทำสิ่งนี้และอื่น ๆ อีกมากมาย
coderofsalvation

คำตอบ:


601

ไฟล์ package.json ถูกใช้โดยnpmเพื่อเรียนรู้เกี่ยวกับโปรเจ็กต์ node.js ของคุณ

ใช้npm initเพื่อสร้างไฟล์ package.json สำหรับคุณ!

มันมาพร้อมกับ npm อ่านเอกสารของที่นี่: https://docs.npmjs.com/cli/init

นอกจากนี้ยังมีเครื่องมืออย่างเป็นทางการที่คุณสามารถใช้เพื่อสร้างไฟล์นี้โดยทางโปรแกรม: https://github.com/npm/init-package-json


9
ขอบคุณnpm initเป็นสิ่งที่ฉันกำลังมองหา! หลังจากนั้นฉันมักจะเรียกใช้npm shrinkwrapเพื่อสร้างnpm-shrinkwrap.jsonไฟล์
Jasdeep Khalsa

75
ต่อnpm init: ใช้npm install <pkg> --saveหลังจากนั้นเพื่อติดตั้งแพ็กเกจและบันทึกเป็นการอ้างอิงในไฟล์ package.json
แบรดโคช์ส

5
หลังจากรันnpm initใน Package Manager Console จาก Visual Studio 2015 มันจะแสดง[...] Press ^C at any time to quit.และหยุดโดยไม่ถามอะไรเลยหรือสร้างไฟล์ json ฉันพลาดอะไรไปรึเปล่า?
Michael Hilus

2
npmjs.com/package/npm-collect ช่วยให้คุณสามารถรวบรวมโมดูลที่ติดตั้งแล้วใด ๆ
coderofsalvation

3
npm init --force --yesเป็นไฟล์เดียวที่สร้างไฟล์นี้
Bernhard Döbler

204

ก่อนอื่นให้เรียกใช้

npm init

... จะถามคำถามสองสามข้อ ( อ่านก่อนนี้ ) เกี่ยวกับโครงการ / แพ็คเกจของคุณจากนั้นสร้างไฟล์ package.json ให้คุณ

จากนั้นเมื่อคุณมีไฟล์ package.json ให้ใช้

npm install <pkg> --save

หรือ

npm install <pkg> --save-dev

... การติดตั้งการพึ่งพาและจะผนวกที่คุณpackage.json's dependenciesรายการ

(หมายเหตุ: คุณอาจต้องปรับแต่งช่วงรุ่นสำหรับการอ้างอิงของคุณด้วยตนเอง)


6
ดูเหมือนว่าจะไม่สร้าง package.json ในขณะนี้ win7x64 node0.10.9
atian25

33
ฉันไม่ซาบซึ้งจริง ๆ ที่มีคำตอบทั้งหมดของฉันบันทึกสำหรับบรรทัดเขียนใหม่และยังคงประกอบกับฉัน ไม่ว่าจะล้าสมัยหรือไม่ก็ตาม
nzondlo

เอกสารเฉพาะของ npm init อยู่ที่นี่แล้ว
shmim

1
นี่จะต้องเป็นคำตอบที่ถูกต้อง คุณไม่จำเป็นต้องสัมผัสด้วยตนเองเสมอpackage.jsonโดยปกติจะจัดการโดยอัตโนมัติ
Sallar

1
--saveไม่จำเป็นอีกต่อไปในเวอร์ชัน npm ที่ใหม่กว่า
David Callanan

180

ฉันเพิ่งเขียนสคริปต์ง่าย ๆ เพื่อรวบรวมการอ้างอิงใน. / โหนด _modules มันตอบสนองความต้องการของฉันในขณะนี้ นี่อาจช่วยคนอื่นบ้างฉันโพสต์ไว้ที่นี่

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

ในกรณีของฉันสคริปต์ด้านบนให้ผลลัพธ์:

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

ตอนนี้คุณสามารถคัดลอกและวางได้แล้ว มีความสุข!


39
คุณควรเผยแพร่สิ่งนี้เป็นโมดูล npm
Ben

ตอนนี้คุณจะทำอย่างไรเมื่อคุณได้รับ 770 บรรทัดกลับมา .. ? ฉันมี 58 ใน package.json รวมถึง devDependencies: - /
Sherzod

3
โปรดทราบว่าในตัวnpm ls --depth=0จะพิมพ์เหมือนกันมากขึ้นหรือน้อยลง (ไม่แน่ใจว่าเป็นกรณีในปี 2012 หรือไม่)
jakub.g

3
นี่ไม่ใช่วิธีที่ถูกต้องในการจัดการกับสิ่งนี้ สิ่งนี้จะเอาท์พุททุกการพึ่งพาในทุกโมดูล ดังนั้นถ้าแพคเกจของคุณต้องการแพคเกจaและแพคเกจaความต้องการแพคเกจbและcสคริปต์นี้จะส่งออกทุกระดับดังนั้นa, b, cซึ่งเป็นไม่ถูกต้อง ควรให้ผลลัพธ์เท่านั้นaแพ็คเกจย่อยจะได้รับการแก้ไขโดยอัตโนมัติ
Sallar

เป็นฉันหรือไม่หรือดูเหมือนว่าคำตอบส่วนใหญ่สมมติว่าคุณไม่ได้เริ่มจากระบบที่มีอยู่แล้วที่ node_modules ถูกคัดลอกหรือสร้างด้วยมือ? มีหลายครั้งที่ฉันส่งมอบโฟลเดอร์โครงการโดยมีโมดูลส่วนตัวอยู่ในนั้นและฉันไม่สามารถเข้าถึงที่เก็บได้ ฉันยังต้องการสร้างโครงการขึ้นใหม่โดยอัตโนมัติเมื่อฉันใส่โมดูลในที่เก็บของฉัน หรือบางทีฉันถูกบอกให้ 'แค่คัดลอกโฟลเดอร์ node_modules นี้' ใช่ใช่แนวทางปฏิบัติที่ดีที่สุด แต่ฉันจัดการกับความเป็นจริงของผู้พัฒนาที่อาจไม่รู้ว่าพวกเขากำลังทำอะไร สิ่งนี้ช่วยให้ฉันเริ่มต้นโครงการดังกล่าวได้อย่างตรงประเด็น ขอบคุณสำหรับการแบ่งปัน!
noelhx

82

npm init

เพื่อสร้างไฟล์ package.json จากนั้นคุณใช้

ls node_modules/ | xargs npm install --save

เพื่อเติมโมดูลที่คุณมีในโฟลเดอร์ node_modules

แก้ไข: @paldepind ชี้ให้เห็นว่าคำสั่งที่สองซ้ำซ้อนเพราะnpm initตอนนี้เพิ่มสิ่งที่คุณมีใน node_modules / โฟลเดอร์ของคุณโดยอัตโนมัติ ฉันไม่ทราบว่ากรณีนี้เป็นอย่างนั้นหรือไม่ แต่อย่างน้อยตอนนี้ก็ใช้ได้โดยไม่มีคำสั่งที่สอง


5
สิ่งนี้มีประโยชน์มากหากคุณไม่ได้ใช้ - บันทึกสำหรับทุกโมดูลที่คุณติดตั้ง

7
ฉันพบว่าnpm initมีการเพิ่มการอ้างอิงโดยอัตโนมัติตามแพ็คเกจที่ติดตั้งและไม่จำเป็นต้องรันคำสั่งที่สอง
paldepind

ฉันดีใจที่คุณสามารถขึ้นอยู่กับชื่อโฟลเดอร์ node_modules ในลักษณะนี้ ... ว้าว!
DT Rush

สิ่งนี้ยังมีประโยชน์อย่างน่าอัศจรรย์เมื่อใช้npm dedupeซึ่งดึงการขึ้นต่อกันที่ใช้ร่วมกันระหว่างโมดูลของคุณออกจากโมดูลเหล่านั้นและเก็บไว้ที่ระดับบนสุดของnode_modulesไดเรกทอรีของคุณ แต่มันไม่ได้สัมผัสpackage.json! ด้วยสิ่งนี้คุณสามารถคอมมิทและแชร์การตั้งค่าที่ซ้ำซ้อนของคุณ
Pathogen

1
คำตอบที่ดีสำหรับทุกคนที่เพิ่ม package.json หลังจากความจริง
Carrie Kendall

24

บรรทัดคำสั่ง :

npm init

จะสร้างไฟล์ package.json

ในการติดตั้งอัพเดตและถอนการติดตั้งแพ็กเกจภายใต้การอ้างอิงลงในไฟล์ package.json:

บรรทัดคำสั่ง :

npm install <pkg>@* --save 

จะเพิ่มเวอร์ชันล่าสุดสำหรับแพ็คเกจโดยอัตโนมัติภายใต้การอ้างอิงลงในไฟล์ package.json

EX:

npm install node-markdown@* --save

บรรทัดคำสั่ง :

npm install <pkg> --save

จะเพิ่มเวอร์ชันล่าสุดสำหรับแพ็คเกจโดยอัตโนมัติภายใต้การอ้างอิงลงในไฟล์ package.json

หากคุณต้องการเวอร์ชั่นเฉพาะสำหรับแพ็คเกจให้ใช้บรรทัดคำสั่งนี้:

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

จะเพิ่มแพ็คเกจเฉพาะเวอร์ชันภายใต้การอ้างอิงลงในไฟล์ package.json โดยอัตโนมัติ

EX:

npm install koa-views@1.0.0 --save

หากคุณต้องการรุ่นที่เฉพาะเจาะจงสำหรับแพ็คเกจให้ใช้บรรทัดคำสั่งนี้:

npm install <pkg>@<version range>

จะเพิ่มเวอร์ชันล่าสุดสำหรับแพ็คเกจโดยอัตโนมัติระหว่างช่วงของรุ่นที่อยู่ภายใต้การอ้างอิงลงในไฟล์ package.json

EX:

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

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีเขียนเวอร์ชันสำหรับแพ็คเกจnpm Doc

บรรทัดคำสั่ง :

npm update --save

จะอัปเดตแพ็คเกจเป็นไฟล์ package.json และจะเพิ่มเวอร์ชันที่อัปเดตโดยอัตโนมัติสำหรับแพ็คเกจทั้งหมดภายใต้การอ้างอิงลงในไฟล์ package.json

บรรทัดคำสั่ง :

npm uninstall <pkg> --save

จะลบแพ็กเกจออกจากการอ้างอิงลงในไฟล์ package.json โดยอัตโนมัติและลบแพ็กเกจออกจากโฟลเดอร์ node_module


14

การวิ่งnpm init -yทำให้คุณpackage.jsonมีค่าเริ่มต้นทั้งหมด
จากนั้นคุณสามารถเปลี่ยนแปลงได้package.jsonตามต้องการ
สิ่งนี้ช่วยประหยัดเวลาได้หลายครั้งโดยป้องกันการกดenterทุกคำสั่งnpm init


6

ตอนนี้คุณสามารถใช้เครื่องมือนั่งร้าน Yeoman - Modern Web Appบนโหนดเทอร์มินัลโดยใช้ 3 ขั้นตอนง่ายๆ

ก่อนอื่นคุณจะต้องติดตั้ง Yo และเครื่องมือที่จำเป็นอื่น ๆ :

$ npm install -g yo bower grunt-cli gulp

หากต้องการนั่งร้านเว็บแอปพลิเคชันให้ติดตั้งgenerator-webapp generator:

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

ทำงานกับคุณและ ... คุณทำเสร็จแล้ว:

$ yo webapp  // create scaffolding 

Yeoman สามารถเขียนโค้ดสำเร็จรูปสำหรับเว็บแอปพลิเคชันหรือตัวควบคุมและรุ่นทั้งหมดของคุณ สามารถเปิดเว็บเซิร์ฟเวอร์ตัวอย่างสดเพื่อแก้ไขและรวบรวม ไม่เพียงแค่คุณสามารถทำการทดสอบหน่วยของคุณย่อเล็กสุดและเชื่อมโยงโค้ดของคุณเพิ่มประสิทธิภาพของรูปภาพและอื่น ๆ ...

Yeoman (yo) - เครื่องมือนั่งร้านที่นำเสนอระบบนิเวศน์ของโครงนั่งร้านเฉพาะที่เรียกว่าเครื่องกำเนิดไฟฟ้าซึ่งสามารถใช้ในการทำงานที่น่าเบื่อบางอย่างที่กล่าวถึงก่อนหน้านี้

Grunt / gulp - ใช้ในการสร้างดูตัวอย่างและทดสอบโครงการของคุณ

Bower - ใช้สำหรับการจัดการการพึ่งพาเพื่อให้คุณไม่ต้องดาวน์โหลดไลบรารีส่วนหน้าของคุณอีกต่อไป


5

จากคำตอบของ Pylinux ด้านล่างเป็นโซลูชันสำหรับ Windows OS

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

หวังว่ามันจะช่วย


คุณสามารถพิมพ์การติดตั้ง npm ที่ด้านบนของ abc.txt และที่ด้านล่าง - บันทึกด้วยการลบลิงค์ใหม่จะทำงานได้
Roni

โปรดทราบว่าในขณะที่มีประโยชน์อาจติดตั้งแพคเกจ NPM เวอร์ชันที่ไม่ถูกต้องซึ่งอาจทำให้แอปล้มเหลว
jarmod

1

ใช้คำสั่ง npm init -f เพื่อสร้างไฟล์ package.json และหลังจากนั้นใช้ - บันทึกหลังจากแต่ละคำสั่งเพื่อให้แต่ละโมดูลจะได้รับการอัปเดตโดยอัตโนมัติภายใน package.json ของคุณสำหรับ ex: npm install express --save


0

1. ทางเลือก

หากคุณ git และผู้ใช้ GitHub:

    generate-packagenpm initขึ้นเพียงกว่า

อื่น

และ / หรือคุณไม่ชอบpackage.jsonเทมเพลตที่สร้างแพ็คเกจหรือnpm initสร้าง:

    คุณสามารถสร้างแม่แบบของคุณเองผ่านทางแอพพลิเคนั่งร้านเป็นสร้าง , เรือหรือองค์รักษ์


2. ความเกี่ยวข้อง

คำตอบนี้มีความเกี่ยวข้องสำหรับมีนาคม 2018 ในอนาคตข้อมูลจากคำตอบนี้อาจจะล้าสมัย

ผู้เขียนคำตอบนี้ใช้สร้างแพ็คเกจด้วยตนเองในเดือนมีนาคม 2561


3. ข้อ จำกัด

คุณต้องใช้ git และ GitHub เพื่อใช้แพ็คเกจ


4. การสาธิต

sasha-npm-init-vs-generate-packageตัวอย่างเช่นผมสร้างโฟลเดอร์ว่างเปล่า

4.1 สร้างแพคเกจ

คำสั่ง:

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

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

ผมคิดว่าที่generate-packageอื่น ๆ npm initอีกมากมายเพียงแค่ว่า


5. การปรับแต่ง

ที่สร้างpackage.jsonแม่แบบของคุณเองดูสร้างและตัวอย่างที่เป็นประโยชน์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.