ฉันมี repo โมดูลที่ดาวน์โหลดมาฉันต้องการติดตั้งในเครื่องไม่ใช่ในไดเร็กตอรี่อื่นหรือไม่?
วิธีง่ายๆในการทำเช่นนี้คืออะไร?
ฉันมี repo โมดูลที่ดาวน์โหลดมาฉันต้องการติดตั้งในเครื่องไม่ใช่ในไดเร็กตอรี่อื่นหรือไม่?
วิธีง่ายๆในการทำเช่นนี้คืออะไร?
คำตอบ:
จากเอกสารคู่มือnpm-link :
ในไดเรกทอรีโมดูลท้องถิ่น:
$ cd ./package-dir
$ npm link
ในไดเรกทอรีของโครงการเพื่อใช้โมดูล:
$ cd ./project-dir
$ npm link package-name
หรือในครั้งเดียวโดยใช้เส้นทางญาติ:
$ cd ./project-dir
$ npm link ../package-dir
นี่เทียบเท่ากับการใช้สองคำสั่งด้านบนภายใต้ประทุน
npm linkจะสร้างอินสแตนซ์ที่สองของการอ้างอิงภายนอก ดังนั้นถ้าคุณมีแพ็กเกจ A ต้องการ B และ C, B ต้องการ C. การลิงก์ B จะทำให้แอปพลิเคชัน A มี C สองอินสแตนซ์
คุณเพียงแค่ระบุ<folder>อาร์กิวเมนต์หนึ่งตัวอาร์กิวเมนต์npm installควรชี้ไปที่โฟลเดอร์ในเครื่องแทนชื่อแพ็คเกจ:
npm install /path
rm -rf node_modulesก่อนและnpm installหลังที่คุณเรียกใช้สคริปต์ของคำตอบ
ตั้งแต่ถูกถามและตอบโดยบุคคลเดียวกันฉันจะเพิ่มลิงก์ NPMเป็นทางเลือก
จากเอกสาร:
สิ่งนี้มีประโยชน์สำหรับการติดตั้งสิ่งของของคุณเองเพื่อให้คุณสามารถทำงานและทดสอบซ้ำได้โดยไม่ต้องสร้างใหม่อย่างต่อเนื่อง
cd ~/projects/node-bloggy # go into the dir of your main project
npm link ../node-redis # link the dir of your dependency
[แก้ไข] ตั้งแต่ NPM 2.0 คุณสามารถประกาศการขึ้นต่อกันของท้องถิ่นได้ใน package.json
"dependencies": {
"bar": "file:../foo/bar"
}
npm linkกับโฟลเดอร์หนึ่งครั้ง (เพื่อสร้าง symlink ทั่วโลก) จากนั้นเรียกใช้npm link package-nameภายในโฟลเดอร์ของโครงการ (เพื่อใช้ symlink ทั่วโลกในโครงการของคุณ) คำตอบด้านล่างคือคำตอบที่ถูกต้อง
file:วิธีการ) อนุญาตให้แอปของฉันและโมดูลในเครื่องแบ่งปันการพึ่งพา การทดสอบของฉันnpm linkส่งผลให้มีการอ้างอิงที่ซ้ำกันซึ่งจะแบ่งสิ่งต่าง ๆ หากจำเป็นต้องใช้การพึ่งพาเป็นซิงเกิล
npm pack + package.jsonนี่คือสิ่งที่ได้ผลสำหรับฉัน:
module projectดำเนินการnpm pack:นี่จะเป็นการสร้าง<package-name>-<version>.tar.gzไฟล์
consumer projectเป็นการดีที่คุณสามารถวางไฟล์ดังกล่าวทั้งหมดในtmpโฟลเดอร์ในconsumer-projectรูทของคุณ:
package.json:"dependencies": {
"my-package": "file:/./tmp/my-package-1.3.3.tar.gz"
}
Installแพ็คเกจ:npm installหรือnpm iหรือyarn
consumer-project's node_modulesโฟลเดอร์ของคุณโชคดี...
วิธีการเหล่านี้ ( npm linkหรือการpackage.jsonขึ้นต่อกันของไฟล์) ไม่สามารถทำงานได้หากโมดูลโลคัลมีการขึ้นต่อกันแบบเพียร์ที่คุณต้องการติดตั้งในขอบเขตโครงการของคุณเท่านั้น
ตัวอย่างเช่น:
/local/mymodule/package.json:
"name": "mymodule",
"peerDependencies":
{
"foo": "^2.5"
}
/dev/myproject/package.json:
"dependencies":
{
"mymodule": "file:/local/mymodule",
"foo": "^2.5"
}
ในสถานการณ์สมมตินี้ชุด NPM ขึ้นmyprojectเป็นnode_modules/เช่นนี้
/dev/myproject/node_modules/
foo/
mymodule -> /local/mymodule
เมื่อโหนดโหลดmymoduleและrequire('foo')ทำงานโหนดจะแก้ไขmymodulesymlink จากนั้นจะค้นหาเฉพาะใน/local/mymodule/node_modules/(และบรรพบุรุษของมัน) fooเท่านั้นซึ่งไม่พบ แต่เราต้องการให้โหนดตรวจสอบ/local/myproject/node_modules/เนื่องจากเป็นที่ที่เรียกใช้โครงการของเราและfooติดตั้งที่ไหน
ดังนั้นเราอาจต้องวิธีที่จะบอกโหนดไปยังไม่ได้แก้ไข symlink นี้เมื่อมองหาfooหรือเราต้องมีวิธีที่จะบอก NPM ในการติดตั้งเป็นสำเนาของเมื่อไวยากรณ์ไฟล์พึ่งพาจะใช้ในการmymodule package.jsonฉันไม่พบวิธีที่จะทำอย่างใดอย่างหนึ่งโชคไม่ดี :(
NODE_PATHให้ชี้ไปnode_modules/ที่ตำแหน่งที่fooติดตั้ง ดังนั้นสำหรับกรณีข้างต้นมันจะเป็นแบบนี้: NODE_PATH=/dev/myproject/node_modules/ นั่นทำให้mymoduleสามารถค้นหาfooได้
อย่างที่คนก่อน ๆ ได้ตอบnpm --save ../location-of-your-packages-root-directoryไว้ ../location-of-your-packages-root-directoryแต่ต้องมีสองสิ่งในเพื่อให้มันทำงาน
1) package.jsonในไดเรกทอรีนั้นชี้ไปที่
2) mainคุณสมบัติในpackage.jsonต้องถูกตั้งค่าและใช้งาน ig "main": "src/index.js",หากไฟล์รายการสำหรับ../location-of-your-packages-root-directoryคือ../location-of-your-packages-root-directory/src/index.js