อะไรคือความแตกต่างระหว่าง npm install และ npm run build?


114

อะไรคือความแตกต่างระหว่างnpm installและnpm run build?

ฉันสังเกตเห็นในโครงการของฉันว่าบางครั้ง npm เริ่มล้มเหลวเมื่อnpm installดำเนินการ แต่เมื่อทำงานnpm run buildแล้วมันก็ใช้ได้ดี

วิธีการทำงานภายในของทั้งสองเป้าหมายคือinstallและrun buildแตกต่างกันอย่างไร


1
คำตอบที่ยอมรับ ณ ตอนนี้เป็นที่ถกเถียงกัน ฉันคิดว่าคำตอบจาก MKP และ CTS_AE มีความเกี่ยวข้องมากกว่าในช่วงเวลานี้ ด้วยความเคารพสิ่งนี้ควรอยู่ภายใต้การแจ้งของผู้ดูแล & / หรือผู้ถามคำถามนี้
Suhas Chikkanna

คำตอบ:


71

npm installติดตั้งการอ้างอิงลงในnode_modules/ไดเร็กทอรีสำหรับโปรเจ็กต์โหนดที่คุณกำลังทำงานอยู่ คุณสามารถเรียกinstallใช้โปรเจ็กต์ node.js (โมดูล) อื่นเพื่อติดตั้งเป็นการอ้างอิงสำหรับโปรเจ็กต์ของคุณ

npm run buildไม่ทำอะไรเว้นแต่คุณจะระบุว่า "build" ทำอะไรในไฟล์ package.json ของคุณ ช่วยให้คุณดำเนินการสร้าง / เตรียมงานที่จำเป็นสำหรับโครงการของคุณก่อนที่จะนำไปใช้ในโครงการอื่น

npm buildเป็นคำสั่งภายในและถูกเรียกโดยlinkและinstallคำสั่งตามเอกสารประกอบสำหรับ build :

นี่คือคำสั่งประปาที่เรียกโดยลิงค์ npm และการติดตั้ง npm

คุณจะไม่โทรnpm buildตามปกติเนื่องจากใช้ภายในเพื่อสร้างส่วนเสริมโหนด C / C ++ ดั้งเดิมโดยใช้ node-gyp


37
Downvoted ตั้งแต่ @MKP กล่าวnpm run buildและnpm buildมีความไม่เหมือนกัน ฉันจะโหวตอีกครั้งหากคุณสามารถพิสูจน์ได้ว่าพวกเขาเหมือนกันจริงหรือตอบถูก
Hendy Irawan

หลังจากที่หมายดังต่อไปนี้คำตอบที่ถูกเชื่อมโยงของผมยังคิดว่าnpm buildและnpm run buildจะไม่เหมือนกัน IMHO บางทีคำตอบข้างต้นจาก @churro จะต้องได้รับการแก้ไข กรุณาแก้ไขฉันถ้าฉันผิด stackoverflow.com/questions/29939697/…
Suhas Chikkanna

1
น่าเสียดายที่ @HendyIrawan ถูกต้องและไม่ใช่คำสั่งเดียวกันนี่เป็นคำตอบที่ได้รับการโหวตอย่างมากซึ่งอาจทำให้บางคนสับสน ฉันเชื่อว่ามันต้องได้รับการปรับปรุง
rdarioduarte

81

NPM ในปี 2019

npm buildไม่มีอยู่แล้ว. คุณต้องโทรnpm run buildเลย ข้อมูลเพิ่มเติมด้านล่าง

TLDR;

npm install: ติดตั้งการอ้างอิงจากนั้นเรียกใช้installจากpackage.json scriptsฟิลด์

npm run build: เรียกใช้ฟิลด์สร้างจากpackage.json scriptsฟิลด์


ฟิลด์สคริปต์ NPM

https://docs.npmjs.com/misc/scripts

มีหลายสิ่งที่คุณสามารถใส่ลงในpackage.jsonฟิลด์สคริปต์npm ตรวจสอบลิงก์เอกสารด้านบนเพิ่มเติมเหนือวงจรชีวิตของสคริปต์ - ส่วนใหญ่มีตะขอก่อนและหลังที่คุณสามารถเรียกใช้สคริปต์ก่อน / หลังการติดตั้งเผยแพร่ถอนการติดตั้งทดสอบเริ่มหยุดหดตัวเวอร์ชัน


เพื่อให้สอดคล้องกับสิ่งต่างๆ

  • npm install ไม่เหมือนกับ npm run install
  • npm installติดตั้งการpackage.jsonอ้างอิงจากนั้นเรียกใช้ไฟล์package.json scripts.install
    • (โดยพื้นฐานแล้วจะเรียกnpm run installหลังจากติดตั้งการอ้างอิง
  • npm run installเพียงทำงานpackage.json scripts.installก็จะไม่ติดตั้งการอ้างอิง
  • npm buildเคยเป็นคำสั่งที่ถูกต้อง (เคยเหมือนกับnpm run build) แต่มันไม่เป็นอีกต่อไป ตอนนี้เป็นคำสั่งภายใน หากคุณเรียกใช้คุณจะได้รับ: npm WARN build npm build called with no arguments. Did you mean to npm run-script build?คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเอกสาร: https://docs.npmjs.com/cli/build

5
+1 แต่มันสับสนที่จะบอกว่าnpm buildไม่มีอีกแล้ว มันยังคงออกมาในแง่ที่เป็นที่รู้จัก / พิเศษสำหรับ npm เพราะมันตอบสนองกับคำเตือนที่คุณพูดถึงที่ด้านล่าง โดยพื้นฐานแล้วตอนนี้ไม่ได้ทำอะไรเลย คำตอบสำหรับคำถามอื่นนี้ให้สรุปสั้นที่สุดในVSnpm build npm run build
bluenote10

1
กล่าวอีกนัยหนึ่งเวลาในการตรวจสอบเส้นด้าย?
Moose on the Loose

44

ความแตกต่างที่สำคัญคือ ::

npm installเป็น npm cli-command ซึ่งทำสิ่งที่กำหนดไว้ล่วงหน้าเช่นเขียนโดย Churro เพื่อติดตั้งการอ้างอิงที่ระบุภายใน package.json

npm run command-nameหรือnpm run-script command-name ( เช่น npm run build ) ยังเป็นคำสั่ง cli-command ที่กำหนดไว้ล่วงหน้าเพื่อรันสคริปต์ที่กำหนดเองของคุณด้วยชื่อที่ระบุแทน "command-name" ดังนั้นในกรณีนี้npm run buildคือคำสั่งสคริปต์แบบกำหนดเองที่มีชื่อ "build" และจะทำอะไรก็ได้ที่ระบุไว้ข้างใน (เช่นecho "hello world" ที่ระบุไว้ด้านล่างตัวอย่าง package.json)

Ponits หมายเหตุ ::

1) อีกสิ่งหนึ่งnpm buildและnpm run buildมีสองสิ่งที่แตกต่างกันnpm buildตามที่เขียนโดย Churro แต่npm run buildจะทำงานแบบกำหนดเองที่เขียนไว้ภายในpackage.json

2) และnpm buildและnpm run buildไม่เหมือนกัน สิ่งที่ฉันหมายถึงคือคุณไม่สามารถระบุบางสิ่งในnpm run buildสคริปต์build ( ) ที่กำหนดเองและคาดว่าnpm buildจะทำเช่นเดียวกัน ลองทำสิ่งต่อไปนี้เพื่อยืนยันในpackage.json:

{
  "name": "demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build":"echo 'hello build'"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {},
  "dependencies": {}
}

และเรียกใช้npm run buildและnpm buildหนึ่งโดยหนึ่งและคุณจะเห็นความแตกต่าง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งดังต่อไปนี้กรุณาเอกสาร NPM

ไชโย !!


11
มากกว่า "พยายามที่จะทำงานนี้" ฉันขอขอบคุณถ้าคุณอธิบายในรายละเอียดสิ่งที่เป็นความแตกต่างระหว่างและnpm run build npm buildตกลงมันไม่เหมือนกัน แต่อย่างใด? คำตอบของ @ Churro นั้นไม่ถูกต้องหรือ?
Hendy Irawan

7
ใช่สิ่งที่npm buildยังคงเป็นปริศนา จะเป็นการดีที่ได้รู้ว่า เท่าที่ฉันสามารถบอกได้" npm buildจะทำตามที่เขียนโดยชูโร"นั้นไม่เป็นความจริง Churro กล่าวว่ามันจะทำสิ่งที่ระบุไว้ในpackage.jsonสำหรับbuildคำสั่ง (ตามที่กำหนดไว้ในscriptsส่วนที่ผมคิดว่า) แต่นั่นคือสิ่งที่npm run buildทำและnpm buildไม่เรียกใช้คำสั่ง build ที่ระบุในpackage.json scriptsส่วน เว้นแต่จะมีวิธีอื่นในการกำหนดสิ่งที่npm buildควรทำpackage.jsonซึ่งไม่ได้อธิบายไว้ที่นี่หรือโดย Churro (หรือในเอกสาร NPM ฉันคิดว่าน่าเศร้า)
trollkotze

2
ดังนั้นฉันจึงลองและnpm buildพูดว่าnpm WARN build npm buildเรียกโดยไม่มีข้อโต้แย้ง คุณหมายถึงnpm run-script build? . ฉันคิดว่ามันไม่ได้ทำอะไรเลย หลังจากใช้เวลาอ่านคำตอบทั้งหมดที่นี่และลองทำด้วยตัวเองฉันก็ยังไม่สามารถบอกได้ว่าจุดประสงค์ของอะไรnpm build:(.
bluenote10

4
  • npm install ติดตั้ง depedendencies ในการกำหนดค่า package.json ของคุณ
  • npm run build เรียกใช้สคริปต์ "build" และสร้างสคริปต์ที่เรียกใช้แอปพลิเคชันของคุณ - สมมติว่า server.js
  • npm start เรียกใช้สคริปต์ "start" ซึ่งจะเป็น "node server.js"

เป็นการยากที่จะบอกได้อย่างชัดเจนว่าปัญหาคืออะไร แต่โดยพื้นฐานแล้วถ้าคุณดูการกำหนดค่าสคริปต์ของคุณฉันจะเดาว่า "build" ใช้เครื่องมือ build บางประเภทเพื่อสร้างแอปพลิเคชันของคุณในขณะที่ "start" ถือว่าบิลด์ได้ทำเสร็จแล้ว แต่จะล้มเหลวหาก ไม่มีไฟล์อยู่ที่นั่น

คุณอาจกำลังใช้ bower หรือ grunt - ฉันดูเหมือนจะจำได้ว่าแอปพลิเคชั่นฮึดฮัดทั่วไปจะกำหนดสคริปต์เหล่านั้นรวมทั้งสคริปต์ "สะอาด" เพื่อลบบิลด์ล่าสุด

เครื่องมือสร้างมักจะสร้างไฟล์ใน bin /, dist / หรือ build / โฟลเดอร์ซึ่งสคริปต์เริ่มต้นเรียกใช้เช่น "node build / server.js" เมื่อคุณnpm startล้มเหลวอาจเป็นเพราะคุณโทรมาnpm cleanหรือคล้ายกับการลบบิลด์ล่าสุดดังนั้นไฟล์แอปพลิเคชันของคุณจึงไม่มีอยู่ทำให้การเริ่ม npm ล้มเหลว

ซอร์สโค้ดของ npm build - เพื่อสัมผัสการสนทนาในคำถามนี้ - อยู่ใน github เพื่อให้คุณได้ดูหากต้องการ หากคุณเรียกใช้npm buildโดยตรงและคุณมีสคริปต์ "build" ที่กำหนดไว้สคริปต์จะออกโดยมีข้อผิดพลาดขอให้คุณเรียก build script ของคุณnpm run-script buildดังนั้นจึงไม่เหมือนกับnpm run scriptดังนั้นมันจึงไม่เหมือนกัน

ฉันไม่ค่อยแน่ใจว่าnpm buildทำอะไรได้บ้าง แต่ดูเหมือนว่าจะเกี่ยวข้องกับ postinstall และ packaging scripts ในการอ้างอิง ฉันคิดว่านี่อาจเป็นการตรวจสอบให้แน่ใจว่าไลบรารีของสคริปต์สร้าง CLI หรือไลบรารีเนทีฟที่ต้องการโดยการอ้างอิงถูกสร้างขึ้นสำหรับสภาพแวดล้อมเฉพาะหลังจากดาวน์โหลดแพคเกจ นี่คือเหตุผลที่ลิงค์และติดตั้งเรียกสคริปต์นี้

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