ผมต้องการที่จะทำอะไรเช่นนี้จึงnpm install
ยังติดตั้งpackage.json
ของ../somelocallib
หรือที่สำคัญกว่าพึ่งพา
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
ผมต้องการที่จะทำอะไรเช่นนี้จึงnpm install
ยังติดตั้งpackage.json
ของ../somelocallib
หรือที่สำคัญกว่าพึ่งพา
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
คำตอบ:
คุณลักษณะนี้มีการใช้งานในเวอร์ชัน 2.0.0 ของ npm ตัวอย่าง:
{
"name": "baz",
"dependencies": {
"bar": "file:../foo/bar"
}
}
เส้นทางใด ๆ ต่อไปนี้จะใช้ได้เช่นกัน:
../foo/bar
~/foo/bar
./foo/bar
/foo/bar
แพคเกจท้องถิ่นจะถูกคัดลอกไปยังคำนำหน้า ( ./node-modules
)
ใส่การsomelocallib
พึ่งพาของคุณpackage.json
ตามปกติ:
"dependencies": {
"somelocallib": "0.0.x"
}
จากนั้นเรียกใช้npm link ../somelocallib
และ NPM จะติดตั้งรุ่นที่คุณกำลังทำงานบนเป็นลิงก์สัญลักษณ์
app@0.0.1 /private/tmp/app
└── somelocallib@0.0.1 -> /private/tmp/somelocallib
อ้างอิง: ลิงค์ (1)
npm dedup
เพื่อแก้ไขปัญหานี้ npmjs.org/doc/cli/npm-dedupe.html
npm install <folder>
คำอธิบายว่าติดตั้งแพคเกจในไดเรกทอรีเป็น symlink ในโครงการปัจจุบัน
ตอนนี้คุณสามารถระบุพา ธ การติดตั้งโมดูลโหนดโลคัลในของคุณpackage.json
โดยตรง จากเอกสาร:
เส้นทางท้องถิ่น
ตั้งแต่เวอร์ชัน 2.0.0 คุณสามารถระบุพา ธ ไปยังโลคัลไดเร็กทอรีที่มีแพ็กเกจ สามารถบันทึกเส้นทางท้องถิ่นโดยใช้
npm install -S
หรือnpm install --save
ใช้รูปแบบใด ๆ ต่อไปนี้:../foo/bar ~/foo/bar ./foo/bar /foo/bar
package.json
ซึ่งในกรณีที่พวกเขาจะปกติกับทางญาติและเพิ่มไปยังคุณ ตัวอย่างเช่น:{ "name": "baz", "dependencies": { "bar": "file:../foo/bar" } }
คุณลักษณะนี้มีประโยชน์สำหรับการพัฒนาออฟไลน์ในเครื่องและการสร้างการทดสอบที่ต้องการการติดตั้ง npm ซึ่งคุณไม่ต้องการใช้เซิร์ฟเวอร์ภายนอก แต่ไม่ควรใช้เมื่อเผยแพร่แพ็คเกจไปยังรีจิสตรีสาธารณะ
"bar": "file:///home/user/src/foo/bar"
node:onbuild
../foo
npm install
จากหรือพื้นที่เก็บข้อมูล git อื่นบน LAN? เมื่อฉันลองข้างต้นและติดตั้ง npm จาก git + ssh ดูเหมือนจะดูในไดเรกทอรี node_modules และไม่พยายามที่จะไปมากกว่า git + ssh แม้ว่านั่นเป็นวิธีที่ฉันกำลังติดตั้งแพคเกจระดับบนสุด
มันใช้งานได้สำหรับฉัน
วางสิ่งต่อไปนี้ในไฟล์ package.json ของคุณ
"scripts": {
"preinstall": "npm install ../my-own-module/"
}
.gitignore
ในโฟลเดอร์โมดูลที่สร้างขึ้น.npmignore
และเป็นครั้งแรกที่ฉันวิ่งมันใช้ 777 node_modules
ซ้ำในโฟลเดอร์ทั้งหมดยกเว้น แต่ใช่มันติดตั้งการอ้างอิง ใช้ npm เวอร์ชั่น 1.4.14
"dependencies": { "my-own-module": "file:../my-own-module" }
ล่ะ
npm link
คือคุณไม่จำเป็นต้องทำnpm install
ในแต่ละครั้งเพื่อให้การอ้างอิงของคุณเป็นปัจจุบัน
หากคุณต้องการทำให้สิ่งนี้เป็นแบบอัตโนมัติมากขึ้นเนื่องจากคุณกำลังตรวจสอบโมดูลของคุณในการควบคุมเวอร์ชันและไม่ต้องการพึ่ง devs ที่จดจำไปยังลิงก์ npm คุณสามารถเพิ่มสิ่งนี้ในส่วน "สคริปต์" package.json ของคุณ:
"scripts": {
"postinstall": "npm link ../somelocallib",
"postupdate": "npm link ../somelocallib"
}
สิ่งนี้ให้ความรู้สึกเกินความเป็นแฮ็ค แต่ดูเหมือนจะ "ทำงาน" รับเคล็ดลับจากปัญหา npm นี้: https://github.com/npm/npm/issues/1558#issuecomment-12444454
postinstall
และpostupdate
แทนที่จะเป็นpreinstall
และpreupdate
?
นี่คือวิธีที่คุณจะเพิ่มการพึ่งพาในท้องถิ่น:
npm install file:src/assets/js/FILE_NAME
เพิ่มไปยัง package.json จาก NPM:
npm install --save file:src/assets/js/FILE_NAME
เพิ่มไปยัง package.json โดยตรงเช่นนี้:
....
"angular2-autosize": "1.0.1",
"angular2-text-mask": "8.0.2",
"animate.css": "3.5.2",
"LIBRARY_NAME": "file:src/assets/js/FILE_NAME"
....
นี่คือ package.json ที่คุณจะใช้สำหรับโครงการหลัก:
"dependencies": {
"express": "*",
"somelocallib": "file:./somelocallib"
}
มี./somelocallib
การอ้างอิงไปยังโฟลเดอร์ห้องสมุดเป็นเทียบกับ package.json
การอ้างอิง: https://docs.npmjs.com/files/package.json#local-paths
จัดการการอ้างอิงไลบรารีของคุณ
นอกจากนี้ในการทำงานคุณจะต้องเรียกใช้npm install
(cd node_modules/somelocallib && npm install)
นี่เป็นข้อผิดพลาดที่รู้จักกับ NPM
การอ้างอิง: https://github.com/npm/npm/issues/1341 (ค้นหาการอ้างอิงที่ทันสมัยมากขึ้น)
ตรวจสอบเจ้านายของคุณpackage.lock
และsomelocallib/package.lock
ผู้จัดการแหล่งที่มาของคุณ
จากนั้นใน Dockerfile ของคุณใช้:
FROM node:10
WORKDIR /app
# ...
COPY ./package.json ./package-lock.json ./
COPY somelocallib somelocallib
RUN npm ci
RUN (cd node_modules/zkp-utils/ && npm ci)
# ...
ฉันใช้วงเล็บใน(cd A && B)
โครงสร้างของฉันเพื่อให้การดำเนินการ idempotent
ฉันรู้ว่าใช้npm install ../somelocallib
งานได้
แต่ผมไม่ทราบหรือไม่ว่าไวยากรณ์คุณแสดงในคำถามที่จะทำงานจากที่package.json
...
น่าเสียดายที่หมอดูเหมือนจะพูดถึง URL ว่าเป็นการอ้างอิงเท่านั้น
ลองfile:///.../...tar.gz
ชี้ไปที่ lib ท้องถิ่นซิปแล้วบอกเราว่ามันใช้งานได้หรือไม่
สิ่งนี้ใช้ได้สำหรับฉัน: อันดับแรกตรวจสอบให้แน่ใจว่าไดเรกทอรี npm มีผู้ใช้ที่เหมาะสม
sudo chown -R myuser ~/.npm
sudo chown -R myuser /usr/local/lib/node_modules
จากนั้นใน package.json ของคุณลิงก์ไดเรกทอรี
"scripts": {
"preinstall": "npm ln mylib ../../path/to/mylib"
},
"dependencies": {
"mylib" : "*"
}
npm install
เปิดบรรทัดคำสั่งในฐานะผู้ดูแลแล้วเรียกใช้
ที่จริงแล้วในช่วง npm 2.0 มีการสนับสนุนเส้นทางท้องถิ่นแล้ว (ดูที่นี่ )
อยากรู้อยากเห็น ..... อย่างน้อยใน Windows (npm ของฉันคือ 3.something) ฉันต้องทำ:
"dependencies": {
"body-parser": "^1.17.1",
"module1": "../module1",
"module2": "../module2",
เมื่อฉันทำnpm install ../module1 --save
มันส่งผลให้เส้นทางที่แน่นอนและไม่ได้ญาติต่อเอกสาร
ฉันทำเลอะเทอะมากขึ้นและตัดสินใจว่า../xxx
เพียงพอแล้ว
โดยเฉพาะฉันมีโลคัลโหนดโมดูลที่เช็กเอาต์เพื่อบอกว่า d: \ build \ module1, d: \ build \ module2 และโปรเจ็กต์โหนดของฉัน (แอ็พพลิเคชัน) ใน d: \ build \ nodeApp
ในการ 'ติดตั้ง' ฉัน:
d:\build\module1> rmdir "./node_modules" /q /s && npm install
d:\build\module2> rmdir "./node_modules" /q /s && npm install
d:\build\nodeApp> rmdir "./node_modules" /q /s && npm install
package1's package.json มีการพึ่งพา "module2": "../module2"; module2 ไม่มีการพึ่งพาในท้องถิ่น nodeApp มีการพึ่งพา "module1": "../module1" และ "module2": "../module2"
ไม่แน่ใจว่าจะใช้งานได้กับฉันหรือไม่เนื่องจากทั้ง 3 โฟลเดอร์ (module1, module2 และ nodeApp) อยู่ในระดับเดียวกันนั้น .......
สองขั้นตอนสำหรับการพัฒนาท้องถิ่นที่สมบูรณ์: