Струкчинский Всеволод @floatdrop · lifecycle hooks 34 publish: prepublish,...

50
Струкчинский Всеволод @floatdrop

Upload: others

Post on 03-Jun-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

Струкчинский Всеволод

@floatdrop

Page 2: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

– найдётся

подходящий модуль

Page 3: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

http://www.modulecounts.com 3

Page 4: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

🎉 300 000

Page 5: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

5

Page 6: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

https://nodejs.org/ 6

Page 7: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

7

Page 8: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

8

registry.npmjs.org

Локальный кеш

Интернет

Page 9: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

9

npm.company.ru

Локальный кеш

Интернет

Page 10: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

10

http://npmjs.org

Page 11: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

11

https://npms.io

Page 12: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

Команды NPM

Page 13: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

https://github.com/npm/npm/issues/5082#issuecomment-226919433 13

npm install npm -g

⚠ Обновитесь до 2.15.8 или 3.10.1

Page 14: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

Что такое npm пакет?

14

1. Архив с файлами 2. В нем есть package.json

Page 15: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

15

npm init --yes1. Создает package.json 2. И все 3. npmjs.com/generator-nm

Page 16: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

16

Page 17: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

17

npm install webpack

npm install --save

npm install -S

npm install --save-dev

npm install -D

Page 18: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

http://npm.anvaka.com/#/view/2d/webpack 18

Page 19: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

19

Page 20: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

SemVer

Page 21: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

https://bocoup.com/weblog/npm-by-numbers 21

1. Это просто договоренность

2. ~70% модулей имеют 0 мажорную версию

Page 22: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

22

^ ~ x

~1.0.0 – обновлять патчи

^1.0.0 – обновлять минорные и патчи

1.0.x – обновлять x

Page 23: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

23

^ ~ x

"request": "^2.53.x"

Page 24: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

http://semver.npmjs.com

24

Page 25: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

25

npm install --production

npm prune --production

Page 26: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

26

npm shrinkwrap

1. Фиксирует конкретные версии пакетов

2. Сохраняет их в npm-shrinkwrap.json

3. Установка быстрее в 2.5 раза!

Page 27: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

27

shrinkpack1. npm shrinkwrap —dev

2. shrinkpack

Скачивает .tar.gz в node_shrinkwrap

Меняет resolved в npm-shrinkwrap.json

Page 28: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

28

npm outdated

Package Current Wanted Latest Locationdomutils 1.3.0 1.3.0 1.5.1 @npm/testnpmhandlebars 1.3.0 1.3.0 4.0.5 @npm/testnpmhbsfy 1.3.2 1.3.2 2.7.0 @npm/testnpm

Page 29: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

29

npm outdated

david-dm.org

Page 30: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

npm – новый простой make

Page 31: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

31

npm startnpm stopnpm restartnpm test

Page 32: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

npm run build

32

Page 33: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

npm run build

33

Page 34: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

Lifecycle hooks

34

publish:   prepublish, publish, postpublishinstall:      preinstall, install, postinstalluninstall: preuninstall, uninstall, postuninstallversion:   preversion, version, postversiontest:         pretest, test, postteststop:         prestop, stop, poststopstart:        prestart, start, poststartrestart:     prerestart, restart, postrestart

commit?

Page 35: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

35

{  "scripts": {    "precommit": "npm test",    "prepush": "npm test” }}

https://www.npmjs.com/package/husky

npm install husky -D

Page 36: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

npm – немедленно публикуй модуль

Page 37: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

Версионирование

37

npm version patch

2.0.0 major minor

1. Создает коммит с увеличенной версией в package.json

2. Добавляет git тег с этой версией

Page 38: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

Публикация

38

npm publish

Page 39: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

39

Page 40: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

Чеклист перед публикацией

40

1. Убедиться, что ветка master

2. Посмотреть, что нет новых коммитов в upstream

3. Удостовериться, что пакет работает с зависимостями из package.json

4. Запустить тесты

5. Поднять версию – npm version

6. Опубликовать – npm publish

7. Запушить в репозиторий коммит и тег

Page 41: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

41

npm install np -g✔ Версия Node.JS < 6✔ Ветка master

✔ Нет новых коммитов в upstream

✔ Зависимости из package.json

✔ Тесты

✔ Поднимает версию

✔ Публикует пакет

✔ Пушит коммит и тег в репозиторий

Page 42: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

Поддержка двух версий

42

npm publish --tag=5.x-branch

npm publish --tag=latest

npm show npm dist-tags

Page 43: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

Поддержка двух модулей

* /usr/local/lib/node_modules/got 43

A B

1. npm link node_modules* 2. npm link A

Page 44: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

left-pad

Page 45: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

45

npm unpublish

Удаляет пакет или конкретную версию

* Если не прошло 24 часа

Page 46: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

cnpmjs.org

46

Page 47: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

.npmrc

Page 48: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

.npmrc

https://github.com/npm/npm/issues/11283 48

cache-min=9999

loglevel=silent

progress=false

Ускоряет установку вдвое!

Page 49: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

.npmrc

49

cache-min=9999

loglevel=silent

progress=false

save-exact=true

ignore-scripts=true

Page 50: Струкчинский Всеволод @floatdrop · Lifecycle hooks 34 publish: prepublish, publish, postpublish install: preinstall, install, postinstall uninstall: preuninstall,

Спасибо! Вопросы?