Umbraco 패키지용 폴리필
A polyfill is a piece of code (usually JavaScript on the Web) used to provide modern functionality on older browsers that do not natively support it.
https://developer.mozilla.org/en-US/docs/Glossary/Polyfill
일반적으로 폴리필은 프런트 엔드 웹 개발 컨텍스트에서 참조되지만 서버 측 API에도 적용될 수 있습니다.
Umbraco 패키지와 어떤 관련이 있습니까?
작년 이맘때 I'd started migrating my Umbraco package , Contentment ASP.NET Core 5에서 Umbraco 9을 지원합니다. 초기 접근 방식은 Umbraco 9에만 집중하기 위해 Umbraco 8에 대한 지원을 중단하는 것이었습니다. 저를 괴롭힌 결정이었습니다.
코드 마이그레이션 중에 동료 Umbraco 패키지 개발자와 동일한 코드베이스 내에서 multi-targeting .NET frameworks에 대해 논의했으며 실제로 가능했습니다. Contentment가 여전히 Umbraco 8을 지원할 수 있음을 의미합니다./
#if
전처리기 지시문이 코드베이스 전체에 흩어져 있습니다.For more details on this approach, take a read of
the Package Migration to V9 Using Multi-Targeting post on the Umbraco blog.
#if NET
private readonly ILogger<MyClass> _logger;
public MyClass(ILogger<MyClass> logger)
{
_logger = logger;
}
#else
private readonly ILogger _logger;
public MyClass(ILogger logger)
{
_logger = logger;
}
#endif
public void MyMethod()
{
// Do some common logic and log a result
var result = "Some value";
#if NET
_logger.Debug(result);
#else
_logger.Debug<MyClass>(result);
#endif
}
Code snippet taken from 's post.
다중 타겟팅이라는 아이디어가 정말 마음에 들었지만 전처리기 지시문의 양이 어리석어지기 시작했습니다. 그 이유와 그에 대해 무엇을 할 수 있는지 궁금했습니다.
물론 Umbraco 8과 9 사이의 API는 달랐고 일부 변경 사항은 미묘했고 다른 변경 사항은 중단되었습니다. 모두 이해할 수 있는 이유가 있습니다.
Contentment에서 가장 일반적인 부분 중 하나는
#else
가 더 이상 정적 메서드가 아니며 새IOHelper.ResolveUrl()
인스턴스를 주입해야 한다는 것입니다. 즉, 클래스 생성자에 추가 매개 변수를 추가해야 합니다.IIOHelper
는 Umbraco 8에서 사용할 수 없었기 때문에 조건부 전처리기 지시문을 사용하게 되었습니다...#if NET472
public DropdownListDataListEditor()
{
}
#else
private readonly IIOHelper _ioHelper;
public DropdownListDataListEditor(IIOHelper ioHelper)
{
_ioHelper = ioHelper;
}
#endif
...그리고 이것은 많은 곳에서 일어났습니다!
내 생각은 Umbraco 8에서만
IIOHelper
에 대한 폴리필을 도입할 수 있다는 것이었습니다. (v8 로드맵이 주어지면 v8.x 패치 릴리스에 추가될지 의심스럽습니다.) 그래서 그렇게 했습니다. here's a link to the code for the IIOHelper
polyfill 및 how it is registered using dependency injection in a Composer .이제 내 코드는 다음과 같습니다 ...
private readonly IIOHelper _ioHelper;
public DropdownListDataListEditor(IIOHelper ioHelper)
{
_ioHelper = ioHelper;
}
조건부 전처리기 지시문의 필요성을 제거하고 동일한 기능과 논리를 유지합니다.
다른 v9 전용 인터페이스 및 서비스에 이 접근 방식을 적용하여 Contentment 코드베이스의 장황함을 줄일 수 있었습니다. You can see the other polyfill code on the GitHub repository .
좋아, 이제 뭐?
이것은 내 만족 패키지, 행복한 날에 모두 좋았습니다. 새로운 Umbraco 패키지 개발을 시작할 때까지. 나는 Umbraco 9에 대한 코드를 개발했지만 코드를 검토했을 때 몇 가지 조건부 전처리 지시문을 사용하여 Umbraco 8에 대한 지원을 추가할 가능성을 볼 수 있었습니다. 그래서 Contentment에서 polyfill 코드를 복사했습니다... 잠깐만요.
이 시점에서 폴리필 코드를 자체 코드 라이브러리로 분리하여 다른(향후) Umbraco 패키지에서 참조할 수 있도록 했습니다.
https://github.com/leekelleher/umbraco-polyfill
...그리고 NuGet 패키지를 출시했습니다.
https://www.nuget.org/packages/Our.Umbraco.Community.Polyfill/
현재 릴리스에서 이 라이브러리는 계속 진행 중인 작업으로 간주되어야 하며 완전한 기능이 아닙니다. 패키지 개발자이고 누락된 기능이 있는 경우 I'm happy to collaborate with you on the GitHub repository .
Reference
이 문제에 관하여(Umbraco 패키지용 폴리필), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/leekelleher/a-polyfill-for-umbraco-packages-3ljc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)