ค้นหาเว็บไซต์

reactjs - วิธีตั้งค่า create-react-app กับแพ็กเกจในโฟลเดอร์ src ในขณะที่ใช้ TypeScript?


ฉันใช้ TypeScript ในโปรเจกต์ create-react-app ของฉันและใช้แพ็กเกจส่วนตัวภายในเครื่อง แพ็กเกจเหล่านี้ถูกออกแบบมาเพื่อแชร์ระหว่างแอปหลายตัวและมีคลังเก็บของตัวเอง ฉันต้องการให้แพ็กเกจภายในเครื่องของฉันอยู่ในโฟลเดอร์ src/packages

นี่คือโครงสร้างโฟลเดอร์ปัจจุบันของฉัน:

--create-react-app (root)
  --node_modules
  --package.json
  --src
    --App.tsx
    --index.tsx
    --packages
      --my-package (sub-repository)
        --ModuleA.ts
        --node_modules
        --package.json

my-package ถูกติดตั้งเป็นแบบโลคัลดังนี้:

// package.json
"dependencies": {
  "my-package": "file:src/packages/my-package"
}

ด้วยวิธีนี้ฉันสามารถนำเข้ามอดูลจาก my-package แบบนี้ได้:

// src/App.tsx
import ModuleA from 'my-package/ModuleA'

อย่างไรก็ตามเกิดข้อผิดพลาดในการคอมไพล์เมื่อ ModuleA นำเข้าชุดแพ็กเกจจาก node_modules ของตัวเอง:

// src/packages/my-package/package.json
"dependencies": {
  "moment": "^2.27.0"
}

// src/packages/my-package/ModuleA.ts
import moment from 'moment'

ข้อผิดพลาดในการคอมไพล์:

> npm run start
Failed to compile.

./src/packages/my-package/node_modules/moment/moment.js
  Line 9:37:  'define' is not defined  no-undef
  Line 9:50:  'define' is not defined  no-undef

Search for the keywords to learn more about each error.

ฉันคิดว่าข้อผิดพลาดเกิดจาก ESLint เพราะมันตรวจสอบ node_modules ของ my-package

ฉันไม่ต้องการ npm run eject ฉันก็ไม่ต้องการเผยแพร่แพ็กเกจของฉันทั้งแบบส่วนตัวหรือสาธารณะ ฉันต้องการที่จะสามารถแก้ไขซอร์สโค้ดของ my-package และเห็นการเปลี่ยนแปลงแบบเรียลไทม์เมื่อแอปของฉันกำลังทำงาน

มีวิธีที่จะทำให้มันทำงานแบบนี้ได้ไหมครับ/ค่ะ?

ขอบคุณสำหรับความช่วยเหลือของคุณ

คำตอบ #1

ฉันเพิ่งค้นพบสิ่งนี้ในปี 2022 เพราะฉันต้องการทำสิ่งเดียวกัน ฉันลองทำแล้วและตอนนี้มันใช้งานได้ดีโดยใช้ create-react-app ([email ) ESLint ไม่บ่นเกี่ยวกับไฟล์ในโฟลเดอร์ node_modules ที่ซ้อนอยู่ใน src.

คำตอบ #2

ลองใช้การนำเข้าแบบสมบูรณ์ โดยทั่วไปแล้ว การใช้การนำเข้าแบบสมบูรณ์ถือเป็นนิสัยที่ดีในการแก้ปัญหาการนำเข้าที่ซ้อนกัน

ในไฟล์ tsconfig.json ที่อยู่ในโฟลเดอร์รากของโครงการของคุณ ให้เพิ่มโค้ดดังต่อไปนี้:

{
  "compilerOptions": {
    "baseUrl": "src"
  },
  "include": ["src"]
}

เอกสารอ้างอิง: https://create-react-app.dev/docs/importing-a-component/