I have a project containing multiple other projects :
Main project Mini project 1 Mini project 2
Mini project 1
Mini project 2
All containing node_modules
folder. I want git to ignore the folder no matter where it is starting from the root folder. Something like this to add in .gitignore :
*node_modules/*
Add node_modules/
or node_modules
to the .gitignore
file to ignore all directories called node_modules
in the current folder and any subfolders like the below image.
https://i.stack.imgur.com/vPzT1.png
Use the universal one-liner in terminal in the project directory:
touch .gitignore && echo "node_modules/" >> .gitignore && git rm -r --cached node_modules ; git status
It works no matter if you've created a .gitignore
or not, no matter if you've added node_modules
to git tracking or not.
Then commit and push the .gitignore
changes.
Explanation
touch
will generate the .gitignore
file if it doesn't already exist.
echo
and >>
will append node_modules/
at the end of .gitignore
, causing the node_modules
folder and all subfolders to be ignored.
git rm -r --cached
removes the node_modules
folder from git control if it was added before. Otherwise, this will show a warning pathspec 'node_modules' did not match any files
, which has no side effects and you can safely ignore. The flags cause the removal to be recursive and include the cache.
git status
displays the new changes. A change to .gitignore
will appear, while node_modules
will not appear as it is no longer being tracked by git.
touch
shouldn't be necessary here: >>
will create the file if it doesn't exist.
touch
is needed. >>
will return no such file or directory: .gitignore
otherwise.
echo "node_modules/" > .gitignore
should create a new file with original content, using >>
appends text onto the end of existing specified file
Edit - (Before 2022-04-09)
In a new monorepo setup I found just using this
node_modules
solved it to ignore all the node_modules in the subdirectory, note there is no slash before or after which means recursive.
Old Way - (Before 2022-04-09)
**/node_modules
**
is used for a recursive call in the whole project
Two consecutive asterisks ** in patterns matched against full pathname may have special meaning: A leading ** followed by a slash means match in all directories. For example, **/foo matches file or directory foo anywhere, the same as pattern foo. **/foo/bar matches file or directory bar anywhere that is directly under directory foo. A trailing /** matches everything inside. For example, abc/** matches all files inside directory abc, relative to the location of the .gitignore file, with infinite depth. A slash followed by two consecutive asterisks then a slash matches zero or more directories. For example, a/\**/b matches a/b, a/x/b, a/x/y/b and so on. Other consecutive asterisks are considered invalid.
Why this approach is better than node_modules/
The **
acts as a recursive pattern. It is useful in monorepo projects where you have node_modules in sub directories. **
will search for all the node_modules inside the directory & ignore them.
node_modules/
?
node_modules
folders, independently of where they are located (e.g. /BackOffice/frontend/node_modules
)
**
, it works the same without it
First and foremost thing is to add .gitignore
file in my-app. Like so in image below.
https://i.stack.imgur.com/9HdAN.png
and next add this in your .gitignore
file
/node_modules
Note
You can also add others files too to ignore them to be pushed on github. Here are some more files kept in .gitignore. You can add them according to your requirement. #
is just a way to comment in .gitignore file.
# See https://help.github.com/ignore-files/ for more about ignoring files.
# dependencies
/node_modules
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
Adding below line in .gitignore will ignore node modules from the entire repository.
node_modules
https://i.stack.imgur.com/4HuMD.png
Create .gitignore file in root folder directly by code editor or by command
For Mac & Linux
touch .gitignore
For Windows
echo >.gitignore
open .gitignore declare folder or file name like this /foldername
echo >.gitignore
. ;)
**node_modules
This works for me
recursive approach to ignore all node_modules present in sub folders
it will automatically create a .gitignore
file if not then create a file name .gitignore
and add copy & paste the below code
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
these below are all unnecessary files
See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
and save the .gitignore
file and you can upload
Add below line to your .gitignore
/node_modules/
In my case, writing /node_modules without the foreslash after was not working
you can do it with SVN/Tortoise git as well.
just right click on node_modules -> Tortoise git -> add to ignore list.
This will generate .gitIgnore for you and you won't find node_modules folder in staging again.
If your subproject/client node_modules gets committed,
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
then add "node_modules" at the last line.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
node_modules
# ------ Up Here ------
Follow these steps -
open git bash on the folder where your project is, or open vs code terminal by hitting
CTRL + `
write, [ echo > .gitignore ] in the terminal or, create a file [.gitignore] directly into the folder
then write this to ignore node modules from entire repository
node_modules
or, try this to ignore all node_modules from multiple sub folders
**node_modules
Note : if you make spelling mistake while typing the name of the folder or file, it won't work. so, double check spelling
Add node_modules/ or node_modules to the .gitignore file to ignore all directories called node_modules in the current folder and any subfolders.
In Mac,
Open sourcetree click particular project click settings click Advanced click Edit gitignore Write "node_modules" And Save.
Add below line to your .gitignore
*/node_modules/*
This will ignore all node_modules in your current directory as well as subdirectory.
just add different .gitignore files to mini project 1 and mini project 2. Each of the .gitignore files should /node_modules and you're good to go.
foe the ones who are trying the answers above and still facing the problem
I've tried almost all of the answers eventually , it fixed my problem with ignoring node_modules but only after i committed the changes !
It's not really a good practice to keep no modules in the git repository. #gitignore file To Remove node_modules Folder Create gitignore Remove node_modules
Success story sharing