ChatGPT解决这个技术问题 Extra ChatGPT

Git - Ignore node_modules folder everywhere

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

A
Abhishek Kumar

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


what would be the glob path to do the same for karma, excludes?
For a gitignore template for nodejs: github.com/github/gitignore/blob/master/Node.gitignore
See @AndrewSchreiber's answer if you have previously added the node_modules folder to git. You'll need to remove it from the cache with "git rm -r --cached node_modules".
After enabling this, 10000+ file commits saved which was just not letting me do anything with git :D
You don't need the slash at the end
A
Andrew Schreiber

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.
Hmm, seems to differ from OS to OS
echo "node_modules/" > .gitignore should create a new file with original content, using >> appends text onto the end of existing specified file
you need to remove th " " around the node_modules in windows cmd
m
mbomb007

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.

Reference

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.

Reference


Care to explain why this approach is better than simply node_modules/?
In case of a monorepo, you could have several frontends to deal with. This approach will recursively ignore all the node_modules folders, independently of where they are located (e.g. /BackOffice/frontend/node_modules)
You don't need the **, it works the same without it
That didn't work for me, that is the reason I created this answer. For react native monorepo & firebase with cloud functions.
j
joshtch

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*

Why would you add build to the .gitignore?
@SebastianNielsen The same reason we don't track node_modules. You get build/ by compiling.
Do not add the slash at the start, it stops this from being recursive
@SoftwareEngineer can you create UR
@MustkeemK - sorry, what is UR?
U
Umesh Khurana

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

node_modules

https://i.stack.imgur.com/4HuMD.png


This is recursive
A
Amit Kumar

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


I guess you meant echo >.gitignore. ;)
H
Hanzla Habib
**node_modules

This works for me

recursive approach to ignore all node_modules present in sub folders


S
Salma Elshahawy

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


E
Emmanuel Kasongo Mavetya

Add below line to your .gitignore

/node_modules/

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


D
Dhruvesh Patel

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.


B
Bayram

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

D
Dharman

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


M
Muhammad Dawood

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


M
Muthulakshmi M

In Mac,

Open sourcetree click particular project click settings click Advanced click Edit gitignore Write "node_modules" And Save.


M
Manish Dubey

Add below line to your .gitignore

*/node_modules/*

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


Note that there is already an accepted answer to this question. Please edit your answer to ensure that it improves upon other answers already present in this question.
A
Alpha Dzingina

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.


I think this is what the original poster wanted to avoid. The question asked how to make a single .gitignore change to exclude all node_modules folders.
oh...he wasn't specific about having just 1 .gitignore file
H
Harvester Haidar

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 !


j
justinvaugha

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


Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.