Давным давно появился Yarn, который позиционировался супер быстрое таврение Facebook в замену npm.
Если вы работаете над крупным проектом, то время восстановления пакетов является важным фактором скорости разработки и build'а проекта на ci.
Было решено проверить, стоит ли использовать Yarn в замену Npm. поскольку пакетов достаточно много и на слабых build agent'ах, восстановление может достигать 2х минут.
Итак, тестовый сценарий достаточно прост:
— Параллельный запуск двух восстановлений [npm i и yarn inatall] из одинаковый packages.json.
Первый результат установки пакетов удивил: npm 77 секунды, yarn 109 секунд.
Второй результат оказался похожим: npm 76 секунд, yarn 102 секунды
Также интересным показался размер скаченных пакетов: npm 350mb vs yarn 255mb
Одним из минусов выявленных в ходе работы с yarn оказалась, что при удалении ручками пакетов из node_modules, команда yarn install не восстанавливает удаленные пакеты.
В ходе мини тестов не удалось выявить победу yarn кроме случая восстановления[1] пакетов.
[1] Плюсом Yarn можно отнести быстрое восстановление пакетов, т.е. если пакеты не были удалены ручками, а просто изменились версии в package.json.
Буду рад злобным комментариям о том, что всё сделано неправильно и конструктивным предложениям)
Всем хорошего дня
Если вы работаете над крупным проектом, то время восстановления пакетов является важным фактором скорости разработки и build'а проекта на ci.
Было решено проверить, стоит ли использовать Yarn в замену Npm. поскольку пакетов достаточно много и на слабых build agent'ах, восстановление может достигать 2х минут.
Итак, тестовый сценарий достаточно прост:
— Параллельный запуск двух восстановлений [npm i и yarn inatall] из одинаковый packages.json.
Содержимое package.json
{
"version": "1.0.0",
"name": "mir_scada2",
"private": true,
"dependencies": {
"angular": "^1.7.2",
"angular-animate": "^1.7.5",
"angular-bootstrap-checkbox": "^0.5.0",
"angular-bootstrap-contextmenu": "1.2.0",
"angular-file-upload": "2.5.0",
"angular-minicolors": "0.0.11",
"angular-moment": "1.3.0",
"angular-moment-picker": "0.10.2",
"angular-sanitize": "^1.7.2",
"angular-touch": "^1.7.2",
"angular-ui-bootstrap": "^2.5.6",
"angular-ui-grid": "^4.6.4",
"angular-ui-tree": "^2.22.6",
"angularjs-color-picker-vanilla": "0.0.4",
"bootstrap": "4.1.3",
"bootstrap3-dialog": "^1.35.4",
"chart.js": "2.7.3",
"copyfiles": "^2.1.0",
"core-js": "2.5.7",
"d3": "5.7.0",
"dom-to-image": "2.6.0",
"eonasdan-bootstrap-datetimepicker": "4.17.47",
"excel-builder": "^2.0.3",
"file-saver": "^2.0.0",
"html2canvas": "1.0.0-alpha.11",
"jquery": "3.3.1",
"jquery-contextmenu": "^2.7.1",
"jquery-mask-plugin": "^1.14.15",
"jquery-minicolors": "^2.1.10",
"jquery-validation": "^1.18.0",
"jquery-validation-unobtrusive": "^3.2.11",
"jquery.cookie": "1.4.1",
"jquery.easing": "1.4.1",
"jquery.splitter": "0.27.1",
"jsrender": "1.0.0-rc.70",
"jszip": "^3.1.5",
"linq": "^3.1.1",
"lodash": "^4.17.11",
"moment": "^2.22.2",
"pdfjs-dist": "^2.0.943",
"popper.js": "1.14.4",
"respond": "0.9.0",
"rxjs": "6.2.0",
"rxjs-compat": "6.3.3",
"signalr": "^2.4.0",
"svg.js": "^2.6.6",
"ui-select": "^0.20.0",
"zone.js": "0.8.26"
},
"devDependencies": {
"@types/angular-signalr-hub": "1.5.32",
"@types/angular-ui-bootstrap": "0.13.47",
"@types/bootstrap3-dialog": "1.35.0",
"@types/chart.js": "2.7.40",
"@types/d3": "5.0.0",
"@types/d3-shape": "1.2.4",
"@types/dom-to-image": "2.6.0",
"@types/flot": "0.0.31",
"@types/html-webpack-plugin": "3.2.0",
"@types/jquery": "3.3.22",
"@types/lodash": "4.14.117",
"@types/mini-css-extract-plugin": "0.2.0",
"@types/node": "10.12.14",
"@types/signalr": "2.2.35",
"@types/sweetalert": "1.1.28",
"@types/webpack": "4.4.21",
"angular2-template-loader": "0.6.2",
"awesome-typescript-loader": "5.2.1",
"babel-core": "^6.26.3",
"babel-loader": "^7.1.5",
"babel-preset-env": "^1.7.0",
"cache-loader": "^1.2.5",
"cli": "1.0.1",
"css-loader": "1.0.1",
"cssnano": "4.1.7",
"exports-loader": "0.7.0",
"expose-loader": "0.7.5",
"file-loader": "^2.0.0",
"filemanager-webpack-plugin": "2.0.5",
"hard-source-webpack-plugin": "0.11.0",
"html-loader": "0.5.5",
"html-webpack-bom-plugin": "0.0.2",
"html-webpack-plugin": "4.0.0-alpha",
"imports-loader": "0.8.0",
"less": "^3.8.1",
"less-loader": "^4.1.0",
"mini-css-extract-plugin": "^0.4.5",
"optimize-css-assets-webpack-plugin": "5.0.1",
"postcss-import": "^12.0.1",
"postcss-loader": "^3.0.0",
"postcss-preset-env": "^6.4.0",
"speed-measure-webpack-plugin": "^1.2.3",
"style-loader": "^0.23.1",
"terser-webpack-plugin": "1.1.0",
"ts-node": "7.0.1",
"typescript": "3.1.3",
"webpack": "4.23.1",
"webpack-cli": "3.1.2",
"webpack-dev-server": "^3.1.10",
"webpack-notifier": "1.7.0"
},
"scripts": {
"mir_web_components@latest": "npm i mir_web_components@latest -save",
"globalInstall": "npm i -g webpack webpack-cli cross-env karma typescript@3.1.3",
"webpack": "tsc --lib es5,dom webpack.config.ts && cross-env NODE_OPTIONS=--max_old_space_size=4000 webpack --mode development --config ./webpack.config.js"
},
"-vs-binding": {
"~BeforeBuild": [
"install",
"webpack"
]
}
}
Первый результат установки пакетов удивил: npm 77 секунды, yarn 109 секунд.
Второй результат оказался похожим: npm 76 секунд, yarn 102 секунды
Также интересным показался размер скаченных пакетов: npm 350mb vs yarn 255mb
Одним из минусов выявленных в ходе работы с yarn оказалась, что при удалении ручками пакетов из node_modules, команда yarn install не восстанавливает удаленные пакеты.
В ходе мини тестов не удалось выявить победу yarn кроме случая восстановления[1] пакетов.
[1] Плюсом Yarn можно отнести быстрое восстановление пакетов, т.е. если пакеты не были удалены ручками, а просто изменились версии в package.json.
Буду рад злобным комментариям о том, что всё сделано неправильно и конструктивным предложениям)
Всем хорошего дня