npm
Вся документация по npm здесь: https://docs.npmjs.com/all
Синтаксис версий
versionMust matchversionexactly>versionMust be greater thanversion>=versionetc<version<=version~version"Approximately equivalent to version" See semver^version"Compatible with version" See semver1.2.x1.2.0, 1.2.1, etc., but not 1.3.0http://...See 'URLs as Dependencies' below*Matches any version""(just an empty string) Same as*version1 - version2Same as>=version1 <=version2.range1 || range2Passes if either range1 or range2 are satisfied.git...See 'Git URLs as Dependencies' belowuser/repoSee 'GitHub URLs' belowtagA specific version tagged and published astagSee[npm-dist-tag](https://docs.npmjs.com/cli/dist-tag)path/path/pathSee Local Paths below
Создание нового package.json: npm init
Если все настройки нужны дефолтные, то можно npm init --yes
При дефолтных настройках будет создан package.json следующего содержания:
{
	"name": "npm",
	"version": "1.0.0",
	"description": "",
	"main": "index.js",
	"scripts": {
		"test": "echo \"Error: no test specified\""
	},
	"author": "",
	"license": "ISC"
}main - указывает, какой скрипт будет запущен (через require), когда кто-то сделает require('./module'), где module - это папка, в которой лежит наш package.json
Корневой папкой для npm считается первая папка по иерархии вверх, начиная с текущей, в которой есть package.json.
npm install <module> - установит модуль в корневую папку, но не сохранит его в package.json. По умолчанию качается последняя версия.
npm install --save <module> - установит модуль в корневую папку и сохранит его в package.json. Туда добавляется версия с префиксом ^, то есть версия, совместимая с последней на данный момент.
Если в require указан путь, начинающийся с /, ./ или ../, то ищется файл по указанному относительному пути, начиная с расположения текущего исполняемого файла.
Когда делается require('<module>') то сначала в текущей папке ищется папка node_modules, затем в ней ищется папка <module>, а в ней package.json, из которого берется main и запускается этот файл. Если что-то в этом пути не найдено, то ищется node_modules в папке на 1 уровень выше, затем еще выше и т.д. Если так ничего и не нашлось, то ищет среди глобальных модулей.
Глобальные модули
Если есть переменная окружения NODE_PATH, где через точку с запятой перечислены пути, то сначала модуль ищется там.
Затем модули ищутся по следующим адресам:
- 1: 
$HOME/.node_modules - 2: 
$HOME/.node_libraries - 3: 
$PREFIX/lib/node 
где $HOME - домашняя папка юзера, а $PREFIX - переменная node_prefix (???)
У меня на домашней машине все глобальные модули ставятся в "C:\Users\Y\Application Data\npm"
Если нужно удалить все глобальные модули, то, кажется, можно удалить эту папку. А для локальных - удалить соответствующую node_modules. У меня так сработало, но возможно это не во всех случаях поможет. Вообще на этот случай есть модуль rimraf.
Документация по модулям в NodeJS: https://nodejs.org/api/modules.html
npm list - выводит список всех установленных в текущем проекте модулей и их версий. Если какой-то модуль перечислен в packages.json, но не установлен в текущем проекте, то про него будет ошибка.
npm list -g - выводит список глобальных модулей
В packages.json могут быть описаны несколько скриптов, например:
"scripts": {
	"start": "react-scripts start",
	"build": "react-scripts build",
	"test": "react-scripts test --env=jsdom",
	"eject": "react-scripts eject"
}Вызываются эти скрипты так:
npm run start
npm run build
Локальный тест упаковки пакета**
npm pack //пакуем
tar -tf packagename-version.tgz //смотрим, что внутри
npm install ../path/to/your/npm/packagename-vesion.tgz //устанавливаемЛокальный дебаг пакета
Допустим, разрабатываем плагин для PostCSS в виде пакета postcss-simple-plugin и хотим затестить его в проекте postcss-test. Делаем так:
cd ~/postcss-simple-plugin
npm link
cd ~/postcss-test
npm link postcss-simple-pluginРазмер
Размер бандла
Для подсчета размера бандла можно воспользоваться утилитой size-limit.
Пишем в package.json:
"size-limit": [
  {
    "path": "index.js"
  }
],И запускаем в консоли size-limit без параметров - он выдаст размер бандла со всеми зависимостями и в сжатом виде.
Если нужно разобраться, то size-limit --why.
Размер пакета
Здесь поможет утилита package-size. Она качает и устанавливает пакет во временную директорию, но работает только для уже опубликованных пакетов. 
package-size react