Node 버전 관리
n8n은 node 버전 관리를 지원합니다. n8n이 로드할 node 버전을 결정하는 방식에 유의하세요: 선언형 스타일을 사용하여 node를 빌드하는 경우 전체 버전 관리를 사용할 수 없습니다. 모든 node 타입에서 사용 가능합니다.
n8n은 node 버전 관리를 지원합니다. 새 버전을 도입하여 기존 동작을 손상시키지 않고 기존 node를 변경할 수 있습니다.
n8n이 로드할 node 버전을 결정하는 방식에 유의하세요:
- 사용자가 버전 1을 사용하여 워크플로를 빌드하고 저장하면, 버전 2를 생성하고 게시하더라도 n8n은 해당 워크플로에서 버전 1을 계속 사용합니다.
- 사용자가 새 워크플로를 생성하고 node를 검색하면, n8n은 항상 node의 최신 버전을 로드합니다.
선언형 스타일을 사용하여 node를 빌드하는 경우 전체 버전 관리를 사용할 수 없습니다.
가벼운 버전 관리#
모든 node 타입에서 사용 가능합니다.
하나의 node에 두 개 이상의 버전을 포함할 수 있어, 코드 중복 없이 소규모 버전 증분이 가능합니다. 이 기능을 사용하려면:
- 메인
version파라미터를 배열로 변경하고, 기존 버전을 포함하여 버전 번호를 추가합니다. - 그런 다음 오브젝트의
displayOptions에서@version으로 버전 파라미터에 접근할 수 있습니다(n8n이 어떤 버전과 함께 오브젝트를 표시할지 제어하기 위해). 함수에서const nodeVersion = this.getNode().typeVersion;을 사용하여 버전을 쿼리할 수도 있습니다.
예를 들어, 선언형 node 튜토리얼의 NasaPics node에 버전 관리를 추가하고, node 버전 2에서만 n8n이 리소스를 표시하도록 구성한다고 가정해 보겠습니다. 기본 NasaPics.node.ts 파일에서:
{
displayName: 'NASA Pics',
name: 'NasaPics',
icon: 'file:nasapics.svg',
// 사용 가능한 버전 목록
version: [1,2,3],
// 여기에 더 많은 기본 파라미터
properties: [
// 버전 2에서만 표시되는 리소스 추가
{
displayName: 'Resource name',
// 더 많은 리소스 파라미터
displayOptions: {
show: {
'@version': 2,
},
},
},
],
}
기능 기반 버전 관리#
기능 플래그를 사용하면 node 버전에 연결된 명명된 기능을 기반으로 파라미터 가시성과 실행 로직을 제어할 수 있습니다.
기능 정의#
node 타입 설명에 features 오브젝트를 추가합니다. 각 기능은 @version 조건을 사용하여 어떤 버전에서 활성화되는지 지정합니다:
{
version: [2, 2.1, 2.2, 2.3, 2.4],
features: {
useNewApi: { '@version': [{ _cnd: { gte: 2.2 } }] },
useLegacyAuth: { '@version': [{ _cnd: { lte: 2.1 } }] },
useSpecialMode: { '@version': [2] },
},
// 더 많은 기본 파라미터
}
사용 가능한 조건: gte, lte, gt, lt. 특정 버전과 일치시키려면 일반 버전 번호를 전달합니다.
displayOptions에서 @feature 사용#
displayOptions에서 @feature를 사용하여 기능 플래그를 기반으로 파라미터 가시성을 제어합니다:
{
displayName: 'New API Field',
name: 'newApiField',
type: 'string',
displayOptions: {
show: {
'@feature': ['useNewApi'],
},
},
}
기능이 비활성화되었을 때 파라미터를 표시하려면 조건 구문을 사용합니다:
displayOptions: {
show: {
'@feature': [{ _cnd: { not: 'useNewApi' } }],
},
}
@feature와 다른 표시 조건을 결합할 수 있습니다:
displayOptions: {
show: {
resource: ['myResource'],
'@feature': [{ _cnd: { eq: 'useNewApi' } }],
},
}
코드에서 기능 확인#
실행 컨텍스트(예: IExecuteFunctions 또는 IWebhookFunctions)에서 this.isNodeFeatureEnabled()를 사용합니다:
if (this.isNodeFeatureEnabled('useNewApi')) {
// 새 API로 처리
} else {
// 레거시 API로 처리
}
전체 버전 관리#
선언형 스타일 node에서는 사용할 수 없습니다.
예시로 Mattermost node를 참고하세요.
전체 버전 관리 요약:
- 기본 node 파일은
INodeType대신NodeVersionedType을 확장해야 합니다. - 기본 node 파일에는
defaultVersion(일반적으로 최신 버전), node 이름 등의 다른 기본 node 메타데이터, 버전 목록을 포함한 설명이 있어야 합니다. node 기능은 포함되지 않아야 합니다. - n8n은 버전 폴더 이름으로
v1,v2등을 사용하는 것을 권장합니다.
