dart-sass로 phoenix용 TravisCI 구성

프로덕션에서 풀 스택 PhoenixFramework 앱을 사용하여 몇 년이 지난 후 노드-Sass가 많이 중단된다는 상수가 있습니다. 2주마다 노드 모듈에 주의를 기울이지 않아 보안 패치가 적용되었으며, node-sass에 의해 차단되어 임의의 이유로 컴파일할 수 없습니다.

노드 및 WebPack 무료 자산 빌드와 함께 Phoenix 1.6이 출시되었을 때 우리는 WebPack에서 마이그레이션을 계획하기로 결정했으며 주요 동기는 가능한 한 많은 노드 종속성을 제거하는 것이었습니다. 마지막에는 부트스트랩과 관련된 일부 노드 모듈을 유지합니다.

우리가 따르는 프로세스는 다음에서 제공한 문서를 기반으로 합니다.

https://github.com/phoenixframework/esbuild
https://github.com/CargoSense/dart_sass

Dart Sass를 사용하기로 한 결정은 더 이상 기능을 추가하지 않기로 한 sass 프로젝트의 결정 때문이었습니다. 또한 대부분의 문제의 원인이 되는 단일 바이너리 종속성을 제거할 수 있다면 큰 장점이었습니다.

배포를 시도할 때까지 모든 것이 순조롭게 진행되었습니다.

당사의 인프라는 RackSpace의 VM에 배포됩니다. Travis CI 프로세스를 사용하여 애플리케이션을 컴파일하고 배포합니다. 우리는 Capistrano를 사용하여 RS 서버에 푸시되고 배포되는 tar 파일을 빌드할 수 있습니다. 서버 측에 대한 종속성이 거의 없고 빌드 도구가 없으며 루비, 엘릭서 또는 OTP가 설치되어 있지 않고 기본 Linux 설치만 있습니다.

그래서 지침에 따라 Linux Homebrew(linuxbrew)를 설치했습니다.

before_install:
  - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  - export PATH=/home/linuxbrew/.linuxbrew/bin:$PATH
  - test -r ~/.bash_profile && echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> ~/.bashrc
  - brew install sass/sass/sass


이 오류가 발생했습니다.

pub get
Because sass depends on cli_pkg ^2.1.0 which doesn't match any versions, version solving failed.


몇 가지 조사 후 범인을 찾았습니다.



요약: dart-sass 종속성( cli_pkg ) 게시 버전 2.1.0, 사람들이 라이브러리에 포함하기 시작한 다음 취소되어 이제 dart-sass가 패키지를 빌드할 수 없습니다.

그래서 저는 대안을 찾기 시작했고 첫 번째 시도는 탭된 버전을 재정의하는 것이었습니다.

 - brew tap sass/sass
  - sed -i 's/archive\/1\.49\.10/archive\/1.49.9/' /home/linuxbrew/.linuxbrew/Homebrew/Library/Taps/sass/homebrew-sass/sass.rb
  - sed -i 's/3887b89d99fd52e49e5a33ec78b3705a25a6267bd9f85c16fc85a6f4bdf154e5/0df1e9d5ff73a752fe864fac58d8a010c3a089b07d9ba9a05f54d493fd26af8b/' /home/linuxbrew/.linuxbrew/Homebrew/Library/Taps/sass/homebrew-sass/sass.rb
Author


이것이 얼마나 끔찍한 일인지 깨닫고 dart-sass의 문서를 다시 읽은 후 사전 빌드된 바이너리 사용을 권장하는 것이 얼마나 명확한지 확인했습니다. 그래서 다음과 같이 했습니다.

before_install:
  - rvm install 'ruby-3.0.0'
  - curl -L https://github.com/sass/dart-sass/releases/download/1.49.10/dart-sass-1.49.10-linux-x64.tar.gz > dart-sass-1.49.10-linux-x64.tar.gz
  - tar -xvf dart-sass-1.49.10-linux-x64.tar.gz
  - echo 'export PATH="$PATH:$HOME/build/amco/contentinator/dart-sass:$PATH"' >> ~/.bashrc


잘 작동합니다!

이 문제는 어제부터 나에게 문제였으며 오늘 해결 방법을 찾았고 이제 버그가 해결되었습니다. 나는 Linuxbrew를 다시 사용하려고 시도하지 않았고 아마도 그렇게 하지 않을 것입니다. 독립 실행형 라이브러리를 유지하고 버전 관리를 처리하기 위해 insdie capistrano 작업을 작성할 수도 있습니다.

PR이 푸시되었고 내 package-lock.json 파일이 13,000줄 이상에서 75줄로 줄었습니다. 🎉

좋은 웹페이지 즐겨찾기