Gathering detailed insights and metrics for @milahu/patch-package-with-pnpm-support
Gathering detailed insights and metrics for @milahu/patch-package-with-pnpm-support
Gathering detailed insights and metrics for @milahu/patch-package-with-pnpm-support
Gathering detailed insights and metrics for @milahu/patch-package-with-pnpm-support
npm install @milahu/patch-package-with-pnpm-support
Typescript
Module System
Node Version
NPM Version
68.9
Supply Chain
98.2
Quality
72.4
Maintenance
100
Vulnerability
98.6
License
TypeScript (80.97%)
Shell (17.82%)
JavaScript (1.21%)
Total Downloads
535,411
Last Day
189
Last Week
614
Last Month
2,056
Last Year
22,822
10,610 Stars
668 Commits
299 Forks
39 Watching
11 Branches
52 Contributors
Minified
Minified + Gzipped
Latest Version
6.4.10
Package Id
@milahu/patch-package-with-pnpm-support@6.4.10
Unpacked Size
329.05 kB
Size
94.05 kB
File Count
29
NPM Version
8.3.1
Node Version
16.14.0
Cumulative downloads
Total Downloads
Last day
67.3%
189
Compared to previous day
Last week
67.3%
614
Compared to previous week
Last month
-5%
2,056
Compared to previous month
Last year
-82.8%
22,822
Compared to previous year
15
patch-package
lets app authors instantly make and keep fixes to npm
dependencies. It's a vital band-aid for those of us living on the bleeding edge.
1# fix a bug in one of your dependencies 2vim node_modules/some-package/brokenFile.js 3 4# run patch-package to create a .patch file 5npx patch-package some-package 6 7# commit the patch file to share the fix with your team 8git add patches/some-package+3.14.15.patch 9git commit -m "fix brokenFile.js in some-package"
Patches created by patch-package
are automatically and gracefully applied when
you use npm
(>=5) or yarn
.
No more waiting around for pull requests to be merged and published. No more forking repos just to fix that one tiny thing preventing your app from working.
In package.json
1 "scripts": { 2+ "postinstall": "patch-package" 3 }
Then
npm i patch-package
You can use --save-dev
if you don't need to run npm in production, e.g. if
you're making a web frontend.
yarn add patch-package postinstall-postinstall
You can use --dev
if you don't need to run yarn in production, e.g. if you're
making a web frontend.
To understand why yarn needs the postinstall-postinstall
package see:
Why use postinstall-postinstall
Same as for yarn ☝️ Note that if you want to patch un-hoisted packages you'll
need to repeat the setup process for the child package. Also make sure you're in
the child package directory when you run patch-package
to generate the patch
files.
For patch-package
to work on Heroku applications, you must specify
NPM_CONFIG_PRODUCTION=false
or YARN_PRODUCTION=false
.
See this issue for more
details.
If having errors about working directory ("cannot run in wd [...]") when
building in Docker, you might need to adjust configuration in .npmrc
. See
#185.
In your Dockerfile
, remember to copy over the patch files before running
[npm|yarn] install
If you cache node_modules
rather than running yarn install
every time,
make sure that the patches
dir is included in your cache key somehow.
Otherwise if you update a patch then the change may not be reflected on
subsequent CI runs.
Create a hash of your patches before loading/saving your cache. If using a Linux machine, run md5sum patches/* > patches.hash
. If running on a macOS machine, use md5 patches/* > patches.hash
1- run: 2 name: patch-package hash 3 command: md5sum patches/* > patches.hash
Then, update your hash key to include a checksum of that file:
1- restore_cache: 2 key: app-node_modules-v1-{{ checksum "yarn.lock" }}-{{ checksum "patches.hash" }}
As well as the save_cache
1- save_cache: 2 key: app-node_modules-v1-{{ checksum "yarn.lock" }}-{{ checksum "patches.hash" }} 3 paths: 4 - ./node_modules
First make changes to the files of a particular package in your node_modules folder, then run
yarn patch-package package-name
or use npx (included with npm > 5.2
)
npx patch-package package-name
where package-name
matches the name of the package you made changes to.
If this is the first time you've used patch-package
, it will create a folder
called patches
in the root dir of your app. Inside will be a file called
package-name+0.44.0.patch
or something, which is a diff between normal old
package-name
and your fixed version. Commit this to share the fix with your
team.
--create-issue
For packages whose source is hosted on GitHub this option opens a web browser with a draft issue based on your diff.
--use-yarn
By default, patch-package checks whether you use npm or yarn based on which lockfile you have. If you have both, it uses npm by default. Set this option to override that default and always use yarn.
--exclude <regexp>
Ignore paths matching the regexp when creating patch files. Paths are relative to the root dir of the package to be patched.
Default value: package\\.json$
--include <regexp>
Only consider paths matching the regexp when creating patch files. Paths are relative to the root dir of the package to be patched.
Default value: .*
--case-sensitive-path-filtering
Make regexps used in --include or --exclude filters case-sensitive.
--patch-dir
Specify the name for the directory in which to put the patch files.
If you are trying to patch a package at, e.g.
node_modules/package/node_modules/another-package
you can just put a /
between the package names:
npx patch-package package/another-package
It works with scoped packages too
npx patch-package @my/package/@my/other-package
Use exactly the same process as for making patches in the first place, i.e. make more changes, run patch-package, commit the changes to the patch file.
Run patch-package
without arguments to apply all patches in your project.
--error-on-fail
Forces patch-package to exit with code 1 after failing.
When running locally patch-package always exits with 0 by default. This happens even after failing to apply patches because otherwise yarn.lock and package.json might get out of sync with node_modules, which can be very confusing.
--error-on-fail
is switched on by default on CI.
See https://github.com/ds300/patch-package/issues/86 for background.
--reverse
Un-applies all patches.
Note that this will fail if the patched files have changed since being
patched. In that case, you'll probably need to re-install node_modules
.
This option was added to help people using CircleCI avoid an issue around caching and patch file updates but might be useful in other contexts too.
--patch-dir
Specify the name for the directory in which the patch files are located
To apply patches individually, you may use git
:
git apply --ignore-whitespace patches/package-name+0.44.2.patch
or patch
in unixy environments:
patch -p1 -i patches/package-name+0.44.2.patch
If you deploy your package to production (e.g. your package is a server) then
any patched devDependencies
will not be present when patch-package runs in
production. It will happily ignore those patch files if the package to be
patched is listed directly in the devDependencies
of your package.json. If
it's a transitive dependency patch-package can't detect that it is safe to
ignore and will throw an error. To fix this, mark patches for transitive dev
dependencies as dev-only by renaming from, e.g.
package-name+0.44.0.patch
to
package-name+0.44.0.dev.patch
This will allow those patch files to be safely ignored when
NODE_ENV=production
.
Nope. The technique is quite robust. Here are some things to keep in mind though:
yarn
or npm
when switching between branches
that do and don't have patch files.Most times when you do a yarn
, yarn add
, yarn remove
, or yarn install
(which is the same as just yarn
) Yarn will completely replace the contents of
your node_modules with freshly unpackaged modules. patch-package uses the
postinstall
hook to modify these fresh modules, so that they behave well
according to your will.
Yarn only runs the postinstall
hook after yarn
and yarn add
, but not after
yarn remove
. The postinstall-postinstall
package is used to make sure your
postinstall
hook gets executed even after a yarn remove
.
MIT
No vulnerabilities found.
Reason
no dangerous workflow patterns detected
Reason
no binaries found in the repo
Reason
license file detected
Details
Reason
Found 2/5 approved changesets -- score normalized to 4
Reason
2 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 1
Reason
detected GitHub workflow tokens with excessive permissions
Details
Reason
no effort to earn an OpenSSF best practices badge detected
Reason
security policy file not detected
Details
Reason
dependency not pinned by hash detected -- score normalized to 0
Details
Reason
project is not fuzzed
Details
Reason
branch protection not enabled on development/release branches
Details
Reason
SAST tool is not run on all commits -- score normalized to 0
Details
Reason
81 existing vulnerabilities detected
Details
Score
Last Scanned on 2025-01-27
The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.
Learn More