종속성과 함께 노드 앱을 패키징하는 방법

노드 앱을 구축하는 것은 쉽지만 Arch Linux에서 앱을 패키징하기 전에 몇 가지 사항을 확인해야 합니다.

종속성



각 노드 앱에는 종속성을 지정하는 package.json가 있으며 나중에 node_modules 폴더에 설치됩니다.

우리 앱은 이러한 종속성의 어떤 버전과도 호환되지 않으므로 package.jsonSemantic Versioning, (a.k.a. semver)를 사용하여 호환성 범위를 지정합니다.

이 버전 관리로 인해 node_modules 콘텐츠를 시스템 전체에 설치하지 않으려면 /usr/lib/<package-name> 폴더 안에 설치해야 합니다. 이를 염두에 두고 패키지를 빌드해야 합니다. 갑시다!

이 게시물에서는 PKGBUILD에 대해 webtorrent-cli을 사용하고 feross에 의해 구동됩니다.

패키지 설치



노드 앱에 TypeScript 파일을 Nodejs 호환 JavaScript 코드로 변환하는 것과 같은 빌드 프로세스가 필요하지 않은 경우 build()에서 이 간단한 PKGBUILD 함수를 사용할 수 있습니다.

build() {
  cd "$srcdir/$pkgname-$pkgver"

  npm install --production
}
devDependencies에 선언된 package.json를 설치할 필요가 없으므로 --production는 이 앱의 패키지 크기를 줄입니다.

하지만 빌드 프로세스가 있다면 어떨까요? 그러면 우리의 build()는 다음과 같이 될 것입니다.

build() {
  cd "$srcdir/$pkgname-$pkgver"
  npm install
  npm run build
  npm prune --production
}

빌드 프로세스를 완료한 후 devDependencies 명령을 사용하여 npm prune --production를 제거해야 합니다.

노드 모듈 패키징



패키지 내부의 node_modules 폴더와 앱 코드 자체를 복사해야 합니다.

package() {
  install -dm755 "${pkgdir}/usr/lib/${pkgname}"
  cp -a bin node_modules package.json "${pkgdir}/usr/lib/${pkgname}/"
}

💡 팁: ${var}는 Bash에서 변수$var를 참조하는 또 다른 방법입니다.

포장하기 전에 코드를 확인하십시오



ArchWikicheck() 기능을 사용할 것을 권장합니다. 이 단계는 buildpackage 사이에 발생하며 현재 플랫폼과의 호환성을 확인하기 위해 테스트를 실행하기에 완벽한 장소입니다.

build() {
  cd "$srcdir/$pkgname-$pkgver"
  npm install
  npm run build
}

check() {
  cd "$srcdir/$pkgname-$pkgver"
  npm test
  npm prune --production
}

테스트 라이브러리는 프로덕션 런타임에서 사용되지 않기 때문에 일반적으로 devDepenciespackage.json에 있습니다. 따라서 node_modules 대신 check() 단계에서 build()를 가지치기해야 합니다.

nvm을 사용하여 빌드



그리고 오늘의 마지막 이슈는 nvm 입니다. 특정 노드 버전에서 패키지를 빌드해야 하는 경우 nvm 패키지를 사용해야 합니다.

우리는 이미 Arch Linux가 롤링 릴리스라는 것을 알고 있으므로 공식nodejs 패키지는 최신 LTS가 아닌 최신 버전입니다.

🧠 노드 팀은 이 버전current을 호출하고, 짝수 번호의 메이저 버전은 새로운 메이저 버전이 나타날 때 장기 지원으로 전환됩니다. 현재 current 버전은 14.x이며 15.0.0current로 공개 릴리스되면 14.x가 사용 가능한 최신 LTS가 됩니다.
nvmmakedepends로 추가해야 하며, PKGBUILD에 필요한 노드 버전을 변수로 추가하면 좋습니다.

_nodeversion=12
makedepends=('npm' 'nvm')

그런 다음 nvmbuild() 함수에 추가합니다.

build() {
  source /usr/share/nvm/init-nvm.sh
  nvm use ${_nodeversion} || nvm install ${_nodeversion}
  cd "$srcdir/$pkgname-$pkgver"

  npm install --production
}

여기에 몇 가지가 있습니다. 먼저 init-nvm.sh 함수에 build()를 로드합니다. 이제 설치된 12.x 버전을 nvm use 12 명령과 함께 사용할 수 있습니다. 노드 v12가 설치되지 않은 경우 nvm install 12를 사용하여 설치를 진행합니다.

끝났다! 패키지를 배송할 수 있습니다. 😁

좋은 웹페이지 즐겨찾기