Bu kılavuz, bir mikro paket kullanarak NPM paketinizi baştan sona oluşturmanın ve yayınlamanın en kolay süreci boyunca size yol gösterecektir.
Biraz da microbundle
hakkında konuşalım. Bunu özellikle basit kitaplıklar için etkili buluyorum çünkü yapılandırma konusunda endişelenmenize gerek yok, bu da paketinizi geliştirmeye odaklanmanıza olanak tanıyor.
İşte özelliklerinin kısa bir listesi:
package.json
bir "dışa aktarma" alanı eklemektsconfig.json
olmadan kullanıma hazır TypeScript desteği
Temel olarak microbundle
, rollup.js'nin üzerine inşa edilmiştir. Bu makalede bahsedeceğimden daha karmaşık kitaplıklarınız varsa, saf rollup.js
yapılandırmasını kullanmayı düşünebilirsiniz.
Örnek olarak, iki sayıyı toplamak için yalnızca bir sum
fonksiyonunu dışa aktaracak basit bir kitaplık oluşturalım.
Proje için bir klasör oluşturun ve package.json
oluşturmak için npm init
varsayılan değerlerle çalıştırın.
src
klasöründe index.ts
oluşturun
// src/index.ts export function sum(a: number, b: number) { return a + b; }
microbundle
yükle
npm i -D microbundle
package.json
aşağıdaki değerlerle güncelleyin:
// package.json ... "type": "module", "source": "src/index.ts", // your source code "exports": { "types": "./dist/index.d.ts", // TypeScript declaration file "require": "./dist/index.cjs", // CommonJS entry point "default": "./dist/index.esm.js" // ES Module entry point }, "main": "./dist/index.cjs", // where to generate the CommonJS bundle "module": "./dist/index.esm.js", // where to generate the ESM bundle "unpkg": "./dist/index.umd.js", // where to generate the UMD bundle "types": "./dist/index.d.ts", // TypeScript declaration file for the package "scripts": { "build": "microbundle", // compiles "source" to "main", "module", "unpkg" "dev": "microbundle watch" // re-build when source files change } ...
Derleme betiğini çalıştırın
npm run build
Çıktı tam olarak package.json
bildirdiğimiz dosyaları içermelidir.
Ve işte, ilk paketimizi yaptık. Daha karmaşık senaryolara bir göz atalım.
React'ı kütüphanenize getirmek istiyorsanız microbundle
kullanmaya devam edebilirsiniz ancak artık build komutunuz şu şekilde görünmelidir:
microbundle --jsx React.createElement --jsxFragment React.Fragment --jsxImportSource react --globals react/jsx-runtime=jsx
Gelecekte kolaylık sağlamak için package.json
komutu build
betiğine ekleyin:
// package.json ... "scripts": { "build": "microbundle --jsx React.createElement --jsxFragment React.Fragment --jsxImportSource react --globals react/jsx-runtime=jsx" } ...
Bir kullanıcı arayüzü kitaplığı oluştururken bileşenleri geliştirebileceğiniz, görselleştirebileceğiniz ve belgeleriniz için demo bileşenleri sağlayabileceğiniz bir sanal alana ihtiyacınız olabilir.
İşte hikaye kitabı geliyor. Bileşenlerinizin çeşitli durumlarını kolayca tanımlayabileceğiniz, kendi kullanışlı arayüzü ve paketleyicisine sahip bir sanal alan. Bileşen durumunuzun her bir yakalamasına "hikaye" adı verilir.
Belgelerinden alınan bu resim neye benzediğini gösteriyor:
Storybook'u yüklemek oldukça basittir; sadece kütüphanenizin içindeki komutu çalıştırın:
npx storybook@latest init
Bu komut, Storybook için gerekli tüm bağımlılıkları yükleyecek, çalıştırılacak komut dosyalarını ekleyecek ve Storybook'u package.json
içinde oluşturacak, varsayılan yapılandırmaya sahip bir .storybook
klasörü oluşturacak ve bazı hikaye örneklerini src/stories
klasörüne ekleyecektir.
Stili iki yoldan biriyle ekleyebilirsiniz: CSS dosyası veya JS'de CSS. CSS dosyası kolay özelleştirmeye izin verir ancak ayrı bir ekleme gerektirir; JS'deki CSS ise stillendirmeyi basitleştirir ancak paket boyutunu artırır.
CSS dosyası
Src dizininde bir CSS dosyası oluşturun ve bunu root react bileşen dosyasına aktarın:
// src/index.tsx import './styles.css'; export const MySuperComponent = () => { return ( <h1 className="title">Hi there!</h1> ) };
Şimdi build komutunu tekrar çalıştıralım.
npm run build
Ve içe aktarılan styles.css
dosyanız dist
klasöründe oluşturulacaktır:
Harika! Gerekli stillere sahip bir CSS dosyası elde ettik. Ancak bu çözümde ufak bir rahatsızlık var. Paket kurulduktan sonra CSS dosyasının ayrıca eklenmesi gerekmektedir.
Bu nedenle, kitaplığınızın kullanıcılarının CSS dosyanızı işlemek için bir CSS yükleyicisi (örneğin, web paketi için bir CSS yükleyicisi) kullanması gerekecektir ve kullanımları şu şekilde görünecektir:
import { MySuperComponent } from 'my-super-library'; import 'my-super-library/dist/styles.css'; export const App = () => { return ( <MySuperComponent /> ); }
JS'de CSS
Bu amaçla styled-component gibi kütüphaneleri kullanabilirsiniz. Ve şöyle görünecek:
import styled from 'styled-components'; const Title = styled.h1` font-size: 30px; font-weight: bold; `; export const MySuperComponent = () => { return ( <Title>Hi there!</Title> ) };
Bu çözüm sayesinde kullanıcıların bir CSS dosyasını içe aktarmalarına ve projeleri için özel bir yükleyici eklemelerine gerek kalmayacak. Kitaplığı yükledikten sonra bileşen kendi stiliyle birlikte gelecektir. Ancak bu, paket boyutunu artıracak ve kullanıcıların CSS seçicileri kullanarak öğeleri özelleştirmesini zorlaştıracaktır.
Size en uygun seçeneği seçin. CSS dosyasını kullanmayı tercih ediyorum çünkü bu, kullanıcıların herhangi bir öğeyi CSS seçicilerle özelleştirmesine olanak tanıyor, paket boyutunu etkilemiyor ve daha hızlı çalışıyor.
README.md dosyası kitaplığınız, nasıl kurulacağı, temel kullanımı ve sahip olduğu özellikler hakkında bilgi sağlar. Bu genellikle geliştiricilerin deponuzla veya NPM paketinizle karşılaştıklarında okudukları ilk dosyadır, bu nedenle kısa ve bilgilendirici olmalıdır.
Aşağıdaki sırayla bir yapı oluşturmayı seviyorum:
İlham almak için paketlerimdeki dot-path-value ve react-nested-dropdown gibi README.md
dosyalarının örneklerine başvurabilirsiniz.
Bu önemli bir kısım çünkü yanlış yaparsanız kullanıcılar sürüm çakışmaları veya başka sorunlarla karşılaşabilir ve kitaplığınızı kaldırmak zorunda kalabilirler. Şimdi bağımlılık türleri arasındaki temel farklara bir göz atalım.
microbundle
paket paketini yüklediyseniz, bunu devDependencing'de tutun; pakette görünmeyecektir.
“peerDependencing'ler” paketinizin kullandığı ancak paketinize dahil etmeyeceği bağımlılıklardır. Paketiniz, kullanıcının projesinde sahip olduğu bağımlılığın sürümünü kullanacaktır.
Temel olarak, eğer ekosistemi için bir kütüphane oluşturuyorsak, bir eş bağımlılığı belirtmeliyiz. Örneğin, bir React bileşeni oluşturuyorsanız React'ı eş bağımlılığı olarak ayarlayın. Takvimli bir React bileşeni geliştiriyorsanız, React'ı ve bir tarih hesaplama kütüphanesini (örneğin, date-fns)peerDependencing'ler olarak ekleyin.
Kullanıcının projesinde belirtilen eş bağımlılığı yoksa, npm install
komutu bir uyarı görüntüler ancak bağımlılığı otomatik olarak yüklemez.
Nasıl göründüğüne dair sadece küçük bir örnek:
// package.json ... "dependencies": { // libraries which will be installed along with your library "clsx": "^1.2.1" // just library for className combining }, "peerDependencies": { // user should have these packages installed "react": "^16.8.0 || ^17.0.0 || ^18.0.0" // user should have react 16.8+ version }, "devDependencies": { // won't be in user's bundle, these libraries just for your developing needs "@types/react": "^18.2.33", "react": "^18.2.0", // in case if we are using storybook, we need actual react library to render our components there "microbundle": "^0.15.1", }, ...
Bir NPM paketi yayınlıyorsanız, bu onun herkese açık olacağı anlamına gelir (eğer ücretsiz bir hesabınız varsa). Kullanıcılardan geri bildirim toplamak amacıyla orijinal kodunuz için bir GitHub deposu oluşturabilirsiniz. İnsanlar orada sorun yaratabilir ve paketiniz hakkında sizinle iletişim kurabilir. Ayrıca yayınlarınızı tanımlayabilir ve birkaç yıldız kazanabilirsiniz!
Bu adımı kesinlikle atlayabilirsiniz ancak bu, geliştirici kültürünün ayrılmaz bir parçasıdır ve açık kaynağa değerli bir katkı olabilir.
Paketinizi yayınlamadan önce package.json
dosyanızın doğru şekilde yapılandırıldığından emin olmanız önemlidir. İzlenecek bazı önemli adımlar şunlardır:
Kitaplığınızın temel işlevlerini adlandırın ve açıklamaya çalışın. Örneğin:
"name": "react-color-picker"
GitHub deposu bilgilerini ekleyin (varsa):
... "homepage": "https://github.com/{your_repository}", "repository": { "type": "git", "url": "https://github.com/{your_repository}" }, "bugs": { "url": "https://github.com/{your_repository}/issues" }, ...
files
yapılandırın:
... "files": [ "dist", ], ...
Kütüphaneniz kurulduğunda node_modules
dahil edilecek dosyaları belirtmelisiniz. Genellikle dist
klasörünün dahil edilmesi yeterlidir.
keywords
ekleyin:
Anahtar kelimeler paketinizi tanımlayan ve NPM tarafından aramalar ve öneriler için kullanılan bir dizi dizedir. İnsanların arama yaparken kullanacağını tahmin ettiğiniz, paketinizle alakalı kelimeleri seçin. sum
kütüphanemiz için anahtar kelimeler oluşturalım:
... "keywords": ["typescript", "math", "sum", "numbers", "arithmetic", "calculator", "calculation"] ...
Kullanıcılar sıklıkla "matematik için yazı tipi kitaplığı" veya "tepki takvimi seçici" gibi terimleri arattıkları için teknolojilerinizi belirtmeniz önemlidir.
Henüz yapmadıysanız bir NPM hesabı oluşturun ve terminalinizde npm login
çalıştırın; hesabınızın kimliğini doğrulamak için talimatları izleyin. Varsayılan olarak paketinizin sürümü 1.0.0
olacaktır; package.json
dosyasından kontrol edebilirsiniz. 0.0.1
olarak değiştirmenizi öneririm.
npm publish
çalıştırın ve işiniz bitti! Gelecekte sürümü güncellemek için, sürümü artırmak üzere npm version patch
komutunu kullanın ve ardından güncellenen paketi npm publish
ile yayınlayın.
Gördüğünüz gibi kendi kütüphanenizi oluşturmak çok kolay! Temel olarak, paketi oluşturmak ve sürdürmek için ihtiyacınız olan tek şey budur. Kitaplığınızı microbundle
ile sınırlandırmakta zorlanıyorsanız rollup.js'yi daha spesifik bir yapılandırmayla kullanmanızı öneririm.
NPM paketleri oluşturmak ve açık kaynağa katkıda bulunmak, tüm beceri seviyelerindeki geliştiriciler için ödüllendirici ve değerli bir deneyimdir. Kodunuzu toplulukla paylaşmanıza, çok fazla deneyim kazanmanıza ve çalışmalarınızdan oluşan bir portföy oluşturmanıza olanak tanır.