ملف package-lock.json

يتم إنشاء ملف package-lock.json تلقائيًا عند تثبيت حزم العقدة. تعرف على ما يدور حوله

In version 5, npmقدم الpackage-lock.jsonملف.

ما هذا؟ ربما تعرف عنpackage.jsonملف، وهو أكثر شيوعًا وكان موجودًا لفترة أطول.

الهدف من الملف هو تتبع الإصدار الدقيق لكل حزمة يتم تثبيتها بحيث يكون المنتج قابلاً للتكرار بنسبة 100٪ بنفس الطريقة حتى إذا تم تحديث الحزم من قبل المشرفين.

هذا يحل مشكلة محددة للغايةpackage.jsonتركت دون حل. في package.json ، يمكنك تعيين الإصدارات التي تريد الترقية إليها (تصحيح أو ثانوي) ، باستخدام امتدادسمفرتدوين ، على سبيل المثال:

  • إذا كتبت~0.13.0، تريد تحديث إصدارات التصحيح فقط:0.13.1على ما يرام ، ولكن0.14.0ليس.
  • إذا كتبت^0.13.0، تريد تحديث التصحيح والإصدارات الثانوية:0.13.1و0.14.0وهكذا.
  • إذا كتبت0.13.0، هذا هو الإصدار الدقيق الذي سيتم استخدامه دائمًا

لا تلتزم Git بمجلد node_modules ، وهو ضخم بشكل عام ، وعندما تحاول نسخ المشروع على جهاز آخر باستخدامnpm installالأمر ، إذا قمت بتحديد ملف~تم إطلاق بناء الجملة وإصدار تصحيح للحزمة ، سيتم تثبيت تلك الحزمة. الشيء نفسه بالنسبة ل^وإصدارات طفيفة.

إذا قمت بتحديد الإصدارات الدقيقة ، مثل0.13.0في المثال ، لا تتأثر بهذه المشكلة.

قد تكون أنت أو أي شخص آخر يحاول بدء المشروع على الجانب الآخر من العالم عن طريق الجريnpm install.

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

الpackage-lock.jsonيعيّن الإصدار المثبت حاليًا من كل حزمةفي الحجر، وnpmسيستخدم هذه الإصدارات الدقيقة عند التشغيلnpm install.

هذا المفهوم ليس جديدًا ، ويستخدم مديرو حزم لغات البرمجة الأخرى (مثل Composer في PHP) نظامًا مشابهًا لسنوات.

الpackage-lock.jsonيجب أن يكون الملف ملتزمًا بمستودع Git الخاص بك ، بحيث يمكن لأشخاص آخرين جلبه ، إذا كان المشروع عامًا أو لديك متعاونون ، أو إذا كنت تستخدم Git كمصدر لعمليات النشر.

سيتم تحديث إصدارات التبعيات فيpackage-lock.jsonملف عند تشغيلnpm update.

مثال

هذا نموذج لبنية ملفpackage-lock.jsonالملف الذي نحصل عليه عندما نركضnpm install cowsayفي مجلد فارغ:

{
  "requires": true,
  "lockfileVersion": 1,
  "dependencies": {
    "ansi-regex": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.
0.0.tgz",
      "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
    },
    "cowsay": {
      "version": "1.3.1",
      "resolved": "https://registry.npmjs.org/cowsay/-/cowsay-1.3.1.tgz"
,
      "integrity": "sha512-3PVFe6FePVtPj1HTeLin9v8WyLl+VmM1l1H/5P+BTTDkM
Ajufp+0F9eLjzRnOHzVAYeIYFF5po5NjRrgefnRMQ==",
      "requires": {
        "get-stdin": "^5.0.1",
        "optimist": "~0.6.1",
        "string-width": "~2.1.1",
        "strip-eof": "^1.0.0"
      }
    },
    "get-stdin": {
      "version": "5.0.1",
      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.
1.tgz",
      "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g="
    },
    "is-fullwidth-code-point": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/
is-fullwidth-code-point-2.0.0.tgz",
      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
    },
    "minimist": {
      "version": "0.0.10",
      "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10
.tgz",
      "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
    },
    "optimist": {
      "version": "0.6.1",
      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
      "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
  <span style="color:#f92672">"requires"</span>: {
    <span style="color:#f92672">"minimist"</span>: <span style="color:#e6db74">"~0.0.1"</span>,
    <span style="color:#f92672">"wordwrap"</span>: <span style="color:#e6db74">"~0.0.2"</span>
  }
},
<span style="color:#f92672">"string-width"</span>: {
  <span style="color:#f92672">"version"</span>: <span style="color:#e6db74">"2.1.1"</span>,
  <span style="color:#f92672">"resolved"</span>: <span style="color:#e6db74">"https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz"</span>,
  <span style="color:#f92672">"integrity"</span>: <span style="color:#e6db74">"sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw=="</span>,
  <span style="color:#f92672">"requires"</span>: {
    <span style="color:#f92672">"is-fullwidth-code-point"</span>: <span style="color:#e6db74">"^2.0.0"</span>,
    <span style="color:#f92672">"strip-ansi"</span>: <span style="color:#e6db74">"^4.0.0"</span>
  }
},
<span style="color:#f92672">"strip-ansi"</span>: {
  <span style="color:#f92672">"version"</span>: <span style="color:#e6db74">"4.0.0"</span>,
  <span style="color:#f92672">"resolved"</span>: <span style="color:#e6db74">"https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz"</span>,
  <span style="color:#f92672">"integrity"</span>: <span style="color:#e6db74">"sha1-qEeQIusaw2iocTibY1JixQXuNo8="</span>,
  <span style="color:#f92672">"requires"</span>: {
    <span style="color:#f92672">"ansi-regex"</span>: <span style="color:#e6db74">"^3.0.0"</span>
  }
},
<span style="color:#f92672">"strip-eof"</span>: {
  <span style="color:#f92672">"version"</span>: <span style="color:#e6db74">"1.0.0"</span>,
  <span style="color:#f92672">"resolved"</span>: <span style="color:#e6db74">"https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz"</span>,
  <span style="color:#f92672">"integrity"</span>: <span style="color:#e6db74">"sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="</span>
},
<span style="color:#f92672">"wordwrap"</span>: {
  <span style="color:#f92672">"version"</span>: <span style="color:#e6db74">"0.0.3"</span>,
  <span style="color:#f92672">"resolved"</span>: <span style="color:#e6db74">"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz"</span>,
  <span style="color:#f92672">"integrity"</span>: <span style="color:#e6db74">"sha1-o9XabNXAvAAI03I0u68b7WMFkQc="</span>
}

} }

ركبناcowsayالذي يعتمد على

  • get-stdin
  • optimist
  • string-width
  • strip-eof

في المقابل ، تتطلب هذه الحزم حزمًا أخرى ، كما نرى من ملفrequiresالممتلكات التي يمتلكها البعض:

  • ansi-regex
  • is-fullwidth-code-point
  • minimist
  • wordwrap
  • strip-eof

تتم إضافتها بالترتيب الأبجدي إلى الملف ، ولكل منها ملفversionالمجال ، أresolvedالحقل الذي يشير إلى موقع الحزمة ، وintegrityيمكننا استخدامها للتحقق من الحزمة.

تحميل مجانيكتيب Node.js


المزيد من دروس العقدة: