Commandes bash, git, npm et yarn, ainsi qu'un peu sur package.json et semver

Bonne journée, mes amis!



Voici une petite feuille de triche pour les commandes de base bash, git, npm, yarn, package.json et semver.



Légende: [nom-répertoire] - signifie le nom du répertoire, | - signifie "ou".



Je recommande de saisir chaque commande dans le terminal et d'étudier attentivement la sortie, afin que vous vous en souveniez rapidement et que vous déterminiez les commandes dont vous avez besoin et celles dont vous n'avez pas besoin.



Je m'excuse pour les éventuelles erreurs et erreurs typographiques. Je serai heureux de vos commentaires et suggestions.



Sans autre préface.



Table des matières:





frapper



bash est un outil de ligne de commande qui vous permet de faire certaines choses courantes.



Installation: Dans mon cas, bash a été installé avec git.



Référence:



help


Historique des commandes:



history


Nettoyage du terminal:



clear


Sortie du terminal:



exit


Création d'annuaire:



// make directory
mkdir [dir-name]
// 
mkdir my-app
//  
mkdir -p {dir1,dir2}
//   
mkdir -p my-app/{css,js}


Changer de répertoire:



// change directory
cd [dir-name]
// 
cd my-app
//   
cd !$
//  
cd ..
//    
cd ../..
//  
cd -
//  
cd ~


Le chemin vers le répertoire courant:



// print work directory
pwd


Liste des fichiers:



// list
ls
//   
ls -a | -f
//  
// ,  
ls -l


Création de fichier:



touch [file-name]
// 
touch index.html
//  
touch my-app/{index.html,css/style.css,js/script.js}


Contenu du fichier:



cat [file-name]
// 
cat index.html
//     
cat [file-name] | sort | uniq
//  
less [file-name] // q - exit
// n    
head -50 [file-name]
// n    
tail -50 [file-name]
//  
grep [string] [file-name]

//     
unzip [achive-name]

//  
file [file-name]


Copier, déplacer et supprimer un fichier:



// copy
cp [file1] [file2]

// move
mv [file1] [file2]
// 
//        
mv [dir1]/*.* [dir2]

// remove
rm [file-name]
//   
rmdir [dir-name]
//   
rm -r [dir-name]
// 
rm -rf [dir-name]


Sortie vers la borne de la ligne:



echo [string]
// 
echo hello
//    
echo hello > greet.txt
//    
echo hello >> greet.txt


Téléchargement de fichiers:



wget [url]


Connecteurs:



true && echo hello
false || echo hello
echo hello ; ls


Convoyeur:



//    - \n
cat [file] | wc -l


git



git est un système de contrôle de version distribué qui vous permet de contrôler le processus de modification d'un projet.



Livre Pro Git .



Screencast par Ilya Kantor .



Démarrage rapide: Git How To .



Installation: git-scm.com .



Vérification de l'installation:



git --version


Référence:



git help
git help [command-name]
git [command-name] --help | -h


Paramètres minimum:



// --local -    
// --global -    
// --system -    , ..   
git config --global user.name "My Name"
git config --global user.email "myemail@example.com"


Paramètres additionnels:



//   
git config --list | -l --global

//   
git config --global --edit | -e


Créer un référentiel:



git init


Nettoyage du référentiel:



// -d -  , -x -   , -f - 
git clean | -dxf


Suppression de fichiers et de répertoires:



// remove
git rm [file-name]
git rm -r [dir-name]

git rm --force | -f


Déplacement de fichiers:



// git add + git remove
// move
git mv [old-file] [new-file]


Affichez l'état du référentiel:



git status


Ajout de modifications:



git add [file-name]

git add --force | -f

//  
git add . | --all | -A

//           .gitkeep


Ajout d'un message (commit):



//  
git commit

//    ,    git add . | -A
//  ,      
git commit --message | -m "My Message"

//   ,  git add [file-name]   
git commit --all | -a -m | -am "My Message"

//  
git commit --amend "My Message" | --no-edit


Afficher le commit:



//  
git show

//  
git show [hash] //   4 

//       
git show :/[string]

//    
git show [tag-name]


Affichage de la différence entre les commits:



git diff HEAD | @ // HEAD -  ,  ; @ -   HEAD

// staged
git diff --staged | --cached

git diff [hash1] [hash2]

//   
git diff [branch1]...[branch2]

//       
git commit --verbose | -v

//   
git diff --word-diff | --color-words


Afficher l'historique des modifications:



git log

// n -  
git log -n
// --since, --after - 
// --until, --before - 

// 
git log -p

//  
git log --graph --oneline --stat

//  
git log --pretty=format
// 
git log --pretty=format:'%C(red)%h %C(green)%cd %C(reset)| %C(blue)%s%d %C(yellow)[%an]' --date=short | format-local:'%F %R'

//    , , ; i -   
git log --grep | -G [string] | [file] | [branch] & -i

//    
git log --grep [string1] --grep [string2] --all-match

//     
git log -L '/<head>/','/<\/head>/':index.html

//   
git log --author=[name]


Annulation des modifications:



git reset
// --hard -     
// --soft -     
// --mixed -  :   ,   

git reset --hard [hash] | @~ // @~ -    HEAD

// 
git reset --hard ORIG_HEAD

//     
git checkout

git restore


Travailler avec des succursales:



//  
git branch

//  
git branch [branch-name]

//   
git checkout [branch-name]

// branch + checkout
git checkout -b [branch-name]

// 
git branch -m [old-branch] [new-branch]

//  
git branch -d [branch-name]

//  
git merge [branch-name]


Résolution des conflits de fusion:



// ,   ,  

//     
git checkout --ours

//     
git checkout --theirs

//  
git reset --merge
git merge --abort

//   
git checkout --conflict=diff3 --merge [file-name]

//  
git merge --continue


Référentiel distant:



// 
git clone [url] & [dir]

// 
git remote
git remote show
git remote add [shortname] [url]
git remote rename [old-name] [new-name]

//  
// git fetch + git merge
git pull

//  
git push


Mots clés:



// 
git tag

//  
git tag [tag-name]
//
git tag v1-beta

//  
git tag -a v1 -m "My Version 1"

// 
git tag -d [tag-name]


Débogage



git bisect

git blame

git grep


Enregistrement des modifications non validées:



// 
git stash

// 
git stash pop


Copier un commit:



git cherry-pick | -x [hash]

//   
// 
git cherry-pick --abort

// 
git cherry-pick --continue

git cherry-pick --no-commit | -n

// --cherry = --cherry-mark --left-right --no-merges
git log --oneline --cherry [branch1] [branch2]


Déménagement:



git rebase [branch]

//   
// 
git rebase --abort

// 
git rebase --skip

// 
git rebase --continue

//   
git rebase --preserve-merges | -p

//  
git rebase -i [branch]


Compléter automatiquement les conflits en double:



// rerere - reuse recorder resolution
// rerere.enabled true | false
// rerere.autoUpdate true | false
// rerere-train.sh -    rerere
git rerere forget [file-name]


Commits inversés:



git revert @ | [hash]

//  
// git reset --hard @~  
git revert [hash] -m 1

// git merge [branch]  
//  
git revert [hash]

//    rebase
git rebase [branch1] [branch2] | --onto [branch1] [hash] [branch2]

git merge [branch]

git rebase [hash] --no-ff


Un exemple d'alias (raccourcis) pour .gitconfig:



[alias]
    aa = add -A
    co = checkout
    ci = commit -m
    st = status
    br = branch


Exemple .gitconfig:
[user]
	name = [My Name]
	email = [myemail@example.com]
	username = [myusername]
[core]
	editor = [myeditor]
	whitespace = fix,-indent-with-non-tab,trailing-space,cr-at-eol
	pager = delta
[web]
	browser = google-chrome
[instaweb]
	httpd = apache2 -f
[rerere]
	enabled = 1
	autoupdate = 1
[push]
	default = matching
[color]
	ui = auto
[color "branch"]
	current = yellow bold
	local = green bold
	remote = cyan bold
[color "diff"]
	meta = yellow bold
	frag = magenta bold
	old = red bold
	new = green bold
	whitespace = red reverse
[color "status"]
	added = green bold
	changed = yellow bold
	untracked = red bold
[difftool]
	prompt = false
[delta]
	features = line-numbers decorations
	line-numbers = true
[delta "decorations"]
	minus-style = red bold normal
	plus-style = green bold normal
	minus-emph-style = white bold red
	minus-non-emph-style = red bold normal
	plus-emph-style = white bold green
	plus-non-emph-style = green bold normal
	file-style = yellow bold none
	file-decoration-style = yellow box
	hunk-header-style = magenta bold
	hunk-header-decoration-style = magenta box
	minus-empty-line-marker-style = normal normal
	plus-empty-line-marker-style = normal normal
	line-numbers-right-format = "{np:^4}│ "
[github]
	user = [username]
	token = token
[gitflow "prefix"]
	versiontag = v
[sequence]
	editor = interactive-rebase-tool
[alias]
	a = add --all
	ai = add -i
	###
	ap = apply
	as = apply --stat
	ac = apply --check
	###
	ama = am --abort
	amr = am --resolved
	ams = am --skip
	###
	b = branch
	ba = branch -a
	bd = branch -d
	bdd = branch -D
	br = branch -r
	bc = rev-parse --abbrev-ref HEAD
	bu = !git rev-parse --abbrev-ref --symbolic-full-name "@{u}"
	bs = !git-branch-status
	###
	c = commit
	ca = commit -a
	cm = commit -m
	cam = commit -am
	cem = commit --allow-empty -m
	cd = commit --amend
	cad = commit -a --amend
	ced = commit --allow-empty --amend
	###
	cl = clone
	cld = clone --depth 1
	clg = !sh -c 'git clone git://github.com/$1 $(basename $1)' -
	clgp = !sh -c 'git clone git@github.com:$1 $(basename $1)' -
	clgu = !sh -c 'git clone git@github.com:$(git config --get user.username)/$1 $1' -
	###
	cp = cherry-pick
	cpa = cherry-pick --abort
	cpc = cherry-pick --continue
	###
	d = diff
	dp = diff --patience
	dc = diff --cached
	dk = diff --check
	dck = diff --cached --check
	dt = difftool
	dct = difftool --cached
	###
	f = fetch
	fo = fetch origin
	fu = fetch upstream
	###
	fp = format-patch
	###
	fk = fsck
	###
	g = grep -p
	###
	l = log --oneline
	lg = log --oneline --graph --decorate
	###
	ls = ls-files
	lsf = !git ls-files | grep -i
	###
	m = merge
	ma = merge --abort
	mc = merge --continue
	ms = merge --skip
	###
	o = checkout
	om = checkout master
	ob = checkout -b
	opr = !sh -c 'git fo pull/$1/head:pr-$1 && git o pr-$1'
	###
	pr = prune -v
	###
	ps = push
	psf = push -f
	psu = push -u
	pst = push --tags
	###
	pso = push origin
	psao = push --all origin
	psfo = push -f origin
	psuo = push -u origin
	###
	psom = push origin master
	psaom = push --all origin master
	psfom = push -f origin master
	psuom = push -u origin master
	psoc = !git push origin $(git bc)
	psaoc = !git push --all origin $(git bc)
	psfoc = !git push -f origin $(git bc)
	psuoc = !git push -u origin $(git bc)
	psdc = !git push origin :$(git bc)
	###
	pl = pull
	pb = pull --rebase
	###
	plo = pull origin
	pbo = pull --rebase origin
	plom = pull origin master
	ploc = !git pull origin $(git bc)
	pbom = pull --rebase origin master
	pboc = !git pull --rebase origin $(git bc)
	###
	plu = pull upstream
	plum = pull upstream master
	pluc = !git pull upstream $(git bc)
	pbum = pull --rebase upstream master
	pbuc = !git pull --rebase upstream $(git bc)
	###
	rb = rebase
	rba = rebase --abort
	rbc = rebase --continue
	rbi = rebase --interactive
	rbs = rebase --skip
	###
	re = reset
	rh = reset HEAD
	reh = reset --hard
	rem = reset --mixed
	res = reset --soft
	rehh = reset --hard HEAD
	remh = reset --mixed HEAD
	resh = reset --soft HEAD
	rehom = reset --hard origin/master
	###
	r = remote
	ra = remote add
	rr = remote rm
	rv = remote -v
	rn = remote rename
	rp = remote prune
	rs = remote show
	rao = remote add origin
	rau = remote add upstream
	rro = remote remove origin
	rru = remote remove upstream
	rso = remote show origin
	rsu = remote show upstream
	rpo = remote prune origin
	rpu = remote prune upstream
	###
	rmf = rm -f
	rmrf = rm -r -f
	###
	s = status
	sb = status -s -b
	###
	sa = stash apply
	sc = stash clear
	sd = stash drop
	sl = stash list
	sp = stash pop
	ss = stash save
	ssk = stash save -k
	sw = stash show
	st = !git stash list | wc -l 2>/dev/null | grep -oEi '[0-9][0-9]*'
	###
	t = tag
	td = tag -d
	###
	w = show
	wp = show -p
	wr = show -p --no-color
	###
	svnr = svn rebase
	svnd = svn dcommit
	svnl = svn log --oneline --show-commit
	###
	subadd = !sh -c 'git submodule add git://github.com/$1 $2/$(basename $1)' -
	subrm = !sh -c 'git submodule deinit -f -- $1 && rm -rf .git/modules/$1 && git rm -f $1' -
	subup = submodule update --init --recursive
	subpull = !git submodule foreach git pull --tags origin master
	###
	assume = update-index --assume-unchanged
	unassume = update-index --no-assume-unchanged
	assumed = !git ls -v | grep ^h | cut -c 3-
	unassumeall = !git assumed | xargs git unassume
	assumeall = !git status -s | awk {'print $2'} | xargs git assume
	###
	bump = !sh -c 'git commit -am \"Version bump v$1\" && git psuoc && git release $1' -
	release = !sh -c 'git tag v$1 && git pst' -
	unrelease = !sh -c 'git tag -d v$1 && git pso :v$1' -
	merged = !sh -c 'git o master && git plom && git bd $1 && git rpo' -
	aliases = !git config -l | grep alias | cut -c 7-
	snap = !git stash save 'snapshot: $(date)' && git stash apply 'stash@{0}'
	bare = !sh -c 'git symbolic-ref HEAD refs/heads/$1 && git rm --cached -r . && git clean -xfd' -
	whois = !sh -c 'git log -i -1 --author=\"$1\" --pretty=\"format:%an <%ae>\"' -
	serve = daemon --reuseaddr --verbose --base-path=. --export-all ./.git
	###
	behind = !git rev-list --left-only --count $(git bu)...HEAD
	ahead = !git rev-list --right-only --count $(git bu)...HEAD
	###
	ours = "!f() { git checkout --ours $@ && git add $@; }; f"
	theirs = "!f() { git checkout --theirs $@ && git add $@; }; f"
	subrepo = !sh -c 'git filter-branch --prune-empty --subdirectory-filter $1 master' -
	human = name-rev --name-only --refs=refs/heads/*
[filter "lfs"]
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
	process = git-lfs filter-process
	required = true




Exemple .gitignore:
### Node ###

# Logs
logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Optional npm cache directory
.npm

# Dependency directories
/node_modules
/jspm_packages
/bower_components

# Yarn Integrity file
.yarn-integrity

# Optional eslint cache
.eslintcache

# dotenv environment variables file(s)
.env
.env.*

#Build generated
dist/
build/

# Serverless generated files
.serverless/

### SublimeText ###
# cache files for sublime text
*.tmlanguage.cache
*.tmPreferences.cache
*.stTheme.cache

# workspace files are user-specific
*.sublime-workspace

# project files should be checked into the repository, unless a significant
# proportion of contributors will probably not be using SublimeText
# *.sublime-project


### VisualStudioCode ###
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

### Vim ###
*.sw[a-p]

### WebStorm/IntelliJ ###
/.idea
modules.xml
*.ipr
*.iml


### System Files ###
*.DS_Store

# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db

# Folder config file
Desktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent




npm



npm est un gestionnaire de packages qui vous permet d'installer des dépendances de projet.



Site officiel: npmjs.com .



Installation.



NPM installé avec Node.js .



De plus, npx est installé avec Node.js, ce qui vous permet d'exécuter des exécutables sans installer: npx create-react-app my-app.



Vérification de l'installation:



node --version | -v
npm --version | -v


Mise à jour:



npm i -g npm@latest


Liste des commandes disponibles:



npm help
npm help [command-name]


Initialisation du projet:



npm init

// auto
npm init --yes | -y


Installer les dépendances



npm install | i

//   
npm explore [package-name]

//   
npm doctor

// 
npm ci


Réinstallation forcée des dépendances:



npm i --force | -f


Installer uniquement les packages de production:



npm i --only=production | --only=prod


Ajouter une dépendance:



npm i [package-name]
npm i [package-name@version]

// 
npm i express


Ajout d'une dépendance de développement:



npm i --save-dev | -D [package-name]

// 
npm i -D nodemon


Mise à jour des dépendances:



npm update | up [package-name]


Suppression des dépendances:



// dependency
npm remove | rm | r [package-name]

// devDependency
npm r -D [package-name]


Package global d'installation / mise à jour / désinstallation:



npm i/up/r -g [package-name]

// 
npm i -g create-react-app
// 
create-react-app my-app


Déterminer les packages obsolètes:



npm outdated
npm outdated [package-name]


Liste des dépendances installées:



npm list | ls

// top level
npm ls --depth=0 | --depth 0

// global + top level
npm ls -g --depth 0


Informations sur le paquet:



npm view | v [package-name]

// 
npm v react
npm v react.description


Exécution de script / exécution de commande:



npm run [script]

// 
// package.json: "scripts": { "dev": "nodemon server.js" }
npm run dev
// script start  node server.js
npm start
npm stop


Suppression des packages en double:



npm dedupe | ddp


Suppression des packages superflus:



npm prune


Détection des vulnérabilités (menaces de sécurité):



npm audit
// json
npm audit --json
// plain text
npm audit --parseable


Corrigez automatiquement les vulnérabilités:



npm audit fix


fil



yarn, comme npm, est un gestionnaire de packages qui vous permet d'installer des dépendances de projet.



Site officiel: yarnpkg.com .



Installation:



npm i -g yarn


La commande "yarn dlx" vous permet d'exécuter des exécutables sans installer: yarn dlx create-react-app my-app. Pour ce faire, yarn doit être mis à jour vers la version 2: yarn set version berry.



Vérification de l'installation:



yarn --version | -v


Mise à jour:



yarn set version latest


Liste des commandes disponibles:



yarn help
yarn help [command-name]


Initialisation du projet:



yarn init

// auto
yarn init --yes | -y

// "private": true  package.json
yarn init --private | -p

// auto + private
yarn init -yp


Installation des dépendances:



yarn
// 
yarn install

//  
yarn install --silent | -s

// 
yarn --check-files


Réinstallation forcée des dépendances:



yarn install --force


Installer uniquement les packages de production:



yarn install --production | --prod


Ajouter une dépendance:



yarn add [package-name]
yarn add [package-name@version]

// 
yarn add express

//  
yarn add --silent
// 
yarn add -s


Ajout d'une dépendance de développement:



yarn add --dev | -D [package-name]

// 
yarn add -D nodemon


Mise à jour des dépendances:



yarn upgrade [package-name]


Suppression des dépendances:



yarn remove [package-name]


Package global d'installation / mise à jour / désinstallation:



yarn global add/upgrade/remove [package-name]

// 
yarn global add create-react-app
// 
create-react-app my-app


Liste des dépendances installées:



yarn list

// top level
yarn list --depth=0 | --depth 0


Informations sur le paquet:



yarn info [package-name]
// 
yarn why [package-name]

// 
yarn info react
yarn info react description
yarn why webpack


Exécution de script / exécution de commande:



yarn [script]
// 
yarn run [script]

// 
// package.json: "scripts": { "dev": "nodemon server.js" }
yarn dev


package.json



{
  "name": "my-app",
  "version": "1.0.0",
  "description": "my awesome app",
  "keywords": [
    "amazing",
    "awesome",
    "best"
  ],
  "private": true,
  "main": "server.js",
  "license": "MIT",
  "homepage": "https://my-website.com",
  "repository": {
    "type": "git",
    "url": "https://github.com/user/repo.git"
  },
  "repository": "github:user/repo",
  "author": {
    "name": "My Name",
    "email": "myemail@example.com",
    "url": "https://my-website.com"
  },
  "author": "My Name <myemail@example.com> (https://my-website.com)",
  "contributers": [
    {
      "name": "Friend Name",
      "email": "friendemail@example.com",
      "url": "https://friend-website.com"
    }
  ],
  "contributors": "Friend Name <friendemail.com> (https://friend-website.com)",
  "dependencies": {
    "express": "^4.17.1"
  },
  "devDependencies": {
    "nodemon": "^2.0.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "dev": "nodemon server.js"
  }
}


  • nom - nom du projet
  • version - version du projet (voir versioning)
  • description - description du projet (pourquoi avez-vous besoin d'un package?)
  • mots-clés - mots-clés (facilite la recherche dans le registre npm)
  • private — true npm
  • main —
  • repository — ( )
  • author — ( )
  • contributors — (, )
  • dependencies — (, )
  • devDependencies — (, )
  • scripts — ( , ), , , «yarn dev» «nodemon server.js»


Une liste complète des champs disponibles dans le fichier "package.json": npm-package.json



Les fichiers "package-lock.json" et "yarn.lock" contiennent des informations plus complètes sur les packages installés que package.json, par exemple, des versions spécifiques de packages au lieu d'une plage versions valides.



Gestion des versions



Chaque paquet a une version composée de trois chiffres (par exemple, 1.0.0), où le premier chiffre est la version majeure, le second est la version mineure (mineure) et le troisième est la version du correctif (correctif). La publication d'une nouvelle version s'appelle une version.



L'augmentation de chacun de ces nombres selon les règles de version sémantique (semver) signifie ce qui suit:



  • majeur - rendant les modifications incompatibles avec la version précédente
  • mineur - nouvelle fonctionnalité compatible avec la version précédente
  • patch - corrections de bugs, améliorations mineures


Les plages de versions ou les versions valides sont déterminées à l'aide des opérateurs (comparateurs) suivants:



  • * - toute version (identique à une chaîne vide)
  • <1.0.0 - toute version inférieure à 1.0.0
  • <= 1.0.0 - toute version inférieure ou égale à 1.0.0
  • > 1.0.0 - toute version supérieure à 1.0.0
  • > = 1.0.0 - toute version supérieure ou égale à 1.0.0
  • = 1.0.0 - version 1.0.0 uniquement (l'opérateur "=" peut être omis)
  • > = 1.0.0 <2.0.0 - supérieur ou égal à 1.0.0 et inférieur à 2.0.0
  • 1.0.0-2.0.0 - un ensemble de versions inclus
  • ^ 1.0.0 - versions mineures et correctives (> = 1.0.0 <2.0.0)
  • ~ .1.0.0 - uniquement les versions de correctifs (> = 1.0.0 <1.1.0)


Détails pour semver: node-semver .



Merci de votre attention.



All Articles