ฉันจะตั้งค่าเซิร์ฟเวอร์ ELPA ได้อย่างไร


15

เพื่อนและฉันต้องการเริ่มเขียนแพ็คเกจ emacs เฉพาะสำหรับใช้ใน บริษัท ของเรา (เชื่อฉันสิไม่มีอะไรที่เราเขียนจะเป็นที่สนใจของทุกคนนอก - เป็นการรวมเข้ากับเครื่องมือภายใน)

เราต้องการทำการติดตั้งและบำรุงรักษาแพคเกจให้ง่ายที่สุดและเราคิดว่านี่หมายถึงการรวมเข้าด้วยpackage.elกัน เราต้องทำอะไรเพื่อตั้งค่าพื้นที่เก็บข้อมูลสำหรับการใช้งานดังกล่าว?


ฉันจะแยก MELPA และเขียนสูตรอาหารสำหรับแพ็คเกจของคุณ! หรือเตรียมสูตรอาหารและชี้เพื่อนร่วมงานของคุณไปที่ QUELPA
Lunaryorn

คำตอบ:


18

ฉันจะตั้งค่าที่เก็บแพคเกจท้องถิ่น (Emacs 24.5) โดยใช้package.elครั้งแรกโดยการสร้างสองไดเรกทอรีและpkgs local(ชื่อไม่สำคัญ) ไฟล์ที่ประกอบไปด้วยแพ็คเกจของคุณจะเข้าสู่pkgsและlocalจะสิ้นสุดการเก็บข้อมูลถาวรของคุณ หากคุณต้องการให้ผู้อื่นสามารถเก็บถาวรได้คุณสามารถเปิดเผยlocalโดยใช้เว็บเซิร์ฟเวอร์ แต่กระบวนการนี้เหมือนกับการสร้างไฟล์เก็บถาวรในเครื่อง

ฉันใส่สิ่งต่อไปนี้ในinit.elไฟล์ของฉัน:

(require 'package)
(setq package-enable-at-startup nil)

(require 'package-x)
(defvar local-archive
  (expand-file-name "local/" user-emacs-directory)
  "Location of the package archive.")
(setq package-archive-upload-base local-archive)
(add-to-list 'package-archives `("local" . ,local-archive) t)

(package-initialize)

ฉันใส่ที่เก็บถาวรของฉันไว้ใน.emacs.dไดเรกทอรีของฉัน(ดังนั้นuser-emacs-directoryในexpand-file-nameรูปแบบ) แต่คุณสามารถวางไว้ที่ใดก็ได้ที่คุณต้องการ

เมื่อประเมินผลแล้วให้ดำเนินการM-x package-upload-fileและป้อนชื่อไฟล์ของแพ็คเกจที่จะติดตั้ง localนี้จะสร้างแพคเกจใหม่ใน คุณจะเห็นสามไฟล์ใหม่ในการมีarchive-contents, และyourpackagename-version.el yourpackagename-readme.txtตอนนี้คุณน่าจะสามารถทำM-x package-list-packagesและดูแพ็คเกจของคุณได้ ด้วยโชคพวกเขาจะอยู่ที่ด้านบนสุดว่า "ใหม่" คุณสามารถติดตั้งแพคเกจได้ตามปกติและคุณจะเห็นมันปรากฏใน.emacs.d/elpaไดเรกทอรีของคุณเหมือนกับแพ็คเกจอื่น ๆ

นี่น่าจะใช้ได้สำหรับ Emacs 24 ฉันไม่แน่ใจเกี่ยวกับเวอร์ชั่นก่อนหน้านี้ ผู้ใช้ของคุณสามารถเข้าถึงแพ็คเกจได้ตามปกติโดยรวม

(require 'package)
(setq package-enable-at-startup nil)
(add-to-list 'package-archives 
  '("archive" . "http://yourdomain.com/path-to-local-dir/"))
(package-initialize)

ในinit.elไฟล์ของพวกเขา

สำหรับข้อมูลเกี่ยวกับวิธีเขียนแพ็คเกจดูการเตรียมรหัส Lisp สำหรับการแจกจ่ายในคู่มือ GNU Emacs Lisp


ขอบคุณ! นี่เป็นคำตอบที่เขียนได้ดีมากและใช้ได้ดีสำหรับฉัน ฉันมีเพียงคำถามเดียว .. เมื่อฉันทำM-x package-update-fileมันทำให้.elไฟล์โดยตรงภายใต้local/dir มีวิธีการสร้างไดเรกทอรีย่อยสำหรับแต่ละแพคเกจเพื่อให้เราจบลงด้วยlocal/pkg1/pkg1.el, local/pkg2/pkg2.el... ?
Kaushal Modi

ไม่ใช่ความรู้ของฉัน elpaไดเรกทอรีมีการตั้งค่าแบบที่คุณอธิบาย ฉันไม่รู้จริงๆว่าทำไมlocalไม่ โปรดจำไว้ว่าไฟล์เหล่านี้สร้างขึ้นโดยอัตโนมัติดังนั้นจึงไม่มีใครที่จะต้องดูพวกเขา ฉันเก็บไฟล์ของฉันไว้ภายใต้การควบคุมเวอร์ชันด้วย git และใส่localไดเรกทอรีของฉันลงไป.gitignoreด้วยเหตุผลนั้น ฉันรักษาpkgsไดเรกทอรีของฉันไว้อย่างเป็นระเบียบและอยู่ภายใต้การควบคุมเวอร์ชัน แต่localมันคืออะไร
Rodney Price

ขอบคุณ ดังนั้นเพื่อยืนยันไฟล์ทั้งหมดจะถูกทิ้งในลำดับชั้นแบบแบนในของคุณlocal/ด้วยหรือไม่ ฉันต้องการการจัดเรียงลำดับชั้นเพื่อให้ฉันสามารถระบุข้อมูลเมตา URL ของแพ็คเกจเป็น;; URL: http://yourdomain.com/path-to-local-dir/pkg1และอื่น ๆ สำหรับแพ็คเกจอื่น แต่มันไม่ใช่เรื่องใหญ่ ฉันตื่นเต้นมากกว่าที่จะเผยแพร่แพ็คเกจของฉันในท้องถิ่น :)
Kaushal Modi

1
ของฉันก็แบนเช่นกัน ฉันจะไม่ชี้ผู้ใช้ของคุณไปยังlocalไดเรกทอรีนั้น ชี้ไปยังแหล่งต้นฉบับแทน
Rodney Price

มันเยี่ยมมาก! แต่เมื่อฉันใช้กับไฟล์ tar บน windows tar ที่เสียจะถูกอัปโหลดและฉันต้องคัดลอกมันเองอีกครั้ง ข้อผิดพลาดใน Emacs? 24.5
fommil

1

หากคุณต้องการโฮสต์บางอย่างเช่น MELPA คุณสามารถค้นหาคำแนะนำเกี่ยวกับวิกิของ MELPA เกี่ยวกับวิธีโฮสต์อินสแตนซ์ MELPA ของคุณเอง:

https://github.com/melpa/melpa/wiki/Custom-Melpa-Archive

เป็นหลักมันเดือดลงไปที่:

  1. แยก / โคลนที่เก็บ MELPA GitHub
  2. ลบสูตรที่มีอยู่ทั้งหมดจากrecipes/ไดเรกทอรี
  3. เพิ่มสูตรของคุณเอง
  4. makeวิ่ง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.