جافاسكريبت - استيراد الملفات في حزمة Node بدون تضمين اسم مجلد dist


لدي هيكل الدليل التالي لمكتبة سيتم استيرادها من قبل مشروع Node.js آخر.

my-lib/
├─ dist/
│  ├─ index.js
│  ├─ foo.js
├─ src/
│  ├─ index.ts
│  ├─ foo.ts
├─ package.json

لدي ملف package.json التالي

{
  "name": "my-lib",
  "version": "1.0.0",
  "description": "",
  "main": "dist/index.js"
}

لقد قمت بتحديد main كـ dist/index.js، لذا إذا فهمت بشكل صحيح، يمكن استيراد الأعضاء المصدَّرَين من index.ts (js) على شكل import abc from 'my-lib'. إذا اضطررت للوصول إلى الأعضاء المصدَّرَة من ملف foo.ts (js) فقد أنتهي بالقيام بـ import foo from 'my-lib/dist/foo'. لذا هنا يجب علي تحديد اسم مجلد dist في مسار الاستيراد. هل هناك طريقة لتحديد فقط 'my-lib/foo' بدون ذكر اسم مجلد dist؟ (تمامًا مثل استيراد ملف dist/index.js.)

الإجابة رقم 1

يمكن تحقيق ذلك باستخدام تصديرات المسارات الفرعية في package.json.

  "main": "./dist/index.js",
  "exports": {
    ".": "./dist/index.js",
    "./foo": "./dist/foo.js"
  }

الإجابة رقم 2

كما هو موضح في وثائق node.js، من الممكن إضافة تصدير المسارات الفرعية. تحقق من ذلك هنا.

في حالتك، يجب أن يبدو مشابهًا لما يلي

{
  "name": "my-lib",
  "version": "1.0.0",
  "description": "",
  "main": "./dist/index.js",
  "exports": {
    ".": "./dist/index.js",
    "./foo": "./dist/foo.js"
  }
}

بعد التصدير بهذه الطريقة يمكنك الاستيراد على النحو التالي

import foo from 'my-lib/foo'