ฉันมี 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')
ทำงานโหนดจะแก้ไขmymodule
symlink จากนั้นจะค้นหาเฉพาะใน/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