SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
Multi Packages
Appications
Андрей Кучеренко
Lead Software Engineer @ EPAM Systems
kucherenko
Project Evaluation
Test Suites: 55 passed, 55 total
Tests: 303 passed, 303 total
Snapshots: 0 total
Time: 5.131s
Test Suites: 458 passed, 458 total
Tests: 3007 passed, 3007 total
Snapshots: 0 total
Time: 90.131s
|----------|
| % Lines |
|----------|
| 100|
Было СталоUnit Tests
Coverage
|----------|
| % Lines |
|----------|
| 89.7 |
$ tslint 'packages/*/{src/**/,test/**/}*.ts{,x}' --force
Done in 0.47s.
Found 0 exact clones with 0 duplicated lines in 0 files
0.0% (0 lines) duplicated lines out of 2302 total lines of code.
Done in 0.18s.
Took 2 min 56 sec on Jenkins
Linters
Duplications
CI
$ tslint 'packages/*/{src/**/,test/**/}*
Done in 19.47s.
Found 69 exact clones with 1467 duplicat
4.97% (1467 lines) duplicated lines out
Done in 2.75s.
Took 10 min 47 sec on Jenkins
Team 1
Git
Team 1
Project Specific
pkg module component service
pkg - 1.1 1.0 -
module - - 0.9 1.0
component - - - 2.0
service - - - -
Проблемы NPM
Тяжело управлять всеми пакетами одновременно
Тяжело следить за версиями
Тяжело уследить за зависимостями
Monorepos Projects
https://lernajs.io/
Возможности Lerna
Init project
Bootstrap project
Publish project
Manage versions
npm link internal packages
├── lerna.json
├── package.json
└── packages
├── awesome-component
│ └── package.json
├── awesome-module
│ └── package.json
├── awesome-package
│ └── package.json
└── awesome-service
└── package.json
{
"lerna": "2.0.0-beta.38",
"packages": [
"packages/*"
],
"version": "0.0.1"
}
➜ awesome-lerna git:(master) ✗ lerna init
Lerna v2.0.0-beta.38
Updating package.json.
Updating lerna.json.
Successfully created Lerna files
➜ awesome-lerna git:(master) ✗ lerna bootstrap
Lerna v2.0.0-beta.38
Bootstrapping 4 packages
Preinstalling packages
Symlinking packages and binaries
Postinstalling packages
Prepublishing packages
➜ awesome-lerna git:(master) ✗ lerna publish
Lerna v2.0.0-beta.38
Current version: 0.0.1
Checking for updated packages...
Comparing with: v0.0.1
➜ awesome-lerna git:(master) ✗ lerna run test
Lerna v2.0.0-beta.38
Successfully ran npm script 'test' in packages:
- awesome-component
- awesome-module
- awesome-package
- awesome-service
➜ awesome-lerna git:(master) ✗ lerna exec -- rm -rf ./node_modules
Lerna v2.0.0-beta.38
Проблемы Lerna
Зависимости с разными версиями у пакетов
npm link и все, что с этим связано
Много node_modues
Возможности @knitjs
Все зависимости в одном package.json
Нет node_modules в каждом репозитории
Показывает неиспользуемые и неустановленые
зависимости
✗ create-knit-app lets-start-knitting
info creating a new knit app in lets-start-knitting
success finished creating your project!
info start exploring by running:
cd lets-start-knitting
yarn start
info read more about what you can do with knit:
info https://github.com/knitjs/knit
➜ lets-start-knitting git:(master) ✗ tree
.
├── modules
│ └── node_modules
│ ├── @myscope
│ │ ├── body-component
│ │ │ ├── help.png
│ │ │ ├── index.js
│ │ │ ├── list_missing.png
│ │ │ ├── list.png
│ │ │ ├── package.json
│ │ │ ├── validate_missing.png
│ │ │ ├── validate_unused.png
│ │ │ └── valid.png
│ │ └── header-component
│ │ ├── index.js
│ │ ├── knit_logo.svg
│ │ └── package.json
│ ├── page-component
│ │ ├── index.js
│ │ ├── package.json
│ │ └── __tests__
│ │ └── page-component.test.js
│ └── webpack_entry
│ ├── index.html
│ ├── index.js
│ ├── package.json
│ └── README.md
├── node_modules
├── package.json
└── yarn.lock
➜ lets-start-knitting git:(master) ✗ tail modules/node_modules/@myscope/header-component/package.json
{
"name": "@myscope/header-component",
"version": "0.0.0",
"browser": true
}
➜ lets-start-knitting git:(master) ✗ yarn knit build
yarn knit v0.21.3
$ knit build
✔ discovering modules
✔ validating package.json
✔ discovering modules
✔ validating package.json
✔ check for missing dependencies
✔ check for unused dependencies
✔ reading package.json of modules
✔ getting last tag
✔ determining updated modules since last release
✔ rebuilding project
✔ rebuilding updated modules
✔ @myscope/body-component
✔ @myscope/header-component
✔ page-component
Done in 14.92s.
➜ lets-start-knitting git:(master) ✗ yarn knit help
yarn knit v0.21.3
$ knit help
Commands:
list [modules...] list modules and their dependencies
validate validate modules for release
server start a dev server
schema update graphql schema
version <version> version updated modules
build build updated modules
stitch update the package.json of all modules with knitted
dependencies and project meta data
publish publish updated modules
release <version> run full release pipeline on updated modules.
version > build > knit > publish > push
➜ lets-start-knitting git:(master) ✗ yarn knit list
yarn knit v0.21.3
$ knit list
✔ discovering modules
✔ reading package.json of modules
info showing dependencies for 3 modules
- @myscope/body-component (0.0.0) [2 dependencies]
- @myscope/header-component (0.0.0) [2 dependencies]
- page-component (0.0.0) [4 dependencies]
Done in 0.79s.
➜ lets-start-knitting git:(master) ✗ yarn knit validate
yarn knit v0.21.3
$ knit validate
✔ looking for `node_modules` in .*ignore files
✔ discovering modules
✔ validating package.json
✔ check for missing dependencies
✔ check for unused dependencies
Done in 0.87s.
Проблемы @knitjs
Работает только с babel, не поддерживает
typescript, coffeescript, etc.
Тяжело менять под свои нужды
Работа с версиями только в одном стиле
Не очень большое комьюнити
Дано:
JS Lab2017_Андрей Кучеренко _Разработка мультипакетных приложения: причины, способы, риски
JS Lab2017_Андрей Кучеренко _Разработка мультипакетных приложения: причины, способы, риски
JS Lab2017_Андрей Кучеренко _Разработка мультипакетных приложения: причины, способы, риски
JS Lab2017_Андрей Кучеренко _Разработка мультипакетных приложения: причины, способы, риски

Contenu connexe

Tendances

Test kitchen 1.0 - Fletcher Nichol
Test kitchen 1.0 - Fletcher NicholTest kitchen 1.0 - Fletcher Nichol
Test kitchen 1.0 - Fletcher Nichol
Devopsdays
 
Percona XtraDB Cluster before every release: Glimpse into CI testing
Percona XtraDB Cluster before every release: Glimpse into CI testingPercona XtraDB Cluster before every release: Glimpse into CI testing
Percona XtraDB Cluster before every release: Glimpse into CI testing
Raghavendra Prabhu
 

Tendances (20)

Test kitchen 1.0 - Fletcher Nichol
Test kitchen 1.0 - Fletcher NicholTest kitchen 1.0 - Fletcher Nichol
Test kitchen 1.0 - Fletcher Nichol
 
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie..."How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
 
Modern Infrastructure from Scratch with Puppet
Modern Infrastructure from Scratch with PuppetModern Infrastructure from Scratch with Puppet
Modern Infrastructure from Scratch with Puppet
 
PuppetConf 2016: Getting to the Latest Puppet – Nate McCurdy & Elizabeth Witt...
PuppetConf 2016: Getting to the Latest Puppet – Nate McCurdy & Elizabeth Witt...PuppetConf 2016: Getting to the Latest Puppet – Nate McCurdy & Elizabeth Witt...
PuppetConf 2016: Getting to the Latest Puppet – Nate McCurdy & Elizabeth Witt...
 
Zero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleZero Downtime Deployment with Ansible
Zero Downtime Deployment with Ansible
 
Docker at Digital Ocean
Docker at Digital OceanDocker at Digital Ocean
Docker at Digital Ocean
 
NSClient++ Workshop: 06 Scripting
NSClient++ Workshop: 06 ScriptingNSClient++ Workshop: 06 Scripting
NSClient++ Workshop: 06 Scripting
 
CI : the first_step: Auto Testing with CircleCI - (MOSG)
CI : the first_step: Auto Testing with CircleCI - (MOSG)CI : the first_step: Auto Testing with CircleCI - (MOSG)
CI : the first_step: Auto Testing with CircleCI - (MOSG)
 
PuppetConf 2016: Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...
PuppetConf 2016:  Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...PuppetConf 2016:  Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...
PuppetConf 2016: Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...
 
Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)
 
Ng2 cli v1
Ng2 cli v1Ng2 cli v1
Ng2 cli v1
 
Percona XtraDB Cluster before every release: Glimpse into CI testing
Percona XtraDB Cluster before every release: Glimpse into CI testingPercona XtraDB Cluster before every release: Glimpse into CI testing
Percona XtraDB Cluster before every release: Glimpse into CI testing
 
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
 
GoSF Jan 2016 - Go Write a Plugin for Snap!
GoSF Jan 2016 - Go Write a Plugin for Snap!GoSF Jan 2016 - Go Write a Plugin for Snap!
GoSF Jan 2016 - Go Write a Plugin for Snap!
 
Live deployment, ci, drupal
Live deployment, ci, drupalLive deployment, ci, drupal
Live deployment, ci, drupal
 
Groovy for System Administrators
Groovy for System AdministratorsGroovy for System Administrators
Groovy for System Administrators
 
Openstack Third-Party CI and the review of a few Openstack Infrastructure pro...
Openstack Third-Party CI and the review of a few Openstack Infrastructure pro...Openstack Third-Party CI and the review of a few Openstack Infrastructure pro...
Openstack Third-Party CI and the review of a few Openstack Infrastructure pro...
 
속도체크
속도체크속도체크
속도체크
 
Lviv 2013 d7 vs d8
Lviv 2013   d7 vs d8Lviv 2013   d7 vs d8
Lviv 2013 d7 vs d8
 
Generamba
GenerambaGeneramba
Generamba
 

En vedette

Frontendlab: Cравнить Несравнимое - Юлия Пучнина
Frontendlab: Cравнить Несравнимое  - Юлия ПучнинаFrontendlab: Cравнить Несравнимое  - Юлия Пучнина
Frontendlab: Cравнить Несравнимое - Юлия Пучнина
GeeksLab Odessa
 

En vedette (15)

JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
 
JS Lab2017_Виталий Лебедев_Практические сложности при разработке на node.js
JS Lab2017_Виталий Лебедев_Практические сложности при разработке на node.js JS Lab2017_Виталий Лебедев_Практические сложности при разработке на node.js
JS Lab2017_Виталий Лебедев_Практические сложности при разработке на node.js
 
JS Lab2017_Роман Якобчук_Почему так важно быть программистом в фронтенде
JS Lab2017_Роман Якобчук_Почему так важно быть программистом в фронтенде JS Lab2017_Роман Якобчук_Почему так важно быть программистом в фронтенде
JS Lab2017_Роман Якобчук_Почему так важно быть программистом в фронтенде
 
JS Lab2017_Lightning Talks_React Perfomance
JS Lab2017_Lightning Talks_React Perfomance JS Lab2017_Lightning Talks_React Perfomance
JS Lab2017_Lightning Talks_React Perfomance
 
JS Lab2017_Алексей Заславский_React Fiber
JS Lab2017_Алексей Заславский_React Fiber JS Lab2017_Алексей Заславский_React Fiber
JS Lab2017_Алексей Заславский_React Fiber
 
JS Lab2017_Lightning Talks_Рекрутинг.js
JS Lab2017_Lightning Talks_Рекрутинг.js JS Lab2017_Lightning Talks_Рекрутинг.js
JS Lab2017_Lightning Talks_Рекрутинг.js
 
JS Lab2017_Lightning Talks_PostCSS - there is a plugin for that
JS Lab2017_Lightning Talks_PostCSS - there is a plugin for thatJS Lab2017_Lightning Talks_PostCSS - there is a plugin for that
JS Lab2017_Lightning Talks_PostCSS - there is a plugin for that
 
Frontendlab: Cравнить Несравнимое - Юлия Пучнина
Frontendlab: Cравнить Несравнимое  - Юлия ПучнинаFrontendlab: Cравнить Несравнимое  - Юлия Пучнина
Frontendlab: Cравнить Несравнимое - Юлия Пучнина
 
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивностиJS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
 
JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...
JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...
JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...
 
JS Lab2017_Юлия Пучнина_PhaserJS и что он умеет
JS Lab2017_Юлия Пучнина_PhaserJS и что он умеетJS Lab2017_Юлия Пучнина_PhaserJS и что он умеет
JS Lab2017_Юлия Пучнина_PhaserJS и что он умеет
 
JS Lab2017_Сергей Селецкий_System.js и jspm
JS Lab2017_Сергей Селецкий_System.js и jspmJS Lab2017_Сергей Селецкий_System.js и jspm
JS Lab2017_Сергей Селецкий_System.js и jspm
 
WebCamp 2016: Python.Максим Климишин.Типизированный Python
WebCamp 2016: Python.Максим Климишин.Типизированный PythonWebCamp 2016: Python.Максим Климишин.Типизированный Python
WebCamp 2016: Python.Максим Климишин.Типизированный Python
 
AI&BigData Lab 2016. Сергей Шельпук: Методология Data Science проектов
AI&BigData Lab 2016. Сергей Шельпук: Методология Data Science проектовAI&BigData Lab 2016. Сергей Шельпук: Методология Data Science проектов
AI&BigData Lab 2016. Сергей Шельпук: Методология Data Science проектов
 
JS Lab2017_Redux: время двигаться дальше?_Екатерина Лизогубова
JS Lab2017_Redux: время двигаться дальше?_Екатерина ЛизогубоваJS Lab2017_Redux: время двигаться дальше?_Екатерина Лизогубова
JS Lab2017_Redux: время двигаться дальше?_Екатерина Лизогубова
 

Similaire à JS Lab2017_Андрей Кучеренко _Разработка мультипакетных приложения: причины, способы, риски

Similaire à JS Lab2017_Андрей Кучеренко _Разработка мультипакетных приложения: причины, способы, риски (20)

Continuous Integration Testing in Django
Continuous Integration Testing in DjangoContinuous Integration Testing in Django
Continuous Integration Testing in Django
 
Testing Django Applications
Testing Django ApplicationsTesting Django Applications
Testing Django Applications
 
Arbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenvArbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenv
 
Azure from scratch part 4
Azure from scratch part 4Azure from scratch part 4
Azure from scratch part 4
 
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
 
Great Hiroshima with Python 170830
Great Hiroshima with Python 170830Great Hiroshima with Python 170830
Great Hiroshima with Python 170830
 
Design Summit - Migrating to Ruby 2 - Joe Rafaniello
Design Summit - Migrating to Ruby 2 - Joe RafanielloDesign Summit - Migrating to Ruby 2 - Joe Rafaniello
Design Summit - Migrating to Ruby 2 - Joe Rafaniello
 
Jenkins Pipelines
Jenkins PipelinesJenkins Pipelines
Jenkins Pipelines
 
Analysis of merge requests in GitLab using PVS-Studio for C#
Analysis of merge requests in GitLab using PVS-Studio for C#Analysis of merge requests in GitLab using PVS-Studio for C#
Analysis of merge requests in GitLab using PVS-Studio for C#
 
Antons Kranga Building Agile Infrastructures
Antons Kranga   Building Agile InfrastructuresAntons Kranga   Building Agile Infrastructures
Antons Kranga Building Agile Infrastructures
 
Arbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenvArbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenv
 
Strategies for Puppet code upgrade and refactoring
Strategies for Puppet code upgrade and refactoringStrategies for Puppet code upgrade and refactoring
Strategies for Puppet code upgrade and refactoring
 
Quality of life through Unit Testing
Quality of life through Unit TestingQuality of life through Unit Testing
Quality of life through Unit Testing
 
Tutorial contributing to nf-core
Tutorial contributing to nf-coreTutorial contributing to nf-core
Tutorial contributing to nf-core
 
Deploying software at Scale
Deploying software at ScaleDeploying software at Scale
Deploying software at Scale
 
The Secrets of The FullStack Ninja - Part A - Session I
The Secrets of The FullStack Ninja - Part A - Session IThe Secrets of The FullStack Ninja - Part A - Session I
The Secrets of The FullStack Ninja - Part A - Session I
 
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
 
HyperLedger Fabric V2.5.pdf
HyperLedger Fabric V2.5.pdfHyperLedger Fabric V2.5.pdf
HyperLedger Fabric V2.5.pdf
 
Trusting the Unknown
Trusting the UnknownTrusting the Unknown
Trusting the Unknown
 
Trusting the Unknown
Trusting the UnknownTrusting the Unknown
Trusting the Unknown
 

Plus de GeeksLab Odessa

DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
GeeksLab Odessa
 
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
GeeksLab Odessa
 
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
GeeksLab Odessa
 
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
GeeksLab Odessa
 
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
GeeksLab Odessa
 

Plus de GeeksLab Odessa (19)

DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
 
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
 
DataScience Lab 2017_Блиц-доклад_Турский Виктор
DataScience Lab 2017_Блиц-доклад_Турский ВикторDataScience Lab 2017_Блиц-доклад_Турский Виктор
DataScience Lab 2017_Блиц-доклад_Турский Виктор
 
DataScience Lab 2017_Обзор методов детекции лиц на изображение
DataScience Lab 2017_Обзор методов детекции лиц на изображениеDataScience Lab 2017_Обзор методов детекции лиц на изображение
DataScience Lab 2017_Обзор методов детекции лиц на изображение
 
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
 
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
 
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
 
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
 
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
 
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
 
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
 
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
 
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
 
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
 
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
 
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
 

Dernier

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Dernier (20)

Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 

JS Lab2017_Андрей Кучеренко _Разработка мультипакетных приложения: причины, способы, риски

  • 2. Андрей Кучеренко Lead Software Engineer @ EPAM Systems kucherenko
  • 4.
  • 5. Test Suites: 55 passed, 55 total Tests: 303 passed, 303 total Snapshots: 0 total Time: 5.131s Test Suites: 458 passed, 458 total Tests: 3007 passed, 3007 total Snapshots: 0 total Time: 90.131s |----------| | % Lines | |----------| | 100| Было СталоUnit Tests Coverage |----------| | % Lines | |----------| | 89.7 | $ tslint 'packages/*/{src/**/,test/**/}*.ts{,x}' --force Done in 0.47s. Found 0 exact clones with 0 duplicated lines in 0 files 0.0% (0 lines) duplicated lines out of 2302 total lines of code. Done in 0.18s. Took 2 min 56 sec on Jenkins Linters Duplications CI $ tslint 'packages/*/{src/**/,test/**/}* Done in 19.47s. Found 69 exact clones with 1467 duplicat 4.97% (1467 lines) duplicated lines out Done in 2.75s. Took 10 min 47 sec on Jenkins
  • 8.
  • 9. pkg module component service pkg - 1.1 1.0 - module - - 0.9 1.0 component - - - 2.0 service - - - -
  • 10. Проблемы NPM Тяжело управлять всеми пакетами одновременно Тяжело следить за версиями Тяжело уследить за зависимостями
  • 13. Возможности Lerna Init project Bootstrap project Publish project Manage versions npm link internal packages
  • 14. ├── lerna.json ├── package.json └── packages ├── awesome-component │ └── package.json ├── awesome-module │ └── package.json ├── awesome-package │ └── package.json └── awesome-service └── package.json { "lerna": "2.0.0-beta.38", "packages": [ "packages/*" ], "version": "0.0.1" }
  • 15. ➜ awesome-lerna git:(master) ✗ lerna init Lerna v2.0.0-beta.38 Updating package.json. Updating lerna.json. Successfully created Lerna files ➜ awesome-lerna git:(master) ✗ lerna bootstrap Lerna v2.0.0-beta.38 Bootstrapping 4 packages Preinstalling packages Symlinking packages and binaries Postinstalling packages Prepublishing packages ➜ awesome-lerna git:(master) ✗ lerna publish Lerna v2.0.0-beta.38 Current version: 0.0.1 Checking for updated packages... Comparing with: v0.0.1 ➜ awesome-lerna git:(master) ✗ lerna run test Lerna v2.0.0-beta.38 Successfully ran npm script 'test' in packages: - awesome-component - awesome-module - awesome-package - awesome-service ➜ awesome-lerna git:(master) ✗ lerna exec -- rm -rf ./node_modules Lerna v2.0.0-beta.38
  • 16. Проблемы Lerna Зависимости с разными версиями у пакетов npm link и все, что с этим связано Много node_modues
  • 17.
  • 18. Возможности @knitjs Все зависимости в одном package.json Нет node_modules в каждом репозитории Показывает неиспользуемые и неустановленые зависимости
  • 19. ✗ create-knit-app lets-start-knitting info creating a new knit app in lets-start-knitting success finished creating your project! info start exploring by running: cd lets-start-knitting yarn start info read more about what you can do with knit: info https://github.com/knitjs/knit
  • 20. ➜ lets-start-knitting git:(master) ✗ tree . ├── modules │ └── node_modules │ ├── @myscope │ │ ├── body-component │ │ │ ├── help.png │ │ │ ├── index.js │ │ │ ├── list_missing.png │ │ │ ├── list.png │ │ │ ├── package.json │ │ │ ├── validate_missing.png │ │ │ ├── validate_unused.png │ │ │ └── valid.png │ │ └── header-component │ │ ├── index.js │ │ ├── knit_logo.svg │ │ └── package.json │ ├── page-component │ │ ├── index.js │ │ ├── package.json │ │ └── __tests__ │ │ └── page-component.test.js │ └── webpack_entry │ ├── index.html │ ├── index.js │ ├── package.json │ └── README.md ├── node_modules ├── package.json └── yarn.lock ➜ lets-start-knitting git:(master) ✗ tail modules/node_modules/@myscope/header-component/package.json { "name": "@myscope/header-component", "version": "0.0.0", "browser": true }
  • 21. ➜ lets-start-knitting git:(master) ✗ yarn knit build yarn knit v0.21.3 $ knit build ✔ discovering modules ✔ validating package.json ✔ discovering modules ✔ validating package.json ✔ check for missing dependencies ✔ check for unused dependencies ✔ reading package.json of modules ✔ getting last tag ✔ determining updated modules since last release ✔ rebuilding project ✔ rebuilding updated modules ✔ @myscope/body-component ✔ @myscope/header-component ✔ page-component Done in 14.92s.
  • 22. ➜ lets-start-knitting git:(master) ✗ yarn knit help yarn knit v0.21.3 $ knit help Commands: list [modules...] list modules and their dependencies validate validate modules for release server start a dev server schema update graphql schema version <version> version updated modules build build updated modules stitch update the package.json of all modules with knitted dependencies and project meta data publish publish updated modules release <version> run full release pipeline on updated modules. version > build > knit > publish > push
  • 23. ➜ lets-start-knitting git:(master) ✗ yarn knit list yarn knit v0.21.3 $ knit list ✔ discovering modules ✔ reading package.json of modules info showing dependencies for 3 modules - @myscope/body-component (0.0.0) [2 dependencies] - @myscope/header-component (0.0.0) [2 dependencies] - page-component (0.0.0) [4 dependencies] Done in 0.79s. ➜ lets-start-knitting git:(master) ✗ yarn knit validate yarn knit v0.21.3 $ knit validate ✔ looking for `node_modules` in .*ignore files ✔ discovering modules ✔ validating package.json ✔ check for missing dependencies ✔ check for unused dependencies Done in 0.87s.
  • 24. Проблемы @knitjs Работает только с babel, не поддерживает typescript, coffeescript, etc. Тяжело менять под свои нужды Работа с версиями только в одном стиле Не очень большое комьюнити
  • 25.