Created
October 25, 2018 20:03
-
-
Save neophob/e63b672ffb7d6ce8421a974aa76fa298 to your computer and use it in GitHub Desktop.
npm prune
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# Port of https://github.com/tj/node-prune to bash | |
# Also, | |
# - fixed "*.ts" being overzealous and killing .d.ts files | |
# - added some more file types from https://github.com/npm/npm/issues/5264#issuecomment-259800486 | |
# | |
# See also: | |
# - https://github.com/timoxley/cruft | |
# - https://yarnpkg.com/en/docs/cli/autoclean | |
# - https://github.com/ModClean/modclean | |
# | |
# Prunes common files that are unnecessarily published in npm packages | |
# when people don't configure `.npmignore` or package.json's `files` | |
# | |
set -e | |
if test "$#" -ne 1; then | |
echo "ERROR: Missing target dir! Usage: $0 [PATH-to-root-directory-that-contains-node_modules]" | |
exit 1 | |
fi | |
SOURCE=$1 | |
pushd $1 | |
NODE_MODULES_DIR=node_modules | |
echo "current directory "$(pwd) | |
echo "NODE MODULES CLEANER $NODE_MODULES_DIR" | |
echo "Before: "$(du -hs $NODE_MODULES_DIR) | |
echo "Files: "$(find $NODE_MODULES_DIR/ -type f | wc -l) | |
# Remove common unneeded files | |
# "-type d" -> directory | |
# | |
find . -type d -name $NODE_MODULES_DIR -prune -exec find {} -type f \( \ | |
-iname Makefile -or \ | |
-iname README -or \ | |
-iname README.md -or \ | |
-iname README.md~ -or \ | |
-iname README.markdown -or \ | |
-iname CHANGELOG -or \ | |
-iname CHANGELOG.md -or \ | |
-name CHANGES -or \ | |
-name COPYING -or \ | |
-name NEWS -or \ | |
-name CHANGES.md -or \ | |
-iname RELEASING.txt -or \ | |
-iname history -or \ | |
-iname history.md -or \ | |
-name .editorconfig -or \ | |
-name .gitmodules -or \ | |
-name .gitattributes -or \ | |
-name .gitignore -or \ | |
-name .gitkeep -or \ | |
-name robot.html -or \ | |
-name .lint -or \ | |
-iname Gulpfile.js -or \ | |
-iname Gruntfile.js -or \ | |
-iname BUILD.bazel -or \ | |
-iname Cakefile -or \ | |
-name .tern-project -or \ | |
-name .uglifyjsrc.json -or \ | |
-name .editorconfig -or \ | |
-name eslint -or \ | |
-name .eslintrc -or \ | |
-name .eslintrc.js -or \ | |
-name .eslintrc.json -or \ | |
-name .eslintrc.yml -or \ | |
-name .eslintignore -or \ | |
-name .stylelitrc -or \ | |
-name tsconfig.json -or \ | |
-name stylelint.config.js -or \ | |
-name .htmllintrc -or \ | |
-name .gitlab-ci.yml -or \ | |
-name _config.yml -or \ | |
-name .wotanrc.yaml -or \ | |
-name .jshintrc -or \ | |
-name .jshintignore -or \ | |
-name .npmignore -or \ | |
-name .flowconfig -or \ | |
-name .coveralls.yml -or \ | |
-name .istanbul.yml -or \ | |
-name appveyor.yml -or \ | |
-name .idea -or \ | |
-name .jscsrc -or \ | |
-name jest.config -or \ | |
-name yo-rc.json -or \ | |
-name .documentup.json -or \ | |
-name .yarn-metadata.json -or \ | |
-name .travis.yml -or \ | |
-name .zuul.yml -or \ | |
-name .codeclimate.yml -or \ | |
-name thumbs.db -or \ | |
-name .tern-port -or \ | |
-name wercker.yml -or \ | |
-iname .ds_store -or \ | |
-name desktop.ini -or \ | |
-name npm-debug.log -or \ | |
-name .npmrc -or \ | |
-name .jscsrc -or \ | |
-name .jscs.json -or \ | |
-name .nvmrc -or \ | |
-name webpack.config.js -or \ | |
-name karma.conf.js -or \ | |
-name mocha.opts -or \ | |
-iname dockerfile -or \ | |
-iname CopyrightNotice.txt -or \ | |
-iname LICENSE.txt -or \ | |
-iname LICENSE.md -or \ | |
-iname LICENSE-MIT -or \ | |
-iname MIT-LICENSE.txt -or \ | |
-iname LICENSE.MIT -or \ | |
-iname LICENSE-MIT.txt -or \ | |
-iname LICENSE.APACHE2 -or \ | |
-iname LICENSE.BSD -or \ | |
-iname LICENSE-BSD -or \ | |
-iname LICENSE.DOCS -or \ | |
-iname LICENSE-jsbn -or \ | |
-iname LICENSE -or \ | |
-iname LICENCE -or \ | |
-iname LICENCE.txt -or \ | |
-iname PATENTS -or \ | |
-iname AUTHORS -or \ | |
-iname CONTRIBUTORS -or \ | |
-name .yarn-integrity -or \ | |
-name .yarnclean -or \ | |
-name yarn-error.log -or \ | |
-name .babelrc -or \ | |
-name builderror.log -or \ | |
-name bower.json -or \ | |
-name yarn.lock -or \ | |
-name "*.map" -or \ | |
-name "*.mkd" -or \ | |
-name "*.md" -or \ | |
-name "*.md~" -or \ | |
-name "*.md.bak" -or \ | |
-name "*.js.map" -or \ | |
-name "*appveyor.yml" -or \ | |
-name "uws_darwin_*.node" -or \ | |
-name "uws_win32_*.node" -or \ | |
-name "build_log.txt" -or \ | |
-name "LayoutEngineTest.cs" -or \ | |
-name "uws_linux_46.node" -or \ | |
-name "uws_linux_47.node" -or \ | |
-name "uws_linux_48.node" -or \ | |
-name "uws_linux_51.node" -or \ | |
-name "*.sln" -or \ | |
-name "*.obj" -or \ | |
-name "*.jar" -or \ | |
-name "*.java" -or \ | |
-name "*.xlsx" -or \ | |
-name "*.csproj" -or \ | |
-name "*.patch" -or \ | |
-name "lorem_1mb.txt" -or \ | |
-name "*.h" -or \ | |
-name "*.c" -or \ | |
-name "*.cc" -or \ | |
-name "*.cpp" -or \ | |
-name "*.hpp" -or \ | |
-name "*.o.d" -or \ | |
-name "*.gypi" -or \ | |
-name "*.vcxproj" -or \ | |
-name "*.vcxproj.filters" -or \ | |
\( -name '*.ts' -and \! -name '*.d.ts' \) -or \ | |
-name "*.jst" -or \ | |
-name "*.coffee" \ | |
\) -print0 \; | xargs -0 rm -rf | |
# Common unneeded directories | |
# some project need node-pre-gyp, dont remove them! https://github.com/AlCalzone/node-aead-crypto/issues/7 | |
# -name node-pre-gyp -or \ | |
find . -type d -name $NODE_MODULES_DIR -prune -exec find {} -type d \( \ | |
-name __tests__ -or \ | |
-name test -or \ | |
-name tests -or \ | |
-name powered-test -or \ | |
-name docs -or \ | |
-name doc -or \ | |
-name website -or \ | |
-name assets -or \ | |
-name example -or \ | |
-name examples -or \ | |
-name coverage -or \ | |
-name node-gyp -or \ | |
-name gyp -or \ | |
-name nyc_output -or \ | |
-name .nyc_output -or \ | |
-name .circleci -or \ | |
-name .github -or \ | |
-name .idea -or \ | |
-name .vscode \ | |
\) -print0 \; | xargs -0 rm -rf | |
echo "50 largest files in node_modules" | |
find $NODE_MODULES_DIR -type f -printf "%s\t%p\n" | sort -n | tail -50 | |
echo "After: "$(du -hs $NODE_MODULES_DIR) | |
echo "Files: "$(find $NODE_MODULES_DIR/ -type f | wc -l) | |
popd |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment