알프레드 워크 플로를 쉽게 만듭니다
node 바이너리를 찾습니다.await 의 지원..catch() 최상위 약속이 필요하지 않습니다. 유료 PowerPack 업그레이드와 함께 Node.js 18+ 및 Alfred 4 이상이 필요합니다.
npm install alfy중요 : 스크립트는 ESM으로 실행됩니다.
새 빈 알프레드 워크 플로를 만듭니다.
Script Filter 추가 (캔버스 → Inputs → Script Filter 마우스 오른쪽 버튼으로 클릭)하고 Language /bin/bash 로 설정하고 다음 스크립트를 추가하십시오.
./node_modules/.bin/run-node index.js "$1"
MacOS의 GUI 앱이 $ 경로를 상속하지 않으므로 node 직접 호출 할 수 없습니다.
팁 : Generator-alfred를 사용하여
alfy기반 워크 플로를 발산 할 수 있습니다. 그렇다면 나머지 단계를 건너 뛰고index.js로 바로 가서 일을 할 수 있습니다.
워크 플로를 호출하려는 Keyword 설정하십시오.
새 워크 플로 디렉토리로 이동하십시오 (사이드 바의 워크 플로를 마우스 오른쪽 버튼으로 클릭하십시오 → Open in Finder ).
npm init 로 리포를 초기화하십시오.
"type": "module" package.json에 추가하십시오.
npm install alfy 하십시오.
워크 플로 디렉토리에서 index.js 파일을 만들고 alfy 가져오고 당신의 일을하십시오.
여기서 우리는 자리 표시 자 API에서 JSON을 가져 와서 일치하는 항목을 사용자에게 선물합니다.
import alfy from 'alfy' ;
const data = await alfy . fetch ( 'https://jsonplaceholder.typicode.com/posts' ) ;
const items = alfy
. inputMatches ( data , 'title' )
. map ( element => ( {
title : element . title ,
subtitle : element . body ,
arg : element . id
} ) ) ;
alfy . output ( items ) ; 
야생의 일부 예제 : alfred-npms , alfred-emoj , alfred-ng .
Alfy는 백그라운드에서 Alfred-Notifier를 사용하여 워크 플로에 대한 업데이트를 사용할 수있을 때 알림을 표시합니다.

Alfy는 페치와 함께 또는 캐시 객체를 통해 데이터 캐싱 가능성을 제공합니다.
중요한 것은 워크 플로를 업데이트 할 때 캐시 된 데이터가 자동으로 무효화된다는 것입니다. 이를 통해 개발자가 유효하지 않은 이전 데이터에 대해 걱정하지 않고 워크 플로 간의 캐시 된 데이터 구조를 변경할 수있는 유연성을 제공합니다.
alfy-init postinstall 로, preuninstall 스크립트로 alfy-cleanup 로 추가하면 패키지 대신 NPM에 패키지를 게시 할 수 있습니다. 이런 식으로 패키지는 단 하나의 간단한 npm install 명령입니다.
{
"name" : " alfred-unicorn " ,
"version" : " 1.0.0 " ,
"description" : " My awesome unicorn workflow " ,
"author" : {
"name" : " Sindre Sorhus " ,
"email" : " [email protected] " ,
"url" : " https://sindresorhus.com "
},
"scripts" : {
"postinstall" : " alfy-init " ,
"preuninstall" : " alfy-cleanup "
},
"dependencies" : {
"alfy" : " * "
}
}팁 : NPM을 통해 쉽게 검색 할 수 있도록 워크 플로를
alfred-로 접두사로 접두사하십시오.
info.plist 파일에서 설치 시간에 자동으로 추가 될 때 이러한 속성을 제거 할 수 있습니다.
워크 플로를 NPM에 게시 한 후 사용자는 워크 플로를 쉽게 설치하거나 업데이트 할 수 있습니다.
npm install --global alfred-unicorn팁 : 모든 워크 플로우를 수동으로 업데이트하는 대신 Alfred-Updater 워크 플로우를 사용하여이를 수행하십시오.
워크 플로는 Alfy-Test로 쉽게 테스트 할 수 있습니다. 다음은 작은 예입니다.
import test from 'ava' ;
import alfyTest from 'alfy-test' ;
test ( 'main' , async t => {
const alfy = alfyTest ( ) ;
const result = await alfy ( 'workflow input' ) ;
t . deepEqual ( result , [
{
title : 'foo' ,
subtitle : 'bar'
}
] ) ;
} ) ; 워크 플로를 개발할 때 무언가가 작동하지 않을 때 디버깅 할 수있는 것이 유용 할 수 있습니다. 워크 플로 디버거가 유용 할 때입니다. Alfred의 워크 플로 뷰에서 찾을 수 있습니다. 곤충 아이콘을 눌러 열 수 있습니다. alfy.output() 의 일반 텍스트 출력과 alfy.log() 로 로그인 한 내용을 보여줍니다.
import alfy from 'alfy' ;
const unicorn = getUnicorn ( ) ;
alfy . log ( unicorn ) ; Alfred는 사용자가 워크 플로우에 대한 환경 변수를 설정하여 해당 워크 플로에서 사용할 수 있습니다. 예를 들어, 서비스에 API 토큰을 지정하려면 사용자가 필요한 경우 유용 할 수 있습니다. process.env 에서 워크 플로 환경 변수에 액세스 할 수 있습니다. 예를 들어 process.env.apiToken .
유형 : string
알프레드의 입력. 사용자가 입력 상자에 쓴 내용.
알프레드로의 출력을 반환합니다.
유형 : object[]
지원되는 속성이있는 object 목록.
예:
import alfy from 'alfy' ;
alfy . output ( [
{
title : 'Unicorn'
} ,
{
title : 'Rainbow'
}
] ) ; 유형 : object
유형 : number (초)
값 : 0.1...5.0
간격 후 스크립트를 자동으로 재회하도록 설정할 수 있습니다. 스크립트는 스크립트 필터가 여전히 활성화되어 있고 사용자가 다시 실행을 입력하고 트리거하여 필터 상태를 변경하지 않은 경우에만 재회됩니다. 더 많은 정보.
예를 들어, 특정 작업의 진행 상황을 업데이트하는 데 사용될 수 있습니다.
import alfy from 'alfy' ;
alfy . output (
[
{
title : 'Downloading Unicorns…' ,
subtitle : ` ${ progress } %` ,
}
] ,
{
// Re-run and update progress every 3 seconds.
rerunInterval : 3
}
) ; 
Alfred Workflow Debugger에 로그 value .
사례에 비면적으로 input 포함하는 list 에있는 항목의 string[] 반환합니다.
import alfy from 'alfy' ;
alfy . matches ( 'Corn' , [ 'foo' , 'unicorn' ] ) ;
//=> ['unicorn'] 유형 : string
list 항목과 일치하는 텍스트.
유형 : string[]
일치 할 목록.
유형 : string | Function
기본적으로 list 항목과 일치합니다.
객체 속성과 일치하는 문자열을 지정하십시오.
import alfy from 'alfy' ;
const list = [
{
title : 'foo'
} ,
{
title : 'unicorn'
}
] ;
alfy . matches ( 'Unicorn' , list , 'title' ) ;
//=> [{title: 'unicorn'}]또는 중첩 재산 :
import alfy from 'alfy' ;
const list = [
{
name : {
first : 'John' ,
last : 'Doe'
}
} ,
{
name : {
first : 'Sindre' ,
last : 'Sorhus'
}
}
] ;
alfy . matches ( 'sindre' , list , 'name.first' ) ;
//=> [{name: {first: 'Sindre', last: 'Sorhus'}}]일치하는 것을 직접 처리 할 함수를 지정하십시오. 이 함수는 인수로 인수로 낮은 항목과 입력을 수신하며 부울이 일치하는지 여부에 대한 부울을 반환 할 것으로 예상됩니다.
import alfy from 'alfy' ;
const list = [ 'foo' , 'unicorn' ] ;
// Here we do an exact match.
// `Foo` matches the item since it's lowercased for you.
alfy . matches ( 'Foo' , list , ( item , input ) => item === input ) ;
//=> ['foo'] matches() 와 동일하지만 alfy.input input 으로.
여러 항목과 일치하려면 여기에 표시된대로 자신의 일치 기능을 정의해야합니다. title 이나 body 속성 또는 둘 다에 나타나는 키워드를 검색하기 위해 처음부터 예제를 확장하겠습니다.
import alfy from 'alfy' ;
const data = await alfy . fetch ( 'https://jsonplaceholder.typicode.com/posts' ) ;
const items = alfy
. inputMatches (
data ,
( item , input ) =>
item . title ?. toLowerCase ( ) . includes ( input ) ||
item . body ?. toLowerCase ( ) . includes ( input )
)
. map ( ( element ) => ( {
title : element . title ,
subtitle : element . body ,
arg : element . id ,
} ) ) ;
alfy . output ( items ) ; Alfred에 오류 또는 오류 메시지가 표시됩니다.
참고 : .catch() 최상위 약속이 필요하지 않습니다. Alfy는 당신을 위해 그것을 처리합니다.
유형 : Error | string
표시 할 오류 또는 오류 메시지.

응답의 본문을 반환하는 Promise 반환합니다.
유형 : string
가져 오는 URL.
유형 : object
got 옵션 및 아래 옵션 중 하나입니다.
유형 : boolean
기본값 : true
JSON.parse 로 응답 본문을 구문 분석하고 application/json 에 헤더를 accept .
유형 : number
밀리 초 수이 요청은 캐시해야합니다.
유형 : boolean
기본값 : true
신체 또는 전체 응답으로 해결할지 여부.
import alfy from 'alfy' ;
await alfy . fetch ( 'https://api.foo.com' ) ;
//=> {foo: 'bar'}
await alfy . fetch ( 'https://api.foo.com' , {
resolveBodyOnly : false
} ) ;
/*
{
body: {
foo: 'bar'
},
headers: {
'content-type': 'application/json'
}
}
*/ 유형 : Function
응답 본문이 캐시되기 전에 변환하십시오.
import alfy from 'alfy' ;
await alfy . fetch ( 'https://api.foo.com' , {
transform : body => {
body . foo = 'bar' ;
return body ;
}
} )응답을 변환하십시오.
import alfy from 'alfy' ;
await alfy . fetch ( 'https://api.foo.com' , {
resolveBodyOnly : false ,
transform : response => {
response . body . foo = 'bar' ;
return response ;
}
} )약속을 되돌릴 수도 있습니다.
import alfy from 'alfy' ;
import xml2js from 'xml2js' ;
import pify from 'pify' ;
const parseString = pify ( xml2js . parseString ) ;
await alfy . fetch ( 'https://api.foo.com' , {
transform : body => parseString ( body )
} ) 유형 : object
구성 데이터를 지속하십시오.
올바른 구성 경로 세트로 conf 인스턴스를 내 보냅니다.
예:
import alfy from 'alfy' ;
alfy . config . set ( 'unicorn' , '?' ) ;
alfy . config . get ( 'unicorn' ) ;
//=> '?' 유형 : Map
사용자 워크 플로 구성으로 맵을 내 보냅니다. 워크 플로 구성을 통해 사용자는 워크 플로에 대한 구성 정보를 제공 할 수 있습니다. 예를 들어, GitHub 워크 플로우를 개발하는 경우 사용자가 자신의 API 토큰을 제공 할 수 있습니다.
자세한 내용은 alfred-config 참조하십시오.
예:
import alfy from 'alfy' ;
alfy . userConfig . get ( 'apiKey' ) ;
//=> '16811cad1b8547478b3e53eae2e0f083' 유형 : object
캐시 데이터를 지속하십시오.
올바른 캐시 경로 세트로 수정 된 conf 인스턴스를 내 보냅니다.
예:
import alfy from 'alfy' ;
alfy . cache . set ( 'unicorn' , '?' ) ;
alfy . cache . get ( 'unicorn' ) ;
//=> '?' 이 인스턴스의 set 방법은 maxAge 옵션을 제공 할 수있는 선택적 세 번째 인수를 수용합니다. maxAge 는 값이 캐시에서 유효한 밀리 초입니다.
예:
import alfy from 'alfy' ;
import delay from 'delay' ;
alfy . cache . set ( 'foo' , 'bar' , { maxAge : 5000 } ) ;
alfy . cache . get ( 'foo' ) ;
//=> 'bar'
// Wait 5 seconds
await delay ( 5000 ) ;
alfy . cache . get ( 'foo' ) ;
//=> undefined 유형 : boolean
사용자가 현재 워크 플로 디버거가 열려 있는지 여부
유형 : object
열쇠 : 'info' | 'warning' | 'error' | 'alert' | 'like' | 'delete'
다양한 기본 시스템 아이콘을 가져옵니다.
가장 유용한 것은 키로 포함되어 있습니다. 나머지는 icon.get() 로 얻을 수 있습니다. Finder에서 /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources 로 이동하여 모두 확인하십시오.
예:
import alfy from 'alfy' ;
console . log ( alfy . icon . error ) ;
//=> '/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/AlertStopIcon.icns'
console . log ( alfy . icon . get ( 'Clock' ) ) ;
//=> '/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/Clock.icns' 유형 : object
예:
{
name : 'Emoj' ,
version : '0.2.5' ,
uid : 'user.workflow.B0AC54EC-601C-479A-9428-01F9FD732959' ,
bundleId : 'com.sindresorhus.emoj'
} 유형 : object
알프레드 메타 데이터.
예 : '3.0.2'
사용자가 현재 실행중인 버전을 찾으십시오. 워크 플로가 특정 Alfred 버전의 기능에 의존하는 경우 유용 할 수 있습니다.
예 : 'alfred.theme.yosemite'
현재 테마가 사용되었습니다.
예 : 'rgba(255,255,255,0.98)'
즉석에서 아이콘을 만들면 테마 배경의 색상을 찾을 수 있습니다.
예 : 'rgba(255,255,255,0.98)'
선택한 결과의 색상.
예 : 3
사용자가 모양 환경 설정에서 선택한 하위 텍스트 모드를 찾으십시오.
사용 가능성 참고 : 이것은 개발자가 사용자의 선택한 모드를 기반으로 결과 텍스트를 조정할 수 있도록 사용할 수 있지만, 사용자가 일반적으로 서브 텍스트를 숨기는 주된 이유는 Alfred를 클리너처럼 보이게하는 것이기 때문에 워크 플로우의 결과 텍스트는 불필요하게 부풀어 오지 않아야합니다.
예 : '/Users/sindresorhus/Library/Application Support/Alfred/Workflow Data/com.sindresorhus.npms'
비 휘발성 데이터 권장 위치. 이 경로를 사용하는 alfy.data 만 사용하십시오.
예 : '/Users/sindresorhus/Library/Caches/com.runningwithcrayons.Alfred/Workflow Data/com.sindresorhus.npms'
휘발성 데이터 권장 위치. 이 경로를 사용하는 alfy.cache 사용하십시오.
예 : '/Users/sindresorhus/Dropbox/Alfred/Alfred.alfredpreferences'
이것은 Alfred.alfredpreferences 의 위치입니다. 사용자가 설정을 동기화 한 경우 Sync 상태에 관계없이 설정이 어디에 있는지 확인할 수 있습니다.
예 : 'adbd4f66bc3ae8493832af61a41ee609b20d8705'
비 동기화 로컬 환경 설정은 …/preferences/local/${preferencesLocalHash}/ 에 따라 Alfred.alfredpreferences 내에 저장됩니다.
Alfy를 사용한 Alfred 워크 플로우