Git Hooks로 이미지 압축을 자동화하는 방법
10975 단어 gitautomationwebdevjavascript
그러니 지체 없이 시작합시다. 왜 무엇을 어떻게 :-)
이미지를 압축해야 하는 이유는 무엇입니까?
이 튜토리얼은 이미지를 압축해야 하는 이유에 대한 것이 아닙니다. 인터넷에는 이미 이것에 대한 좋은 리소스가 많이 있습니다. 요약해서 말하자면:
이것에 대한 더 많은 정보가 있습니다. 그러나 여기서 설명하는 것은 의미가 없습니다. 이 인터넷에서 이 모든 정보를 찾을 수 있습니다.
나에게 이것이 무엇입니까?
개인 프로젝트를 할 때나 조직에서 할 때마다. 내 이미지를 정리하고 수동으로 일부 압축 사이트로 이동한 다음 압축된 사이트로 변환하고 교체해야 합니다. 어느 날 제 리드가 저에게 이 작업을 자동화하지 않는 이유를 물었습니다. 나는 이것을 자동화할 수 있는 좋은 소스나 어떤 것도 찾지 못했습니다. 그래서 저도 공유할 가치가 있다고 생각했습니다.
참고: 이 작업을 수행한 타사 서비스가 이미 있습니다. 그러나 다시 해당 서비스를 구매해야 합니다. 이 튜토리얼은 모두 후크를 사용한 압축 자동화에 관한 것이며 소규모 프로젝트의 경우 프로젝트가 다른 타사 서비스를 얼룩지게 하는 것을 원하지 않습니다.
내가 어떻게 했어?
이것은 흥미로운 부분입니다. 시작합시다. 처음에 이미지 크기는 다음과 같습니다.
참고: 이 이미지는 데모용으로만 사용했습니다.
그래서 이 물건을 자동화하기 위해 husky(git hook용)을 사용하고 lint-staged를 사용합니다.
이미지 압축을 위해 저는 sharp(오픈 소스)를 사용합니다. 이 패키지가 왜 다른 패키지가 아닌지에 대한 질문이 있는 경우 좋은 패키지가 너무 많습니다. 나는 이것에 전적으로 동의합니다. 그러나이 모든 질문은 이미 예리하게 답변되었습니다.
performance guide을 확인할 수 있습니다. 이미 이러한 질문에 대한 답변을 제공하고 있습니다.
코드 시간:
따라서 논리는 이미지의 코드 검사를 커밋하기 전에 이미지가 발견되면 커밋하기 전에 이미지를 압축하는 것입니다.
다른 작업(포스트 커밋, 사전 빌드 등)을 수행할 수 있습니다.
다음은 완전한 코드입니다.
{
"hooks": {
"pre-commit": "lint-staged"
}
}
/**
A precommit script to compress image before commiting file
Q: Why Sharp package used?
A: https://sharp.pixelplumbing.com/performance
*/
const fs = require("fs");
const sharp = require("sharp");//https://sharp.pixelplumbing.com/
/*
Function: Update existing file to new compress file
*/
const minifyFile = filename => {
new Promise((resolve, reject) => {
/*Read upcomimg file*/
fs.readFile(filename, function(err, sourceData) {
if (err) throw err;
/*If file buffer data is present convert it into new compressed file*/
sharp(sourceData).toFile(filename, (err, info) => {
err ? reject(err) : resolve();
});
});
});
};
/*
Fetch images maps from args and compress all.
Compressing is asynchronuous process.
So wait for all image to compress and return.
*/
Promise.resolve(process.argv)/*Find more. here: https://nodejs.org/en/knowledge/command-line/how-to-parse-command-line-arguments/*/
.then(x => x.slice(2))
.then(x => x.map(minifyFile))
.then(x => Promise.all(x))
.catch(e => {
process.exit(1);
});
{
"name": "image-compression",
"version": "1.0.0",
"description": "Pre commit script to compress images",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": {
"name": "Shubham Verma"
},
"license": "ISC",
"devDependencies": {
"husky": "^4.2.5",
"lint-staged": "^10.2.7",
"sharp": "^0.25.3"
},
"lint-staged": {
"*.{png,jpeg,jpg,gif,svg}": [
"node ./compress-image.js"
]
}
}
이미 모든 것을 코드로 설명했습니다. 언제든지 저에게 연락해 주세요.
마지막으로 중요한 증거 ;-)
그게 전부입니다. 의심스러운 점이 있으면 언제든지 질문하십시오. 전체 코드는 Github에서 사용할 수 있습니다. 부담없이checkout
당신은 트위터에서 나에게 연락 할 수 있습니다
Reference
이 문제에 관하여(Git Hooks로 이미지 압축을 자동화하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/shubhamforu/how-to-automate-image-compression-with-git-hooks-1h5i텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)