Takip et

Vue CLI’yı Çözümlemek: Modern Vue.js Geliştirmenin Kalbi

Vue CLI’yı Çözümlemek: Modern Vue.js Geliştirmenin Kalbi Vue.js, hafif yapısı, aşamalı benimseme yeteneği ve mükemmel dokümantasyonu saye

Vue CLI’yı Çözümlemek: Modern Vue.js Geliştirmenin Kalbi

Vue.js, hafif yapısı, aşamalı benimseme yeteneği ve mükemmel dokümantasyonu sayesinde modern web geliştiricileri arasında hızla popülerlik kazanmış bir JavaScript çerçevesidir. Ancak büyük ölçekli ve üretim seviyesinde Vue.js uygulamaları geliştirmek sadece Vue’nun kendisini bilmekle sınırlı değildir. Bu noktada, Vue CLI (Command Line Interface) devreye girer. Vue CLI, Vue.js projelerinin iskeletini oluşturan, karmaşık yapılandırmaları soyutlayan ve geliştirme sürecini hızlandıran güçlü bir araçtır. Bu makalede, Vue CLI’nın ne olduğunu, neden bu kadar önemli olduğunu ve onu nasıl etkin bir şekilde kullanıp özelleştirebileceğimizi derinlemesine inceleyeceğiz.

Vue CLI Nedir ve Neden Önemlidir?

Vue CLI, Vue.js uygulamaları için standart araç zinciri sağlayan tam özellikli bir sistemdir. Bir uygulama oluşturmak, geliştirmek, test etmek ve dağıtmak için gereken her şeyi tek bir pakette sunar. Temel olarak, Vue CLI aşağıdaki üç ana bileşenden oluşur:

1. CLI Servisi (@vue/cli-service): Geliştirme sunucusu, derleme ve test gibi temel görevleri yerine getiren ana çalışma zamanı bağımlılığıdır. Webpack, Babel ve PostCSS gibi araçların yapılandırmasını soyutlar.
2. CLI Paketleri (@vue/cli-plugin-*): Babel, TypeScript, PWA, Router, Vuex, Linter/Formatter, Test gibi özellikler ekleyen isteğe bağlı bağımlılıklardır. Proje oluşturulurken veya daha sonra eklenebilirler.
3. CLI Global Yürütülebilir Dosyası (@vue/cli): Proje oluşturma (vue create), eklenti ekleme (vue add) ve grafiksel kullanıcı arayüzü (vue ui) gibi komutları sağlayan global komut satırı aracıdır.

Peki, Vue CLI neden bu kadar önemlidir?

* Hızlı Proje Oluşturma (Scaffolding): Yeni bir Vue projesi başlatmak, sıfırdan tüm yapılandırmaları elle yapmak yerine vue create komutuyla saniyeler içinde gerçekleşir. Bu, geliştiricilerin hemen kod yazmaya başlamasını sağlar.
* Karmaşık Yapılandırmadan Kurtulma: Webpack gibi derleme araçları son derece güçlüdür ancak yapılandırmaları karmaşık olabilir. Vue CLI, bu karmaşıklığı soyutlayarak, geliştiricilerin Webpack yapılandırmasıyla boğuşmak yerine uygulama mantığına odaklanmasına olanak tanır.
* Standart Araç Zinciri: Vue CLI, Babel (JavaScript dönüştürme), Webpack (modül paketleme), PostCSS (CSS işleme) gibi sektör standartlarını entegre eder. Bu, projelerin güncel teknolojilerle uyumlu olmasını sağlar.
* Esneklik ve Özelleştirme: Soyutlamaya rağmen, Vue CLI, vue.config.js dosyası aracılığıyla Webpack, Babel ve diğer araçların yapılandırmasını derinlemesine özelleştirme imkanı sunar.
* Eklenti Ekosistemi: Geliştiricilerin ihtiyaç duyabileceği hemen hemen her özellik için bir Vue CLI eklentisi bulunur (örn. Vue Router, Vuex, TypeScript, PWA). Bu eklentiler, projeye kolayca entegre edilebilir.
* Geliştirme ve Üretim Ortamları: Vue CLI, geliştirme için hızlı bir canlı yeniden yükleme sunucusu ve üretim için optimize edilmiş, minifiye edilmiş ve ağaç sallama (tree-shaking) uygulanmış çıktılar sağlar.

Kurulum ve Temel Kullanım

Vue CLI’yı kullanmaya başlamak oldukça basittir. İlk olarak, global olarak yüklemeniz gerekir:

npm install -g @vue/cli

veya yarn kullanıyorsanız:

yarn global add @vue/cli

Kurulumdan sonra, yeni bir Vue projesi oluşturabilirsiniz:

vue create my-vue-app

Bu komutu çalıştırdığınızda, Vue CLI size bir dizi seçenek sunacaktır:

* Default (Vue 3 / Babel / ESLint): Vue 3 ile hızlı bir başlangıç için varsayılan yapılandırma.
* Default (Vue 2 / Babel / ESLint): Vue 2 ile hızlı bir başlangıç için varsayılan yapılandırma.
* Manually select features: Projeniz için özel özellikleri (TypeScript, PWA, Router, Vuex, CSS Pre-processors, Linter/Formatter, Unit Testing, E2E Testing) manuel olarak seçmenizi sağlar.

Seçimlerinizi yaptıktan sonra, Vue CLI projenizi oluşturacak ve gerekli bağımlılıkları yükleyecektir. Proje oluşturulduktan sonra, proje dizinine girip geliştirme sunucusunu başlatabilirsiniz:

cd my-vue-app
npm run serve

veya

yarn serve

Bu komut, uygulamanızı yerel bir sunucuda (genellikle http://localhost:8080) başlatır ve kodunuzda yaptığınız değişiklikleri anında yansıtır (Hot Module Replacement – HMR). Uygulamanızı üretime hazır hale getirmek için ise:

npm run build

veya

yarn build

Bu komut, uygulamanızın optimize edilmiş ve minifiye edilmiş bir sürümünü dist klasörüne derler.

Proje Yapısı ve Temel Dosyalar

Vue CLI ile oluşturulan bir projenin standart dizin yapısı şöyledir:

* node_modules/: Proje bağımlılıklarını içeren klasör.
* public/: Statik dosyaların (örn. index.html, favicon) bulunduğu klasör. Bu klasördeki dosyalar doğrudan Webpack tarafından işlenmez, olduğu gibi kopyalanır.
* src/: Uygulamanızın tüm kaynak kodunun bulunduğu klasör.
* assets/: Resimler, ikonlar, fontlar gibi statik varlıklar.
* components/: Yeniden kullanılabilir Vue bileşenleri.
* App.vue: Ana uygulama bileşeni.
* main.js: Uygulamanın başlangıç noktası. Vue örneğini oluşturur ve App.vue‘yu bağlar.
* router/index.js (eğer Vue Router seçildiyse): Vue Router yapılandırması.
* store/index.js (eğer Vuex seçildiyse): Vuex store yapılandırması.
* package.json: Projenin meta verilerini, betiklerini ve bağımlılıklarını tanımlar. npm run serve, npm run build gibi komutlar buradaki scripts bölümünde tanımlıdır.
* babel.config.js: Babel yapılandırma dosyası. JavaScript kodunuzun farklı tarayıcı ortamlarında uyumlu çalışmasını sağlar.
* postcss.config.js: PostCSS yapılandırma dosyası. CSS’nizi geliştirmek için eklentiler kullanmanızı sağlar (örn. Autoprefixer).
* README.md: Proje hakkında bilgi içeren Markdown dosyası.

Bu yapı, büyük ölçekli uygulamaların geliştirilmesi için sağlam bir temel sunar ve modülerliği teşvik eder.

vue create Komutunun Derinlemesine İncelenmesi

vue create komutu, Vue CLI’nın en güçlü özelliklerinden biridir. Manuel özellik seçimi, projenizin ihtiyaçlarına göre tam olarak yapılandırılmasını sağlar.

Manuel Özellik Seçimi

Manually select features seçeneğini seçtiğinizde, aşağıdaki gibi bir dizi seçenekle karşılaşırsınız:

* Babel: JavaScript kodunuzu eski tarayıcılarda bile çalışabilen uyumlu bir sürüme dönüştürür. Neredeyse her projede gereklidir.
* TypeScript: Statik tip denetimi ve daha iyi kod organizasyonu için TypeScript desteği ekler.
* Progressive Web App (PWA) Support: Uygulamanızı çevrimdışı çalışabilen ve mobil cihazlara yüklenebilen bir PWA’ya dönüştürmek için gerekli servis çalışanını ve manifest dosyasını ekler.
* Router: Tek sayfa uygulamaları için Vue Router’ı yapılandırır.
* Vuex: Uygulama durum yönetimi için Vuex’i yapılandırır.
* CSS Pre-processors: Sass/SCSS, Less veya Stylus gibi CSS ön işlemcileri için destek ekler.
* Linter / Formatter: ESLint ve Prettier gibi araçlarla kod kalitesini ve stilini otomatik olarak denetler ve biçimlendirir.
* Unit Testing: Jest veya Mocha gibi birim test çerçeveleri için yapılandırma ekler.
* E2E Testing: Cypress veya Nightwatch gibi uçtan uca test çerçeveleri için yapılandırma ekler.

Bu seçimler, projenizin package.json dosyasına ilgili CLI eklentilerini ekler ve bu eklentiler de projenizin genel yapılandırmasını (Webpack, Babel vb.) otomatik olarak ayarlar.

Ön Ayarları Kaydetme

Manuel seçimlerinizi yaptıktan sonra, Vue CLI size bu yapılandırmayı bir ön ayar (preset) olarak kaydetme seçeneği sunar. Bu, gelecekte benzer projeleri hızlıca oluşturmak için çok kullanışlıdır. Kaydedilen ön ayarlar, ~/.vuerc dosyasında saklanır.

Örneğin, her zaman TypeScript, Vue Router ve ESLint/Prettier kullanan bir proje oluşturuyorsanız, bu yapılandırmayı kaydedebilir ve yeni projelerinizde tek bir komutla uygulayabilirsiniz:

vue create my-new-project --preset my-custom-preset

Bu, takım içinde tutarlılığı sağlamak ve yeni proje başlatma süreçlerini standartlaştırmak için harika bir yoldur.

Yapılandırma: vue.config.js

Vue CLI’nın gücünün önemli bir kısmı, projenin davranışını özelleştirmek için sunduğu esneklikte yatar. Bu özelleştirmelerin çoğu, projenin kök dizininde bulunan isteğe bağlı vue.config.js dosyası aracılığıyla yapılır. Bu dosya, CommonJS modülü olarak dışa aktarılan bir nesne veya fonksiyon döndürmelidir.

// vue.config.js
module.exports = {
  // Yapılandırma seçenekleri buraya gelecek
};

İşte vue.config.js içinde sıkça kullanılan bazı yapılandırma seçenekleri:

* publicPath: Uygulamanın dağıtımında kullanılacak temel URL’yi belirtir. Varsayılan olarak /‘dır. Eğer uygulamanız bir alt dizin altında dağıtılacaksa (örn. https://www.example.com/my-app/), bu değeri buna göre ayarlamanız gerekir: publicPath: '/my-app/'.
* outputDir: Üretim derlemesi için çıktı dizininin adını belirtir. Varsayılan olarak dist‘dir.
* assetsDir: outputDir içinde statik varlıkların (CSS, JS, resimler) yerleştirileceği dizin. Varsayılan olarak boş bir dizedir, yani varlıklar doğrudan outputDir altına yerleştirilir.
* indexPath: Ana index.html dosyasının adını belirtir. Varsayılan olarak index.html‘dir.
* filenameHashing: Derlenen varlıkların (CSS, JS) dosya adlarına hash eklenip eklenmeyeceğini belirler. Önbellekleme sorunlarını önlemek için üretimde true olması önerilir. Varsayılan olarak true‘dur.
* lintOnSave: Kaydetme sırasında ESLint’in çalıştırılıp çalıştırılmayacağını belirler. true, false veya 'warning' olabilir. 'warning' olduğunda sadece uyarı verir, hatada derlemeyi durdurmaz.
* runtimeCompiler: Vue şablonlarını çalışma zamanında derleyip derlemeyeceğini belirler. Eğer şablonları doğrudan JavaScript dizeleri olarak kullanıyorsanız true yapmanız gerekebilir, ancak bu paket boyutunu artırır. Genellikle false olarak bırakılır.
* productionSourceMap: Üretim derlemesi için kaynak haritaları oluşturulup oluşturulmayacağını belirler. Hata ayıklama için kullanışlıdır ancak dosya boyutunu artırır ve kaynak kodunuzu ortaya çıkarabilir. Varsayılan olarak true‘dur.
* css: CSS ile ilgili yapılandırmaları içerir.
* sourceMap: CSS için kaynak haritaları oluşturulup oluşturulmayacağını belirler.
* loaderOptions: CSS ön işlemcilerine (Sass, Less, Stylus) özel seçenekler geçirmek için kullanılır.
* requireModuleExtension: CSS modülleri için dosya uzantısının zorunlu olup olmadığını belirler.
* devServer: Geliştirme sunucusunun davranışını yapılandırır.
* port: Sunucunun çalışacağı port.
* host: Sunucunun dinleyeceği host.
* open: Uygulamanın otomatik olarak tarayıcıda açılıp açılmayacağını belirler.
* proxy: API isteklerini başka bir sunucuya yönlendirmek için kullanılır. CORS sorunlarını çözmek için idealdir.

// vue.config.js içinde devServer proxy örneği
    module.exports = {
      devServer: {
        proxy: {
          '/api': {
            target: 'http://localhost:3000', // API sunucunuzun adresi
            ws: true,
            changeOrigin: true
          }
        }
      }
    };

* pluginOptions: Üçüncü taraf CLI eklentilerine özel seçenekler geçirmek için kullanılır.

Webpack Yapılandırmasını Özelleştirme: chainWebpack ve configureWebpack

vue.config.js‘nin en güçlü bölümlerinden ikisi, Webpack yapılandırmasını doğrudan manipüle etmenizi sağlayan chainWebpack ve configureWebpack seçenekleridir.

* configureWebpack: Bu seçenek, bir nesne veya fonksiyon kabul eder. Eğer bir nesne ise, Webpack yapılandırmasına doğrudan webpack-merge kullanılarak birleştirilir. Eğer bir fonksiyon ise, mevcut Webpack yapılandırması argüman olarak verilir ve bu fonksiyon içinde yapılandırmayı değiştirebilirsiniz. Bu yöntem, basit eklemeler veya mevcut kuralları tamamen değiştirmek için kullanışlıdır.

// vue.config.js içinde configureWebpack örneği
    module.exports = {
      configureWebpack: {
        plugins: [
          // Yeni bir Webpack eklentisi ekle
          // new MyCustomWebpackPlugin()
        ],
        resolve: {
          alias: {
            '@utils': '@/utils' // Kısayol ekle
          }
        }
      }
    };

* chainWebpack: Bu seçenek, webpack-chain adlı bir kütüphane tarafından sağlanan zincirleme API’sini kullanır. Bu API, Webpack yapılandırmasını daha ince taneli bir şekilde manipüle etmenizi sağlar. Mevcut yükleyicileri, eklentileri veya kuralları değiştirmek, eklemek veya kaldırmak için çok daha güçlü ve güvenli bir yoldur. chainWebpack fonksiyonuna bir webpack-chain Config nesnesi verilir ve bu nesne üzerinde zincirleme metotlar çağırarak yapılandırmayı değiştirebilirsiniz.

// vue.config.js içinde chainWebpack örneği
    module.exports = {
      chainWebpack: config => {
        // SVG dosyalarını işlemek için mevcut kuralı kaldır
        config.module.rule('svg').uses.clear();

        // Yeni bir SVG yükleyici kuralı ekle (örn. vue-svg-loader)
        config.module
          .rule('svg')
          .use('vue-svg-loader')
          .loader('vue-svg-loader');

        // Geliştirme ortamında bazı eklentileri devre dışı bırak
        if (process.env.NODE_ENV === 'development') {
          config.plugins.delete('preload');
          config.plugins.delete('prefetch');
        }
      }
    };

chainWebpack, özellikle karmaşık Webpack yapılandırmalarını değiştirmeniz gerektiğinde tercih edilmelidir çünkü daha az hata yapma olasılığı sunar ve mevcut yapılandırmayı yanlışlıkla bozmanızı engeller.

Webpack İç Yapısı (Basitleştirilmiş)

Vue CLI, Webpack’in karmaşıklığını büyük ölçüde soyutlasa da, temel kavramları anlamak, vue.config.js‘yi etkili bir şekilde kullanmak için faydalıdır.

* Giriş Noktası (Entry): Webpack’in uygulamanızı derlemeye başladığı dosya (genellikle src/main.js).
* Çıkış (Output): Webpack’in derlenmiş dosyaları nereye ve hangi adla kaydedeceğini belirler (outputDir, filenameHashing).
* Yükleyiciler (Loaders): Webpack, sadece JavaScript dosyalarını anlayabilir. Yükleyiciler, CSS, resimler, Vue tek dosya bileşenleri gibi JavaScript dışındaki dosya türlerini Webpack’in anlayabileceği modüllere dönüştürür. Örneğin, vue-loader Vue bileşenlerini, css-loader ve style-loader CSS dosyalarını işler.
* Eklentiler (Plugins): Yükleyicilerin yapamadığı daha geniş görevleri yerine getirirler. Örneğin, HTML dosyalarını oluşturmak (html-webpack-plugin), CSS’yi ayrı bir dosyaya çıkarmak (mini-css-extract-plugin), kod sıkıştırma (terser-webpack-plugin) gibi.
* Geliştirme Sunucusu (DevServer): Geliştirme sırasında uygulamanızı sunan ve canlı yeniden yükleme (HMR) sağlayan bir Express sunucusudur.

Vue CLI, tüm bu Webpack yapılandırmasını sizin için önceden tanımlar ve vue.config.js aracılığıyla bu yapılandırmayı adım adım değiştirmenize olanak tanır.

Eklentiler ve Ön Ayarlar

Vue CLI’nın modüler yapısı, eklentiler ve ön ayarlar sayesinde büyük bir esneklik kazanır.

Vue CLI Eklentileri

Vue CLI eklentileri, @vue/cli-plugin- veya vue-cli-plugin- adlandırma kuralına uyan npm paketleridir. Bu eklentiler, projenize yeni özellikler (TypeScript, PWA, Router vb.) eklemek veya mevcut özellikleri değiştirmek için kullanılır.

Bir projeye yeni bir eklenti eklemek için vue add komutunu kullanırız:

vue add @vue/eslint
vue add @vue/typescript
vue add vue-cli-plugin-apollo # Üçüncü taraf bir eklenti

Bu komut, eklentiyi yükler, package.json‘a ekler ve projenin mevcut yapılandırmasını (örn. main.js, router/index.js, vue.config.js) otomatik olarak günceller.

Ön Ayarlar (Presets)

Daha önce bahsedildiği gibi, ön ayarlar, belirli bir özellik setini ve yapılandırma tercihlerini içeren kaydedilmiş ayarlardır. Bunlar, ~/.vuerc dosyasında JSON formatında saklanır. Kendi özel ön ayarlarınızı oluşturabilir ve bunları takım arkadaşlarınızla paylaşarak proje başlangıçlarını standartlaştırabilirsiniz.

Servis ve Derleme Komutları

Vue CLI, vue-cli-service adında bir komut satırı arayüzü (CLI) servisi sağlar. package.json‘daki betikler (serve, build, lint) bu servisi çağırır.

* vue-cli-service serve: Uygulamanızı geliştirme modunda çalıştırır. Canlı yeniden yükleme (HMR) ve hata ayıklama kolaylıkları sunar.
* vue-cli-service build: Uygulamanızı üretim için derler. Kod bölme (code splitting), minifikasyon, sıkıştırma ve ağaç sallama (tree-shaking) gibi optimizasyonlar otomatik olarak uygulanır.
* vue-cli-service inspect [options]: Bu komut, Vue CLI tarafından oluşturulan nihai Webpack yapılandırmasını incelemek için hayati öneme sahiptir. Özellikle chainWebpack veya configureWebpack ile uğraşırken veya bir hata ayıklarken çok kullanışlıdır.

vue inspect > webpack-config.js # Tüm yapılandırmayı bir dosyaya yaz
    vue inspect --rules # Sadece Webpack kurallarını göster
    vue inspect --plugins # Sadece Webpack eklentilerini göster

Bu komut, Vue CLI’nın soyutladığı Webpack yapılandırmasının tam olarak neye benzediğini görmenizi sağlar, bu da özelleştirmelerinizin doğru uygulanıp uygulanmadığını anlamanıza yardımcı olur.

* vue-cli-service help [command]: Belirli bir vue-cli-service komutu hakkında yardım bilgilerini gösterir.

Vue UI: Grafiksel Kullanıcı Arayüzü

Vue CLI, komut satırının yanı sıra, projeleri yönetmek ve yapılandırmak için grafiksel bir kullanıcı arayüzü (GUI) de sunar. vue ui komutunu çalıştırarak bu arayüze erişebilirsiniz:

vue ui

Bu komut, tarayıcınızda bir pencere açar ve size şunları yapma olanağı sunar:

* Yeni projeler oluşturma veya mevcut projeleri içe aktarma.
* Proje yapılandırmasını görsel olarak yönetme (vue.config.js seçenekleri dahil).
* CLI eklentilerini arama, yükleme ve yönetme.
* Proje görevlerini (serve, build, lint, test) çalıştırma ve çıktıyı izleme.
* Webpack yapılandırmasını görsel olarak inceleme.

Vue UI, özellikle CLI’ya aşina olmayan veya görsel bir arayüzü tercih eden geliştiriciler için harika bir araçtır.

En İyi Uygulamalar ve İpuçları

* vue inspect‘i Kullanmaktan Çekinmeyin: Webpack yapılandırmasını özelleştirirken veya bir hata ayıklarken, vue inspect komutu size neyin yanlış gittiğini veya yapılandırmanızın beklendiği gibi uygulanıp uygulanmadığını gösteren en iyi araçtır.
* Ön Ayarları (Presets) Akıllıca Kullanın: Takımınız içinde tutarlılık sağlamak ve yeni projelerin hızlı bir şekilde başlatılmasını sağlamak için özel ön ayarlar oluşturun ve paylaşın.
* chainWebpack‘i Tercih Edin: Webpack yapılandırmasını değiştirmek için configureWebpack yerine genellikle chainWebpack‘i tercih edin. chainWebpack, daha güvenli ve ince taneli değişiklikler yapmanızı sağlar.
* Bağımlılıkları Güncel Tutun: Vue CLI, @vue/cli-service ve diğer eklentileri düzenli olarak güncelleyin. Bu, yeni özelliklere, performans iyileştirmelerine ve güvenlik düzeltmelerine erişmenizi sağlar.
* Gereksiz Eklentilerden Kaçının: Projenizin gerçekten ihtiyaç duymadığı eklentileri eklemeyin. Her eklenti, derleme süresini ve nihai paket boyutunu artırabilir.
* Ortam Değişkenlerini Kullanın: Farklı ortamlar (geliştirme, hazırlık, üretim) için farklı yapılandırmalar gerektiğinde, .env dosyalarını ve ortam değişkenlerini kullanın. Vue CLI, bunları otomatik olarak yükler ve uygulamanıza enjekte eder.

Sonuç

Vue CLI, modern Vue.js geliştirme sürecinin ayrılmaz bir parçasıdır. Karmaşık Webpack yapılandırmalarını soyutlayarak, hızlı proje oluşturma yetenekleri sunarak ve kapsamlı bir eklenti ekosistemi sağlayarak geliştiricilerin üretkenliğini önemli ölçüde artırır. vue.config.js aracılığıyla sunulan esnek özelleştirme seçenekleri, projelerin benzersiz gereksinimlerine uyum sağlamasına olanak tanırken, vue inspect gibi araçlar, bu özelleştirmelerin altında yatan mekanizmaları anlamak için paha biçilmez bir pencere sunar.

Vue CLI’yı derinlemesine anlamak ve onunla etkili bir şekilde çalışmak, sadece daha verimli Vue.js uygulamaları geliştirmenizi sağlamakla kalmaz, aynı zamanda modern JavaScript araç zinciri hakkında genel bilginizi de zenginleştirir. Her ne kadar Vite gibi yeni nesil derleme araçları popülerlik kazansa da, Vue CLI hala milyonlarca projenin temelini oluşturmakta ve Vue.js ekosisteminde merkezi bir rol oynamaktadır. Onu çözümlemek, Vue.js geliştirme yolculuğunuzda size önemli bir avantaj sağlayacaktır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version