根據Apple's Developer Docs的Library
全球允許一個要導入編譯的腳本,使他們能夠在一個目前被用作腳本庫。這個工作,如果你是做類似下面的代碼與myLibName.scpt
位於~/Library/Script Libraries
就好:爲什麼OSA_LIBRARY_PATH不能像JXA中記錄的那樣工作?
myLib = Library('myLibName');
myLib.myLibMethod() // Works just fine
但,該文檔還聲稱,一個可以導出一個環境變量 - OSA_LIBRARY_PATH
含分隔的:
串~/Library/Script Libraries
: - 路徑和Library()
然後將前進行到它的默認路徑推遲到路徑該列表。雅知道,像bash環境變量Path
。以下是相關的文檔。它描述了路徑層次:
的腳本的基本要求是一個腳本 庫是它的地理位置:它必須是一個「腳本 庫」文件夾中的文件腳本中的下列文件夾之一。當 庫中搜索,位置進行搜索中列出的順序,並使用 第一個匹配的腳本:
- 如果引用庫中的腳本是一個包,腳本的 束資源目錄。這意味着腳本可能被打包爲 ,並隨其使用的庫一起分發。
- 如果運行該腳本的應用程序是一個包,應用程序的捆綁資源 目錄。這意味着腳本應用程序(「applets」和 「水滴」)可以打包並分發到它們使用的庫中。它還使運行腳本的應用程序能夠提供 庫供這些腳本使用。
- 環境變量OSA_LIBRARY_PATH指定的任何文件夾。這允許使用庫 而不將其安裝在其中一個常用位置。此 變量的值是以冒號分隔的路徑列表,例如/ opt/local/Script 庫:/ usr/local/Script Libraries。與其他庫 位置不同,在OSA_LIBRARY_PATH中指定的路徑完全按照原樣使用, 未附加「腳本庫」。稍後在OS X v10.11和 中受支持。
- 用戶主目錄中的Library文件夾〜/ Library。 這是安裝庫以供單個用戶使用的位置, 並且是庫開發期間的推薦位置。
- 計算機庫文件夾/ Library。位於這裏的庫是 可用於計算機的所有用戶。
- 網絡庫文件夾, /網絡/庫。位於此處的庫可用於網絡上的多臺 計算機。
- 系統庫文件夾/ System/Library。 這是由OS X.
- 任何安裝的應用程序 包提供的庫,在應用程序的包庫目錄。這允許 分發與應用程序相關聯的庫,或者 創建僅存在於分發庫的應用程序。 在OS X v10.11及更高版本中受支持。
問題是它不起作用。我已經嘗試導出OSA_LIBRARY_PATH
變量 - 全局通過我的.zshrc
文件 - 然後通過腳本編輯器和osascript
可執行文件運行上面的示例腳本。什麼都行不通我收到「文件未找到」錯誤。我在網上找到這個thread-where-the-participants-give-up-hope;它沒有多少解釋。有什麼想法嗎?
在一個有點相關說明,腳本附加套件提供了另外兩種方法 - loadScript
和storeScript
- 似乎像他們可能是有用的在這裏。不幸的是,當你嘗試使用它們時,osascript
會給你一個手指。雖然,我確實設法使用loadScript
從編譯的腳本中返回看起來像十六進制緩衝區的內容。無論如何,任何洞察你們可以擺脫這一點將不勝感激。謝謝。
設置*殼的智慧*的東西,被設計用來* GUI中運行*應用程序變量超出凡人的縣,由於是把JXA庫中的邏輯與AS庫相同的文件夾,即使它們100%不兼容。 'load script'命令爲從任何位置加載'.scpt'文件提供了一個基本的機制,但確實希望它所服務的OSA語言組件不是全部的訣竅。哪個JXA是。老實說,如果你必須使用JXA,我建議你嘗試找到一種使用Node模塊的方法,因爲JXA在這個東西上是廢話。 – foo
任何嘗試與Apple事件管理器通話的節點模塊都必須通過osascript。我錯過了你評論的觀點;您尚未回答問題或添加任何新信息。也許嘗試和更有幫助?或者不要。 –
沒有任何好的答案給。 JXA非常生氣,或者堅持AS。如果你想加載通用的JS模塊,看看你是否可以使用節點的模塊系統。 1.它比JXA的模塊加載器更好。你可以訪問一大堆預先存在的JS模塊,而JXA則是蹲點。是的,如果你想將AE/Cocoa代碼放在模塊中,你必須使用.scpt文件,在這種情況下,要麼使用現有的庫文件夾(假設你沒有相同名稱的AS模塊,或者他們會發生衝突),或將腳本保存爲。scptd並把模塊放在裏面。 – foo