patch
•
pnpm 7.4.0 버전 이상이어야 한다
•
외부 라이브러리를 내 프로젝트에서 커스텀하게 바꿔서 사용할 수 있다.
•
pnpm_store에 설치된 라이브러리에 글로벌하게 적용되는 게 아니라 내 프로젝트에만 적용된다.
TL;DR
•
pnpm patch <patch할 패키지 이름>
•
private 경로에서 코드 수정 및 저장
•
pnpm patch-commit <private 경로>
•
Dockerfile 사용해서 배포하는 경우, patches 파일도 함께 COPY한다.
방법
1.
pnpm patch <patch할 패키지 이름>
•
package.json에 설치된 패키지를 패치한다. (해당 패키지의 현재 설치된 버전을 패치한다)
pnpm patch is-odd
Shell
복사
•
패치할 수 있도록 pnpm이 기존 패키지 파일의 복사본을 private 경로에 만들어준다.
You can now edit the following folder: /private/var/folders/hl/s51yjywn6hj4v0w_mhrv8l540000gn/T/c682bc84c25ea88197cded12650f97c8/user
Shell
복사
•
변수에 저장해주면 나중에 수정하기 편하다.
•
한 번 패치하고 나서 다시 패치할 때도 해당 경로에서 수정해야하기 때문에 저장해놓으면 좋다
IS_ODD=/private/var/folders/hl/s51yjywn6hj4v0w_mhrv8l540000gn/T/c682bc84c25ea88197cded12650f97c8/user
JavaScript
복사
2.
해당 경로에서 원하는 대로 수정한 후 저장한다. (저장하지 않으면 반영 안됨)
code $IS_ODD
Shell
복사
•
저장
'use strict';
const isNumber = require('is-number');
console.log('!!!PATCH!!!') // 변경된 부분
module.exports = function isOdd(value) {
const n = Math.abs(value);
if (!isNumber(n)) {
throw new TypeError('expected a number');
}
if (!Number.isInteger(n)) {
throw new Error('expected an integer');
}
if (!Number.isSafeInteger(n)) {
throw new Error('value exceeds maximum safe integer');
}
return (n % 2) === 1;
};
JavaScript
복사
3.
pnpm patch-commit <private 경로>
pnpm patch-commit $IS_ODD
JavaScript
복사
•
patches 폴더가 추가된다: patches/변경된패키지-버전
diff --git a/index.js b/index.js
index 79d1f22a8e7a27efb8841bb83cb682ea1ff3a59c..78603df3ee5bbc3cfd06e7419889726dab6f4039 100644
--- a/index.js
+++ b/index.js
@@ -5,21 +5,22 @@
* Released under the MIT License.
*/
-'use strict';
+"use strict";
-const isNumber = require('is-number');
+const isNumber = require("is-number");
+
+console.log("!!!PATCH!!!"); // 변경된 부분
module.exports = function isOdd(value) {
const n = Math.abs(value);
if (!isNumber(n)) {
- throw new TypeError('expected a number');
+ throw new TypeError("expected a number");
}
if (!Number.isInteger(n)) {
- throw new Error('expected an integer');
+ throw new Error("expected an integer");
}
if (!Number.isSafeInteger(n)) {
- throw new Error('value exceeds maximum safe integer');
+ throw new Error("value exceeds maximum safe integer");
}
- return (n % 2) === 1;
+ return n % 2 === 1;
};
-
JavaScript
복사
•
패치한 패키지를 한 번 더 패치하려면 처음에 주어진 private 경로에서 수정 후 다시 저장하면 된다.
◦
새로 pnpm patch <패키지> 해서 패치 커밋하는 경우 기존 패치가 초기화되니 주의한다.
•
package.json에 patch 파일 경로가 저장된다.
"pnpm": {
"patchedDependencies": {
"is-odd@3.0.1": "patches/is-odd@3.0.1.patch"
}
}
JavaScript
복사
4.
Dockerfile 사용해서 배포하는 경우, patches 파일도 함께 COPY한다.
COPY patches patches
Docker
복사