typescript - NPM სამუშაო სივრცის პროექტი Vite-ით, რომელიც აცილებს dist საქაღალდის საჭიროებას Vite-ის მშენებლობაში


მე მაქვს პროექტი მოდულით, რომელიც იყენებს სრულ გზის ექსპორტებს ინდექს ფაილების ნაცვლად.

პროექტი besteht 2 NPM სამუშაო სივრცისგან. ერთი არის core, ხოლო მეორე examples.

პრობლემა, რომელსაც ვცდილობ თავიდან ავიცილო, არის იმპორტის გზის იყოს როგორც @my-project/core/dist/plugins/Input

პრობლემა, რომლის წინაშეც ვიმყოფები არის ის, რომ მე შევძელი TypeScript-მა გამოამუშავებინოს შედეგი ისე, რომ TypeScript შეძლოს კომპილაცია dist გზა საჭიროების გარეშე, თუმცა Vite ვერ აშენებს, რადგან მას ეჩვენება, რომ ვერ პოულობს შესაბამის კოდს.

Error: [vite]: Rollup failed to resolve import "@my-project/core/plugins/Input"

Typescript სრულიად კარგია, რაც გამოწვევად ითვლებოდა, მაგრამ თითქოს მოაგვარეს ჩემი package.json-ში შემდეგის დამატებით

"typesVersions": {
    "*": {
      "*": [
        "./dist/*"
      ]
    }
  },

მე ვვარაუდობ, რომ ეს რაღაც კონკრეტულად ჩემს Vite კონფიგურაციაზეა, რომელიც ასე გამოიყურება:

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig(() => {
  return {
    build: {
      outDir: 'build',
    },
    plugins: [
      react({
        // Use React plugin in all *.jsx and *.tsx files
        include: '**/*.{jsx,tsx}',
      }),
    ],
    server: {
      port: 3000,
      host: true,
    },
    preview: {
      port: 4000,
    },
  };
});

მე საკუთარ თავს ვხეტიალობდი სხვადასხვა გზების გამოსაცდელად, რომ ეს მუშაობდეს და ახლა ნახევრად გზაზე ვარ TypeScript-ს შეკრებამდე. მედიაში იმედი მაქვს, რომ ვინმე შეძლებს მიუთითოს, ალბათ მარტივ შეცდომაზე, რომელსაც ვაკეთებ, რათა Vite-იც მუშაობდეს.

პასუხი #1

ცადეთ ექსპორტის გზების დაყენება იმ package.json-ში, რომლის იმპორტიც გსურთ. რაღაც მსგავსად:

{
  "name": "@my-project/core",
  ...
  "exports": {
    ".": "./dist/index.js",
    "./plugins/Input": "./dist/plugins/Input",
  }
}

შემდეგ თქვენ უნდა შეძლოთ ქვესაქაღალდის იმპორტი შემდეგნაირად

import { stuff } from '@my-project/core/plugins/Input'

უყველაფერს აქვს მნიშვნელობა, რომ თუ ეს პაკეტი საზოგადოებისთვისაა განკუთვნილი, მაშინ შესაძლოა გინდათ დაამატოთ ESM და CJS ექსპორტის გზები და დაადგინოთ ორივე სეტების გამომავალი შედეგი:

        ".": {
            "import": "./dist/index.js",
            "require": "./dist/cjs/index.cjs"
        },

მითხარი, როგორ გამოდის!