การติดตั้ง npm จะไม่ติดตั้ง devDependencies


256

บน windows ด้วยเหตุผลบางอย่างเมื่อผมทำงานnpm installมันจะไม่ติดตั้งdevDependencies AFAIK มันควร ถ้าฉันเรียกใช้การติดตั้งnpm install --dev devDependencies ฉันไม่เข้าใจว่าทำไมnpm installไม่ติดตั้งdevDependenciesด้วย แต่ติดตั้งการอ้างอิงเท่านั้น อะไรคือเหตุผล? ฉันจะแก้ไขได้อย่างไร

อาจมีบางอย่างผิดปกติกับpackage.jsonของฉัน? มันอยู่ด้านล่างถ้ามันอาจจะเป็นประโยชน์:

{
  "name": "try-brunch",
  "version": "0.1.0",
  "private": "true",
  "devDependencies": {
    "brunch": "^2.0.4",
    "cssnano-brunch": "^1.1.5",
    "javascript-brunch": "^1.8.0",
    "sass-brunch": "^1.9.2",
    "uglify-js-brunch": "^1.7.8"
  },
  "dependencies": {
    "jquery": "^2.1.4"
  }
}

5
ทำไมเราถึงต้องแก้ไขมันด้วย? มันควรจะเป็นค่าเริ่มต้น! devDependenciesแท้จริงการอ้างอิงสำหรับนักพัฒนาของโมดูล ฉันเดิมพันnpm installโมดูลส่วนใหญ่ของเราที่จะใช้แทนที่จะพัฒนา
КонстантинВан

สมมติว่าคุณเขียนแอพและคุณต้องใช้ตัวบันทึกหรือปลั๊กอิน webpack นั่นคือ devdeps จำเป็นต้องติดตั้งเหล่านั้น npm ไม่ได้ติดตั้งในบางกรณี
Tristan Tzara

1
ฉันหมายถึงการติดตั้งสำหรับdevDependenciesจำเป็นเฉพาะเมื่อคุณเขียนแพ็คเกจ (แอปพลิเคชัน) devDependenciesใช้มันไม่จำเป็นต้องใช้ ดังนั้นจึงเหมาะสมสำหรับdevDependenciesการติดตั้งแฟล็กเพิ่มเติม หากnpm installติดตั้งdevDependencies โดยค่าเริ่มต้นที่ผู้ใช้จะได้รับแพคเกจซ้ำซ้อนเช่นกัน
КонстантинВан

พฤติกรรมที่มีการบันทึกไว้คือเมื่อฉันทำnpm iในโฟลเดอร์ของฉันมันจะคว้า py package.jsonและติดตั้งทั้ง deps และ devdeps นี่คือวิธีที่มันตั้งใจจะทำงานและทำให้รู้สึก (เช่นเมื่อฉันทำnpm iหลังจากที่git cloneฉันคาดหวังว่าจะมีทุกอย่างที่ฉันต้องการรวมถึงเช่นปลั๊กอิน webpack) คำถามนี้ตอบข้อผิดพลาดเมื่อพฤติกรรมที่แท้จริงแตกต่างจากที่ตั้งใจไว้ กรุณาดูที่เอกสาร - docs.npmjs.com/cli/install มีธงที่จะไม่ติดตั้ง devdeps แต่พฤติกรรมเริ่มต้นคือการติดตั้งพวกเขาซึ่งทำให้รู้สึกที่สมบูรณ์แบบและเป็นสิ่งที่ทุกคนคาดหวัง
Tristan Tzara

ฉันไม่เห็นเหตุผลใด ๆ ที่ทำให้ฉันจำได้ว่าให้เรียกใช้คำสั่งอื่นเพื่อติดตั้งเช่นปลั๊กอิน webpack หรือ def ประเภท typecript หรือ devdeps อื่น ๆ ทุกครั้งที่ฉันดึง npm i ควร bootstrap ทั้งสองอย่างซึ่งเป็นพฤติกรรมที่ตั้งใจมีสติและมีเอกสารดังนั้นฉันจึงไม่เข้าใจว่าทำไมคุณถึงบอกว่าปัญหานี้ควรเป็นมาตรฐาน
Tristan Tzara

คำตอบ:


306

ตรวจสอบเอกสาร NPM สำหรับการติดตั้ง

ด้วยการ--productionตั้งค่าสถานะ (หรือเมื่อตัวแปรสภาพแวดล้อม NODE_ENV ถูกตั้งค่าเป็นการผลิต), npm จะไม่ติดตั้งโมดูลที่อยู่ในรายการ devDependencies "

--only={prod[uction]|dev[elopment]}อาร์กิวเมนต์จะทำให้เกิดการอย่างใดอย่างหนึ่งเท่านั้น devDependencies หรือเฉพาะ devDependencies ไม่ใช่ที่จะติดตั้งโดยไม่คำนึงถึง NODE_ENV ได้."

คุณเคยลองไหม

npm install --only=dev

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

npm init --yes

แล้ว:

npm install --save-dev brunch@^2.0.4
npm install --save-dev cssnano-brunch@^1.1.5
npm install --save-dev javascript-brunch@^1.8.0
npm install --save-dev sass-brunch@^1.9.2
npm install --save-dev uglify-js-brunch@^1.7.8
npm install jquery@^2.1.4 --save

และคุณควรจะไปดี! มิฉะนั้นจะโพสต์ตัวเลือกอื่น ๆ ต่อไป

ตรวจสอบการกำหนดค่า npm ของคุณ:

npm config list

npm รับการตั้งค่า config จากบรรทัดคำสั่งตัวแปรสภาพแวดล้อมและไฟล์ npmrc ดังนั้นตรวจสอบตัวแปรสภาพแวดล้อมและไฟล์npmrc

ยังคงล้มเหลว

ตกลงสร้างโฟลเดอร์ใหม่โดยเฉพาะที่อื่นในระบบไฟล์ของคุณ กล่าวคือ ไม่อยู่ในลำดับชั้นของโฟลเดอร์เดียวกัน ตัวอย่างเช่น C: \ myNewFolder - ยิ่งใกล้ C: ขับยิ่งดี

จากนั้นเรียกใช้:

npm init --yes

ตอนนี้ทำงาน:

npm install underscore --save

และในที่สุดก็:

npm install mocha --save-dev

ทุกอย่างทำงานได้ตามที่คาดหวังหรือไม่

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


Tristan - สิ่งนี้ช่วยสถานการณ์ของคุณได้ไหม? กรุณาคุณทำเครื่องหมายคำตอบว่าถูกต้องหรือไม่ก็ให้ฉันรู้ว่าผลลัพธ์ของการลองด้านบน?
arcseldon

2
npm install - เพียง = dev ติดตั้ง devdeps แต่ฉันต้องการติดตั้งทั้ง deps และ devdeps ในครั้งเดียว package.json ดูเหมือนจะโอเคเนื่องจากการสร้างใหม่จะไม่เปลี่ยนแปลงอะไรเลย ฉันถูกต้องหรือไม่ที่ NODE_ENV มีอยู่ทั้งในระดับโลกเป็นค่าเริ่มต้นและในพื้นที่เป็นค่าของโครงการ ฉันจะตรวจสอบและเปลี่ยนค่าเหล่านี้บน windows ได้อย่างไร (ฉันได้ตรวจสอบแล้วและฉันไม่มีตัวแปรระบบ NODE_ENV)
Tristan Tzara

@TristanTzara - ฉันทำงานเฉพาะใน MAC วันนี้ อย่างไรก็ตามจากความทรงจำของวันที่ผ่านไป (ปีที่แล้วใน NT และ XP) - คุณสามารถพิมพ์บางสิ่งเช่น "set" ลงในหน้าต่างพรอมต์คำสั่ง .. ไปที่สิ่งที่ต้องการเช่น System Properties -> Advanced -> ตัวแปรสภาพแวดล้อมและตรวจสอบรายการของคุณ . คุณกำลังมองหา "กุญแจ" กับ NODE_ENV ฉันจะ google ตอนนี้สำหรับตัวเลือก windows แต่โพสต์นี้ในกรณีที่ช่วย
arcseldon

ลิงก์ที่นี่ - winaero.com/blog/…
arcseldon

@TristanTzara - เป็นเรื่องดีที่รู้ คิดอย่างหนึ่งตรวจสอบไดเรกทอรีหลักทั้งหมดเหนือไดเรกทอรีของคุณที่ใช้งานไม่ได้ ค้นหาโฟลเดอร์ node_modules ที่มีอยู่ ... npm จะค้นหาขึ้นด้านบนเมื่อพยายามแก้ไขการพึ่งพาและอาจเป็นสิ่งที่แปลกประหลาดเหมือนว่ามันกำลังรับโมดูลที่ติดตั้งอยู่ที่มีอยู่ต่อไปถึงแผนผังไดเรกทอรีและปฏิเสธที่จะติดตั้งของคุณในโฟลเดอร์ลูก . สถานที่ปกติอยู่ภายใต้ไดเรกทอรีบ้านของคุณ .. ขอให้โชคดีและขอบคุณสำหรับการตอบคำตอบของฉัน: D
arcseldon

85

ตรวจสอบว่าค่าการผลิตการกำหนดค่า npm ถูกตั้งค่าเป็นจริง หากค่านี้เป็นจริงมันจะข้ามการพึ่งพา dev

วิ่ง npm config get production

วิธีตั้งค่า: npm config set -g production false


ฉันสงสัยว่ามีบางอย่างระหว่าง npm 5.x ถึง npm 6.x หากไม่มีการตั้งค่าไว้ค่าเริ่มต้นจะกลายเป็นtrueมากกว่าfalseหรือไม่
James Perih

38

ตรวจสอบให้แน่ใจว่าคุณไม่ได้NODE_ENVตั้งค่าตัวแปร env เป็น 'การผลิต'

หากคุณทำเช่นนั้นการพึ่งพา dev จะไม่ถูกติดตั้งหากไม่มี--devแฟล็ก


ฉันได้ดูตัวแปรระบบของฉันและฉันยังไม่มีอันนี้ บางทีฉันดูผิดที่?
Tristan Tzara

13
โปรดทราบว่าการnpm install --devติดตั้ง devDependencies ซ้ำ ๆๆ นี่คือแทบจะไม่เคยสิ่งที่คุณต้องการและในความเป็นจริงเลิกใช้
Wonko

ขอบคุณ. ฉันไม่ทราบว่าสิ่งนี้จะส่งผลกระทบต่อการติดตั้งตามปกติ แต่เป็นตรรกะ :)
Lothre1

6
การใช้งานของ--devตัวเลือกจะเลิก ใช้--only=devแทน
Sarath Ak

16

ฉันมีpackage-lock.jsonไฟล์จาก package.json เวอร์ชันเก่าของฉันฉันลบมันแล้วทุกอย่างติดตั้งอย่างถูกต้อง


บิงโก! ที่แก้ไขปัญหาของฉัน ดูเหมือนว่าเราควรจะทำสิ่งนี้กับ repo
สุ่ม

9

ฉันมีปัญหาที่คล้ายกัน npm install --only=devไม่ทำงานและไม่ได้ทำnpm rebuildไม่ได้ทำงานและไม่ได้ในท้ายที่สุดผมต้องลบnode_modulesและpackage-lock.jsonและเรียกใช้npm installอีกครั้ง นั่นแก้ไขให้ฉัน


7

คุณสามารถใช้วิธีการสั้น ๆ สำหรับการพึ่งพาการติดตั้งสำหรับการพัฒนาดังนี้:

npm i -D <dependencies-names>

คำตอบที่ดีที่สุด Shpuld อยู่ในอันดับต้น ๆ
wwwwwwwwwwww

6

ตรวจสอบให้แน่ใจว่าคุณpackage.jsonถูกต้อง ...

ฉันมีข้อผิดพลาดดังต่อไปนี้ ...

npm WARN Invalid name: "blah blah blah"

และนั่นก็ทำให้devDependenciesไม่ต้องติดตั้ง

FYI เปลี่ยนpackage.json"ชื่อ" เพื่อblah-blah-blahแก้ไข


0

ฉันมีปัญหาเดียวกันเพราะฉันตั้งในNODE_ENV=productionขณะที่สร้างนักเทียบท่า จากนั้นฉันก็เพิ่มอีกหนึ่งnpm install --only=devอัน ทุกอย่างทำงานได้ดี ฉันต้องการ devDependencies สำหรับการสร้างโมดูล TypeSciprt

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