แจ้งแพ็คเกจ npm ให้นำเข้าจากโปรเจ็กต์รูท node_modules ที่ติดตั้งไว้

ฉันสร้างแพ็คเกจ npm และต้องการติดตั้งในโปรเจ็กต์อื่น

ดังนั้นฉันจึงไปที่โฟลเดอร์รูทของโปรเจ็กต์ของฉันแล้วทำ npm install /path/to/package/folder

มันติดตั้งอย่างถูกต้อง (สร้าง symlink ตามเอกสารประกอบ) และฉันสามารถใช้งานได้โดยนำเข้าจากมันเป็น node_module แบบคลาสสิก

ปัญหาของฉันคือการนำเข้าแบบสัมพัทธ์ภายในแพ็คเกจที่ฉันสร้างขึ้น แพ็กเกจมีการขึ้นต่อกันกับไลบรารีอื่นและโฟลเดอร์ node_modules แบบสัมพันธ์

มันเกิดขึ้นที่ไฟล์ภายในแพ็คเกจของฉันนำเข้าจากโฟลเดอร์ node_modules แบบสัมพันธ์แทนที่จะเป็นโปรเจ็กต์รูท node_modules หากฉันมีการติดตั้งการพึ่งพาในโฟลเดอร์โปรเจ็กต์รูทของฉัน ฉันพบว่ามันอยู่ภายใน node_modules ที่ซ้อนกันของแพ็คเกจของฉันด้วย การทำซ้ำและการนำเข้าแบบสัมพันธ์จากแพ็คเกจของฉันจะนำเข้าจากแพ็คเกจที่ซ้อนกัน สิ่งนี้ทำให้ฉันมีปัญหาบางอย่าง ฉันจะกำหนดค่านี้อย่างถูกต้องได้อย่างไร

นี่คือภาพร่างที่พยายามชี้แจง:

my_project
    |
    |
     __ node_modules (root)
             |
             |
             my_package (in this case symlink to my package)
             |        |
             |        |
             |        |__node_modules  (nested) <-------
             |        |        |
             |        |        |
             |        |        |__ third_package
             |        |
             |        | 
             |        |__ dist
             |             |
             |             |
             |              __ lib
             |                  |
             |                  |
             |                  |__ index.js
             |
             |
             |___ third_package

index.js นำเข้าไฟล์ thied_package จาก node_modules ที่ซ้อนกันแทนที่จะเป็น root ไฟล์แพ็คเกจของฉันถูกคอมไพล์ด้วย babel ลงใน dist/lib

ขอบคุณ

นี่คือแพ็คเกจ json ของ my_package

{
  "name": "my_package",
  "version": "1.0.0",
  "description": "",
  "main": "lib/index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "./node_modules/.bin/babel src --out-dir lib --copy-files",
  },
  "keywords": [
  ],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@babel/cli": "^7.10.5",
    "@babel/core": "^7.11.4",
    "@babel/preset-env": "^7.11.0",
    "@babel/preset-react": "^7.10.4",
    "@fortawesome/fontawesome-free": "^5.14.0",
    "@fortawesome/fontawesome-svg-core": "^1.2.30",
    "@fortawesome/free-brands-svg-icons": "^5.14.0",
    "@fortawesome/free-regular-svg-icons": "^5.14.0",
    "@fortawesome/free-solid-svg-icons": "^5.14.0",
    "@fortawesome/react-fontawesome": "^0.1.11",
    "leaflet": "^1.6.0",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "react-leaflet": "^2.7.0"
  },
  "peerDependencies": {
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "react-leaflet": "^2.7.0",
    "leaflet": "^1.6.0"
  },
  "devDependencies": {
    "babel-eslint": "^10.1.0",
  }
}

person Nja    schedule 03.09.2020    source แหล่งที่มา


คำตอบ (1)


หลังจากทำการวิจัยเพิ่มเติมแล้ว

ตามอัลกอริทึมการติดตั้ง npm เมื่อฉันติดตั้งแพ็คเกจของฉัน มันจะติดตั้งการอ้างอิงทั้งหมดที่ระบุไว้ ในไฟล์ package.json ทางด้านขวาสุดของแผนผัง node_modules

ในกรณีของฉันปัญหาเกิดขึ้นเมื่อ Third_package ซ้อนอยู่ในแพ็คเกจของฉันและ Third_package ในโฟลเดอร์รูทโปรเจ็กต์ node_modules มีเวอร์ชันที่แตกต่างกัน เห็นได้ชัดว่าทั้งคู่ได้รับการติดตั้ง

แท้จริงแล้ว อัลกอริทึมการนำเข้าโหนดตามที่อธิบายไว้ในการโหลดจากโฟลเดอร์ node_modules ให้ค้นหา แพ็คเกจที่นำเข้า/จำเป็นในโฟลเดอร์ node_modules ที่ซ้อนกันมากกว่า และหากไม่พบ จะดำเนินการต่อไปที่รูทของโปรเจ็กต์ จนกระทั่งพบว่า.

ในกรณีของฉันพบไฟล์แพ็คเกจที่สามที่นำเข้าโดยแพ็คเกจของฉันในโฟลเดอร์ node_modules ในเครื่อง

เพื่อหลีกเลี่ยงพฤติกรรมนี้ มีวิธีแก้ไขที่แตกต่างกัน:

  1. นามแฝงของโมดูล
  2. แก้ไข webpack
  3. ตัวแก้ไขปลั๊กอินบาเบล

เป็นไปได้หรือไม่ที่จะสำรวจสิ่งเหล่านี้เพื่อกำหนดพฤติกรรมการนำเข้าแบบกำหนดเอง

person Nja    schedule 03.09.2020