작업 - 간단한 구축을 위한 편리한 도구
15739 단어 javascripttutorialwebdevproductivity
task
라는 도구를 사용하고 있다.이것은 Makefiles (오래된 C 구축 시스템) 나 복잡한 스크립트를 완전히 대체할 수 있는 매우 강력한 도구이다.그 외에 명령행과 관련된 모든 활동에 매우 유용한 조직자이다.Shamaazi에서, 우리는 7개의 다른 UI, 수백 개의 서비스와 우리의 모든 인프라 시설 설정을 포함하는 단일한 코드 라이브러리를 가지고 있습니다.저희는
task
를 사용하여 이 모든 것을 관리하고 요청할 때 사용자 데이터를 삭제하거나 연락처 주소를 변경하는 등 내무 관리를 수행합니다.우리는 그것이 매우 강하다는 것을 발견했다. 왜냐하면 설정을 쉽게 읽고, 자기 기록을 할 수 있으며, 실행이 필요한 명령만 실행할 수 있기 때문이다. 이 모든 것은 구축, 검색 명령, 편집 설정을 기다리는 시간을 많이 절약할 수 있기 때문이다.그것은 작은 코드 라이브러리에서도 마찬가지로 가치가 있다.task
가 무엇인지, 그리고 그 기능을 빠르게 탐색해 봅시다.개시하다
가장 간단한 설치 방법
task
은 그들이 제공한 설치 스크립트를 통해서다.curl -sL https://taskfile.dev/install.sh | sh
그러나 그것을 설치하는 데는 brew
,snap
또는 scoop
등 다른 방법도 많다.그것들을 찾을 수 있다here.일단 설치되면, 우리는 명령을 내리고 싶은 디렉터리에서 실행할 수 있다.
task --init
이것은 간단한 Taskfile.yml
파일을 만들 것입니다.이 파일은 매우 유행하는 사람이 읽을 수 있는 파일 형식인 YAML 형식을 채택하고 있다.이 Taskfile.yml
파일은 우리가 실행하고자 하는 모든 가능한 작업을 정의하는 데 사용됩니다.처음에, 그것은 단지 하나의 Hello, World!
예시만을 포함했다.# https://taskfile.dev
version: '3'
vars:
GREETING: Hello, World!
tasks:
default
cmds:
- echo "{{.GREETING}}"
silent: true
실행 task
(또는 task default
은 위에서 정의한 default
작업, 즉 인쇄 Hello, World!
를 실행합니다.우리는 파일을 몇 개의 명확한 부분으로 분해할 수 있다.version: '3'
- 사용할 Taskfile 버전을 정의합니다.우리는 너무 많은 관심을 필요로 하지 않지만,향후 버전에서 작업 중지를 방지합니다.
vars:
- 이 섹션에서는 전역 액세스 가능 변수를 정의합니다.우리는 하나의 변수를 볼 수 있다.GREETING
는 Hello, World!
로 정의됩니다.이 변수들은 매우 강해서 다른 변수를 인용할 수 있고,또는 명령의 출력에서 완전히 파생될 수 있습니다.
tasks:
- 이 절에서는 실제 작업을 정의합니다.지금 저희가 미션이 하나밖에 없어요.default
. 이 작업을 실행하면 명령echo "{{.GREETING}}"
이 실행됩니다.silent: true
줄은 실행 중인 명령을 인쇄하는 것을 방지할 뿐입니다.변량
이전 절에서 GREETING 변수는 명령의 출력에서 파생될 수 있다고 언급했다.때때로, 이것은 즉각 얻을 수 없는 정보를 얻는 데 매우 유용하다.간단한 예를 들어
task
섹션을 다음과 같이 변경합니다.vars:
GREETING:
sh: echo "Hello, $(whoami)!"
현재 실행 vars
하면 출력 task
(또는 사용자 이름이 무엇이든지 상관없습니다!) 을 출력합니다.그것이 명령을 집행할 때, 그것은 무엇이든지 될 수 있다.날씨Hello, dglsparsons!
를 제공하고 jq를 사용하여 빠른 출력을 얻을 수 있습니다.그런 다음 두 번째 임무에 추가할 수 있습니다.vars:
GREETING:
sh: echo "Hello, $(whoami)!"
WEATHER:
sh: curl -s wttr.in?format=j1 | jq -r .current_condition[0].weatherDesc[0].value
tasks:
default:
cmds:
- echo "{{.GREETING}}"
silent: true
weather:
cmds:
- echo "There be {{.WEATHER}}"
silent: true
런닝wttr.in
은 지금도 같은 인사말을 출력한다.그러나 런닝task
은 다음과 같은 내용을 인쇄합니다.There be Haze.
이것은 매우 빠르고 쉽다.이제 우리는 이 명령을 잊을 수 없는 곳에 영원히 보존했다.문서
따라서 우리의 임무는 유용하지만, 그들이 한 일을 설명하면 더욱 유용할 것이다.그것들을 위해 간단한 설명을 추가합시다.이것은 모든 퀘스트의
task weather
키를 통해 완성할 수 있다.tasks:
default:
desc: Prints a greeting.
cmds:
- echo "{{.GREETING}}"
silent: true
weather:
desc: Prints out the current weather.
cmds:
- echo "There be {{.WEATHER}}"
silent: true
우리는 현재 desc
또는 task -l
를 실행하여 모든 사용 가능한 작업의 간편한 요약을 표시할 수 있다.$ task --list
task: Available tasks for this project:
* default: Prints a greeting.
* weather: Prints out the current weather.
이것은 이후의 임무를 더욱 쉽게 기억할 수 있게 한다.의존 관계
우리가 보고 싶은 모든 일기예보를 다운로드하지 않고 일기예보를 파일에 쓰는 작업을 만듭니다.
vars:
GREETING:
sh: echo "Hello, $(whoami)!"
WEATHER_FILE: weather.json
tasks:
default:
desc: Prints a greeting.
cmds:
- echo "{{.GREETING}}"
silent: true
download-weather:
desc: Downloads a weather forecast into a file
cmds:
- curl -s wttr.in?format=j1 > {{.WEATHER_FILE}}
이것은 좋은 시작이지만 런닝task --list
은 시종일관 다운로드 예측을 할 것이다.만약 우리가 어떤 파일을 입력으로 사용한다면, 당신은 그것을 download-weather
로 설정할 수도 있고, 심지어는 어댑터를 사용할 수도 있습니다.필요할 때만 건축 규범에 매우 유용하다.예컨대tasks:
build:
cmds:
- go build .
sources:
- ./*.go
source
개의 파일이 업데이트된 경우에만 실행됩니다go build
.그러나 우리의 목적 때문에 우리는 파일을 입력하지 않았다.반대로 우리는 .go
필드를 사용하여 프로그래밍 검사를 할 수 있다. download-weather:
desc: Downloads a weather forecast into a file
cmds:
- curl -s wttr.in?format=j1 > {{.WEATHER_FILE}}
status:
- test -f ./{{.WEATHER_FILE}}
여러 번 실행status
하면 파일이 처음 다운로드되지만 나중에 다운로드되지는 않습니다.반대로 메시지가 생성됩니다: task download-weather
.이전의
task: Task "download-weather" is up to date
작업은 다운로드 중인 날씨 파일에 달려 있다.이것은 weather
필드를 통해 쉽게 완성할 수 있다.이것은 실행 명령deps
이 실행을 시도한다는 것을 의미한다weather
.다운로드 날씨는 반대로 날씨를 한 파일에 다운로드하지만, 이 파일이 아직 나타나지 않았을 때만...이것은 듣기에 매우 재미있지만, 내 말을 참을성 있게 들어 주십시오. 당신이 그 중의 가치를 볼 수 있기를 바랍니다. weather:
desc: Prints out the current weather.
deps:
- download-weather
cmds:
- echo "There be $(cat {{.WEATHER_FILE}} | jq -r .current_condition[0].weatherDesc[0].value)"
silent: true
날씨가 다운로드를 허용하면 download-weather
를 실행하면 다음과 같은 출력이 발생합니다.task: curl -s wttr.in?format=j1 > weather.json
There be Haze
그러나 다시 실행하면 다운로드되지 않으며 날씨 값만 인쇄할 수 있습니다.task: Task "download-weather" is up to date
There be Haze
우리는 지금 그것의 가치를 볼 수 있기를 바란다.우리는 필요할 때만 일을 하는데, 모든 임무는 그것이 해야 할 일이 있는지 쉽게 검사할 수 있다.이것은 소프트웨어 개발에 매우 유용하다.예를 들어 우리는 task weather
임무에 의존하는 deploy
임무를 만들 수 있다.build
작업은 지난번build
이후 코드가 업데이트된 상황에서만 생성됩니다.우리는 심지어 build
생성된 파일이 지난번 배치보다 새로운 상황에서만 실제 배치를 실행할 수 있다.하나의 진실한 예
지금까지 우리는 일기예보를 다운로드하기 위해 상당히 가식적인 예를 보았다.반대로 자바스크립트 프로젝트를 구축하는 흔한 코드 예시를 살펴보자.필요한 행동을 다음과 같이 정의할 수 있습니다.
deploy
은 운행curl
해야 한다.task build
마지막 생성 이후 원본 파일에 새로운 변경 사항이 있을 때만 실행해야 합니다.npm run build
는 최신 버전npm run build
이 설치된 경우에만 실행되어야 합니다.npm run build
은 마지막 설치 후 패키지가 변경된 경우에만 설치할 수 있습니다.node_modules
과 node_modules
도구를 사용하여 검사할 수 있다.test
는 명령의 출력이 일부 내용을 되돌려주는지 확인하는 데 사용할 수 있다find
.그것 또한 test
를 사용하여 파일이 존재하는지 확인하고 test -z
를 사용하여 디렉터리가 존재하는지 검사할 수 있다.파일/디렉터리가 존재하지 않거나 명령이 출력을 되돌려 주면 프로세스가 종료되고 상태 코드가 표시되어 명령이 실패했습니다.마지막으로test -f
test -d
출력보다 업데이트된 파일을 찾기 위해 표시합니다.우리의 임무 서류.yml은 다음과 같습니다.
# https://taskfile.dev
version: '3'
output: prefixed
tasks:
build:
desc: Build all static artifacts into build
deps: [ node_modules ]
cmds:
- npm run build
status:
# Lets check that our output directory exists
- test -d build
# And that our index.html file exists
- test -f build/index.html
# Finally, check if there are any files in `src`, `public` or `node_modules` that are newer than
# out build/index.html output.
- test -z "$(find src public node_modules -type f -newer build/index.html)"
node_modules:
desc: Install all dependencies
cmds:
- npm ci
status:
# Lets check that node_modules exists
- test -d node_modules
# Finally, we are up to date if any files in node_modules are newer than package.json
- test -n "$(find node_modules/ -type f -newer package.json)"
마지막으로 테스트를 해 봅시다.첫 번째 실행find
에서는 다음을 수행합니다.$ task build
task: npm ci
> [email protected] postinstall ...
...
task: npm run build
> [email protected] build ...
...
그러나 두 번째 실행 시 다음과 같은 상황이 발생합니다.$ task build
task: Task "node_modules" is up to date
task: Task "build" is up to date
-newer
에 대한 변경 사항은 의존 항목을 다시 설치한 다음 다시 실행하여 생성합니다.task build
파일에 대한 변경 사항은 구축을 다시 실행합니다.이것은 구축이 한 번 또 한 번 운행하기 때문에 많은 시간을 절약할 수 있다.결론
이 짧은 지침을 통해 우리는 매우 똑똑하지만 읽기 쉽고 이해하기 쉬운 임무집을 세웠다.이런 임무들은 스스로 기록할 수 있어 읽기와 이해에 편리하다.또한
package.json
및 src/
필드를 사용하여 필요할 때만 작업을 수행할 수 있습니다.우리는 status
필드를 통해 이 임무들을 함께 연결할 수 있다.이런 방식으로 임무를 연결하면 이전의 어려운 임무를 쉽게 최적화할 수 있다. 방법은 그것을 구성 요소 부분으로 분해하고 실행할 필요가 없는 부분을 건너뛰는 것이다.우리는 두 가지 다른 예를 통해 이 점을 보았다. 한 사람의 인위적인 날씨 다운로드 프로그램과 더욱 전형적인 npm 프로젝트이다.이러한 예를 통해 우리는 sources
가 제공할 수 있는 기능과 편의를 강조했다.누구나 쉽게 사용할 수 있다. 왜 우리가 사마제에서 그것을 좋아하는지 이해하길 바란다.
Reference
이 문제에 관하여(작업 - 간단한 구축을 위한 편리한 도구), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dglsparsons/task-an-easy-to-use-tool-to-simplify-your-build-28ka텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)