node.js - update - npm شرح




كيف تمنع تثبيت الوحدات النمطية للـ NPM "devDependencies" لـ Node.js(package.json)؟ (8)

لدي هذا في ملف package.json الخاص بي (نسخة مختصرة):

{
  "name": "a-module",
  "version": "0.0.1",
  "dependencies": {
    "coffee-script":      ">= 1.1.3"
  },
  "devDependencies": {
    "stylus":             ">= 0.17.0"
  }
}

أنا أستخدم NPM الإصدار 1.1.1 على ماك 10.6.8.

عندما أقوم بتشغيل الأمر التالي من جذر المشروع ، يقوم بتثبيت كل من dependencies و devDependencies :

npm install

كنت تحت الانطباع بأن هذا الأمر قام بتثبيت devDependencies :

npm install --dev

كيف يمكنني جعل ذلك npm install فقط dependencies التثبيت (حتى بيئة الإنتاج يحصل فقط على تلك الوحدات النمطية) ، في حين أن شيئا مثل npm install --dev تثبيت كل من dependencies و devDependencies ؟


أواجه هذه المشكلة أيضا! تثبيت npm مربك إلى حد ما وظلت المشاركات على شبكة الإنترنت تجلب في -d / - إشارات ديف كما لو كان هناك وضع تثبيت 'تطوير' واضح.

  • سيعمل تثبيت npm على تثبيت كل من " التبعيات " و " devDependencies "

  • تثبيت npm - سيعمل الإنتاج على تثبيت " التبعيات " فقط

  • تثبيت npm - سيقوم dev بتثبيت " devDependencies " فقط


إذا قرأت هذا الاختبار في عام 2016 ، فيُرجى تحقيق ما تريد باستخدامه

--only={prod[uction]|dev[elopment]} 

تسبب وسيطة فقط devDependencies أو فقط غير devDependencies للتثبيت بغض النظر عن NODE_ENV.

من: https://docs.npmjs.com/cli/install


استخدم npm install packageName --save this will add package in dependencies ، if you use npm install packageName --save-dev then devDependencies .

يجب استخدام npm install packageName --save-dev لإضافة الحزم لأغراض التطوير. مثل إضافة حزم TDD (Chai ، mocha ، إلخ). التي تستخدم في التنمية وليس في الإنتاج.


الآن هناك مشكلة ، إذا كان لديك package-lock.json مع npm 5+. يجب عليك إزالته قبل استخدام npm install --production .


تجدر الإشارة إلى أنه يمكنك استخدام متغير البيئة NODE_ENV لتحقيق النتيجة نفسها. مفيد بشكل خاص إذا كنت تقوم بتعبئة تطبيق العقدة (مثل Docker).

NODE_ENV=production npm install

سيقوم التعليمة البرمجية المذكورة أعلاه بتثبيت كافة التبعيات الخاصة بك ولكن dev (على devDependencies ).

إذا كنت بحاجة إلى استخدام متغيرات البيئة في Dockerfile الخاص بك يمكن العثور على مزيد من المعلومات here .

من السهل استبدال متغيرات البيئة عند الحاجة (على سبيل المثال إذا كنت تريد تشغيل مجموعة الاختبار الخاصة بك على Travis CI). إذا كانت هذه هي الحالة ، فيمكنك فعل شيء كالتالي:

docker run -v $(pwd):/usr/src/app --rm -it -e NODE_ENV=production node:8 npm install

وثائق الآلية الوقائية الوطنية هنا

إنتاج

  • الافتراضي: خطأ
  • النوع: Boolean Set إلى true للتشغيل في وضع "production".

    1. لم يتم تثبيت devDependencies في المستوى الأعلى عند تشغيل تثبيت npm المحلي بدون أية وسائط.
    2. عيّن NODE_ENV = "الإنتاج" للنصوص البرمجية لدورة الحياة.

حاوية سعيدة =)


تحتاج إلى إضافة إلى الإجابة المختارة: اعتبارًا من الآن ، npm install في دليل حزمة (يحتوي على package.json ) على تثبيت devDependencies ، بينما npm install -g بتثبيتها.


عند استخدام "npm install" ، يتم تحميل الوحدات واستخدامها في جميع التطبيقات بغض النظر عما إذا كانت "devDependencies" أو "dependencies". مجموع هذه الفكرة: كل شيء يحدده package.json الخاص بك كما يتم تثبيت التبعية (أي نوع) على node_modules.

الغرض من الاختلاف بين التبعيات / devDependencies / optionalDependencies هو ما يمكن للمستهلكين من التعليمات البرمجية الخاصة بك القيام w / npm لتثبيت هذه الموارد.

حسب الوثائق: https://npmjs.org/doc/json.html ...

إذا كان هناك شخص ما يخطط لتنزيل واستخدام الوحدة الخاصة بك في برنامجهم ، فمن المحتمل أنهم لا يريدون أو يحتاجون إلى تنزيل وبناء إطار الاختبار أو الوثائق الخارجية الذي تستخدمه.

في هذه الحالة ، من الأفضل إدراج هذه العناصر الإضافية في تجزئة devDependencies.

سيتم تثبيت هذه الأشياء كلما تم تعيين علامة تكوين --dev. يتم تعيين هذه العلامة تلقائيًا عند إجراء رابط npm أو عند إجراء التثبيت من خلال npm من جذر الحزمة ، ويمكن إدارتها مثل أي معلمة تهيئة npm أخرى. انظر التكوين (1) لمزيد من الموضوع.

ومع ذلك ، لحل هذا السؤال ، إذا كنت تريد فقط تثبيت "التبعيات" باستخدام npm ، الأمر التالي هو:

npm install --production

يمكن تأكيد ذلك من خلال النظر في التزام Git الذي أضاف هذا الفلتر (مع بعض المرشحات الأخرى [المدرجة أدناه] لتوفير هذه الوظيفة).

الفلاتر البديلة التي يمكن استخدامها من قبل npm:

--save          => updates dependencies entries in the {{{json}}} file
--force         => force fetching remote entries if they exist on disk 
--force-latest  => force latest version on conflict
--production    => do NOT install project devDependencies
--no-color      => do not print colors

dmarr حاول استخدام تثبيت npm - الإنتاج


لقد وجدت أنه ، عند محاولة تثبيت تبعيات dev لحزمة تحتوي على عقدة addon ، لا يمكنك تجنب إنشاء الوظيفة الإضافية عند تشغيل npm install --dev حتى إذا كنت ترغب فقط في تثبيت devDependencies. لذا ، كان عليّ أن ألتف على ظهر الآلية:

node -e 'console.log( Object.keys( require( "./package.json" ).devDependencies ) );' | \
sed  -e "s/^[^']*'//" -e "s/'.*$//" | \
xargs npm install

أو أفضل (وأكثر إيجازًا) بعد ،

node -e 'Object.keys( require( "./package.json" ).devDependencies )
.map( function( item ){ console.log( item ) } );' | xargs npm install




npm