Git - Ignore node_modules folder everywhere

GitNode Modules

Git Problem Overview


I have a project containing multiple other projects :

  • Main project
  • 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/*

Git Solutions


Solution 1 - Git

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.

example

Solution 2 - Git

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.

Solution 3 - Git

Edit - (Before 09-04-2022)

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.

Reference

Old Way - (Before 09-04-2022)

**/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.

Reference

Solution 4 - Git

First and foremost thing is to add .gitignore file in my-app. Like so in image below.

Put .gitignore in the parent folder/directory of node_modules.

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*

Solution 5 - Git

Adding below line in .gitignore will ignore node modules from the entire repository.

node_modules

enter image description here

Solution 6 - Git

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

Solution 7 - Git

**node_modules

This works for me

recursive approach to ignore all node_modules present in sub folders

Solution 8 - Git

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

Solution 9 - Git

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.

Solution 10 - Git

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 ------

Solution 11 - Git

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

Solution 12 - Git

Add node_modules/ or node_modules to the .gitignore file to ignore all directories called node_modules in the current folder and any subfolders.

Solution 13 - Git

In Mac,

  1. Open sourcetree
  2. click particular project
  3. click settings
  4. click Advanced
  5. click Edit gitignore
  6. Write "node_modules"
  7. And Save.

Solution 14 - Git

Add below line to your .gitignore

/node_modules/

In my case, writing /node_modules without the foreslash after was not working

Solution 15 - Git

Add below line to your .gitignore

*/node_modules/*

This will ignore all node_modules in your current directory as well as subdirectory.

Solution 16 - Git

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.

Solution 17 - Git

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 !

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMehdiwayView Question on Stackoverflow
Solution 1 - GitAlikView Answer on Stackoverflow
Solution 2 - GitAndrew SchreiberView Answer on Stackoverflow
Solution 3 - GitRajendran NadarView Answer on Stackoverflow
Solution 4 - GitMustkeem KView Answer on Stackoverflow
Solution 5 - GitUmesh KhuranaView Answer on Stackoverflow
Solution 6 - GitAmit KumarView Answer on Stackoverflow
Solution 7 - GitHanzla HabibView Answer on Stackoverflow
Solution 8 - GitShaik MuneerView Answer on Stackoverflow
Solution 9 - GitDhruvesh PatelView Answer on Stackoverflow
Solution 10 - GitBayramView Answer on Stackoverflow
Solution 11 - GitJoyShahebView Answer on Stackoverflow
Solution 12 - GitMuhammad DawoodView Answer on Stackoverflow
Solution 13 - GitMuthulakshmi MView Answer on Stackoverflow
Solution 14 - GitEmmanuel Kasongo MavetyaView Answer on Stackoverflow
Solution 15 - GitManish DubeyView Answer on Stackoverflow
Solution 16 - GitAlpha DzinginaView Answer on Stackoverflow
Solution 17 - GitHarvester HaidarView Answer on Stackoverflow