Mungkin para developer sangat mengerti dan mengenal apa itu Bower? Bower merupakan dependency manager digunakan bagi pengelola aplikasi berbasi jaring laba-laba. Sebagai dependency manager, bower sangat praktis digunakan pengembang bilamana terdapat paket yang diperlukan ataupun diperbaruhi.

Hanya tinggal menggunakan perintah bower install <nama_paket>  ataupun bower update , semua paket akan terupdate dan terinstall sebagaimana mestinya yang terdapat dalam bower.json .

Bower cukup populer dan memudahkan pengembang pada tahun 2012 sampai dengan 2016. Dengan semakin banyaknya pengembang membutuhkan bower hingga akhirnya bower disponsori oleh Heroku, Icons8 dan masih banyak lagi!

Ibaratnya, Bower dan Composer bagai Air dan Api. Bower berfokus pada Javascript dan CSS, sedangkan Composer berfokus pada PSR-7 PHP. Composer bisa digunakan layaknya seperti Bower. Tapi Composer bila digunakan seperti Bower, tidaklah sepowerfull Bower.

Sayangnya, Bower pada tahun 2016 telah distop oleh pengembangannya setelah debat panjang di github.com dikarenakan beberapa package tidak mensupport oleh bower. Hal ini membuat sang pembuat Bower untuk memberhentikan pengembangan Bower selanjutnya. Jika anda terbiasa dengan Bower, Bower masih bisa digunakan saat ini namun dengan “catatan” seperti yang diceritakan oleh Assaf Hefetz.

Lalu bagaimana jika kita masih gunakan Bower untuk package manager, sedangkan Bower tidak disupport lagi oleh sang pengembang? Tenang saja, kekhawartiran ini bisa diatasi dengan menggunakan bower-away  pada node.js  anda. Hal yang perlu disiapkan sebelum menggunakan bower-away  adalah memastikan bahwa bower.json  dan folder bower_components  anda tidak dihapus terlebih dahulu sebelum anda  benar-benar migrasi penuh ke Yarn.

Apa itu Yarn? Yarn sama seperti Bower, namun Yarn lebih powerfull ketimbang Bower dikarenakan Yarn telah mendukung 100% package di Github, Bitbucket, Gitlab maupun custom git server sendiri. Yarn merupakan salah satu package manager yang diciptakan diatas wrapper node.js .

Sebelum anda memulai pastikan anda menginstall node.js  terlebih dahulu. Tanpa adanya node.js , Yarn tidak akan berjalan seperti apa yang kita inginkan.

Setelah itu masuk kedalam folder anda yang terdapat bower_components  dan bower.json . Buka command prompt atau terminal, lakukan perintah seperti berikut ini :

npm i yarn -g
npm i bower-away -g

Selesai install lakukan perintah:

bower-away
bower-away --diff

Pastikan pada layar command prompt atau terminal anda seperti dibawah ini setelah melakukan bower-away --diff :

{
  "dependencies" : {
    "@bower_components/Leaflet.label" : "Leaflet/Leaflet.label#^0.2.1",
    "@bower_components/Waves" : "fians/Waves#~0.7.2",
    "@bower_components/animate.css" : "daneden/animate.css#^3.5.2",
    "@bower_components/bower-jquery-mobile" : "hutufairy/bower-jquery-mobile#^1.4.5",
    "@bower_components/chart.js" : "nnnick/Chart.js#^2.5.0",
    "@bower_components/chartjs.zoom" : "chartjs/Chart.Zoom.js#^0.4.6",
    "@bower_components/clusterize" : "NeXTs/Clusterize.js#^0.17.6",
    "@bower_components/colors" : "mrmrs/colors#^3.0.0",
    "@bower_components/datatables" : "DataTables/DataTables#>=1.10.7",
    "@bower_components/datatables-fixedcolumns" : "DataTables/FixedColumns#^3.2.6",
    "@bower_components/datatables-fixedheader" : "DataTables/FixedHeader#^3.1.5",
    "@bower_components/datatables.net" : "DataTables/Dist-DataTables#>=1.10.9",
    "@bower_components/datatables.net-dt" : "DataTables/Dist-DataTables-DataTables#^3.2.2",
    "@bower_components/flexboxgrid" : "kristoferjoseph/flexboxgrid#^6.3.2",
    "@bower_components/font-awesome" : "FortAwesome/Font-Awesome#^4.7.0",
    "@bower_components/fullcalendar" : "fullcalendar/fullcalendar#^3.3.1",
    "@bower_components/hammerjs" : "EightMedia/hammer.js#^2.0.8",
    "@bower_components/iron-resizable-behavior" : "PolymerElements/iron-resizable-behavior#^1.0.2",
    "@bower_components/iscroll" : "cubiq/iscroll#^5.2.0",
    "@bower_components/jQuery-Mobile-Icon-Pack" : "commadelimited/jQuery-Mobile-Icon-Pack#*",
    "@bower_components/jquery" : "jquery/jquery-dist#~2.1.4",
    "@bower_components/jquery-ui" : "components/jqueryui#~1.11.4",
    "@bower_components/leaflet" : "Leaflet/Leaflet#~0.7.3",
    "@bower_components/leaflet.fullscreen" : "brunob/leaflet.fullscreen#^1.1.4",
    "@bower_components/leaflet.locatecontrol" : "domoritz/leaflet-locatecontrol#^0.44.0",
    "@bower_components/leaflet.markercluster" : "Leaflet/Leaflet.markercluster#^0.4.0",
    "@bower_components/map-box" : "GNURub/mapbox-map#^0.1.6",
    "@bower_components/mapbox.js" : "mapbox/mapbox.js-bower#^2.2.1",
    "@bower_components/material-design-iconic-font" : "zavoloklom/material-design-iconic-font#^2.2.0",
    "@bower_components/moment" : "moment/moment#^2.20.1",
    "@bower_components/nativeDroid2" : "godesign/nativeDroid2#^2.0.3",
    "@bower_components/noty" : "needim/noty#^3.0.1",
    "@bower_components/polymer" : "Polymer/polymer#^1.1.5",
    "@bower_components/webcomponentsjs" : "webcomponents/webcomponentsjs#^0.7.24",
    "@bower_components/wow" : "matthieua/WOW#^1.1.2"
  },
  "engines" : {
    "yarn" : ">= 1.0.0"
  },
  "scripts" : {
    "postinstall" : "node -e \"try { require('fs').symlinkSync(require('path').resolve('node_modules/@bower_components'), 'bower_components', 'junction') } catch (e) { }\""
  }
}

Selanjutnya lakukan perintah

bower-away --apply

Maka anda akan mendapat informasi sebagai berikut ini :

# Remove old components directory

Now, please remove original components directory:
$ rm -rf bower_components

Please call bower-away once more when you're done with this!

Selanjutnya lakukan perintah yarn install. Kemudian ubah semua dependecy link package anda seperti awalannya adalah <link rel="stylesheet" href="bower_components/...">  menjadi <link rel="stylesheet" href="node_modules/@bower_components/..."> juga beberapa script Javascript yang telah dilink kedalam direktori bower_components berubah menjadi node_modules/@bower_components.

Sekarang anda dapat menghapus folder bower_components dan bower.json pada direktori aplikasi anda secara aman. Selamat mencoba!

Jangan lupa komen-komen bila ada kesulitan dalam menjalani tutorial ini!