{"id":232290,"date":"2023-01-12T13:36:00","date_gmt":"2023-01-12T10:36:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=232290"},"modified":"2023-01-12T13:37:05","modified_gmt":"2023-01-12T10:37:05","slug":"kuinka-luoda-ja-julkaista-deno-cli-tyoekalu-oikein","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/kuinka-luoda-ja-julkaista-deno-cli-tyoekalu-oikein\/","title":{"rendered":"Kuinka luoda ja julkaista Deno CLI -ty\u00f6kalu oikein"},"content":{"rendered":"\n<p>Yksi hieno asia Ember-kehyksess\u00e4 on, ett\u00e4 siin\u00e4 on Ember CLI komponentin, mallin tai reitin luomiseksi. Se s\u00e4\u00e4st\u00e4\u00e4 paljon aikaa, ja viel\u00e4 enemm\u00e4n, se <code>ember generate component<\/code>luo paitsi komponentin my\u00f6s testitiedoston QUnitille. Katsotaanpa, kuinka luodaan Deno CLI -ty\u00f6kalu tekem\u00e4\u00e4n jotain vastaavaa Reactille.<\/p>\n<p>T\u00e4ss\u00e4 Deno-opetusohjelmassa n\u00e4emme, kuinka luodaan Deno CLI -ty\u00f6kalu TypeScriptill\u00e4 ja kuinka ladataan riippuvuuksia Denon standardikirjastosta. Tutkimme kuinka lukea hakemistoa ja kirjoittaa tiedosto. Lopuksi opimme julkaisemaan Deno-moduulimme GitHubissa ja suorittamaan sit\u00e4 suoraan kyseisest\u00e4 sijainnista sek\u00e4 asentamaan sen paikallisesti, jotta se voi toimia ilman yhteytt\u00e4.<\/p>\n<h2>Yleiskatsaus<\/h2>\n<p>T\u00e4ss\u00e4 Deno-opetusohjelmassa rakentamamme CLI-ty\u00f6kalu hyv\u00e4ksyy komentorivilt\u00e4 v\u00e4litetyn komponentin nimen ja luo hakemiston ja tiedoston React-toiminnallisen komponentin koodilla.<\/p>\n<p>Tein t\u00e4st\u00e4 t\u00e4ydellisemm\u00e4n version, joka luo my\u00f6s SASS-tyylitaulukon ja testitiedoston, joka sopii Jestille ja Enzymelle. Lis\u00e4\u00e4 r\u00e4\u00e4t\u00e4l\u00f6ityj\u00e4 ja komponenttimalleja (kuten koukkuja tai Reduxia tai Routeria tai kaikkia k\u00e4ytt\u00e4vi\u00e4) pian.<\/p>\n<p>Yksinkertaisuuden vuoksi t\u00e4m\u00e4 Deno-opetusohjelma kattaa kuitenkin olennaiset asiat: parametrien lukemisen ja tiedostojen kirjoittamisen, ja kirjoitamme yhden tiedoston. Loput on merkkijonojen manipulointia ja enemm\u00e4n sis\u00e4ll\u00f6n kirjoittamista, ei mit\u00e4\u00e4n erityist\u00e4. Voit k\u00e4ytt\u00e4\u00e4 t\u00e4ytt\u00e4 Deno CLI -ty\u00f6kalua luodaksesi React-komponentin SASS:n ja Jestin kanssa t\u00e4m\u00e4n artikkelin lopussa olevassa repossa.<\/p>\n<h2>Asenna Deno<\/h2>\n<p>Jotta voit k\u00e4ytt\u00e4\u00e4 t\u00e4t\u00e4 Deno CLI -ty\u00f6kalua, sinulla on oltava ajonaika asennettuna. Jos k\u00e4yt\u00e4t jo Homebrew&#8217;ta macOS:ss\u00e4, voit asentaa Denon nopeasti seuraavilla tavoilla:<\/p>\n<pre><code>brew install deno<\/code><\/pre>\n<p>Jos et k\u00e4yt\u00e4 Homebrew&#8217;ta, voit asentaa sen k\u00e4ytt\u00e4m\u00e4ll\u00e4 CURL-osoitetta:<\/p>\n<pre><code>curl -fsSL https:\/\/deno.land\/x\/install\/install.sh | sh<\/code><\/pre>\n<p>Muut asennustavat ja j\u00e4rjestelm\u00e4t on kuvattu <a href=\"https:\/\/deno.land\/manual\/getting_started\/installation\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Deno Manual -oppaassa<\/a>.<\/p>\n<h2>Lue komentoriviparametrit Denossa<\/h2>\n<p>Olennaisinta, mit\u00e4 tarvitsemme generaattorillemme, on ottaa komponentin nimi. Meid\u00e4n on pystytt\u00e4v\u00e4 v\u00e4litt\u00e4m\u00e4\u00e4n komponentin nimi <a href=\"https:\/\/startfunction.com\/tag\/deno\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Deno-<\/a> ty\u00f6kalulle. Luo hakemisto ja lis\u00e4\u00e4 tiedosto nimelt\u00e4 <code>mod.ts<\/code>ja liit\u00e4 siihen t\u00e4m\u00e4:<\/p>\n<pre><code>const { args: [name] } = Deno;\nconsole.log( `Writing component ${ name }` );<\/code><\/pre>\n<p>Nyt, kun lis\u00e4\u00e4t <code>Deno<\/code>muuttujan, saat luultavasti varoituksen koodieditoristasi ja sen TypeScript-tuesta riippuen, ett\u00e4 se ei l\u00f6yd\u00e4 <code>Deno<\/code>nime\u00e4. Jos k\u00e4yt\u00e4t VS Codea, voit ratkaista t\u00e4m\u00e4n k\u00e4ytt\u00e4m\u00e4ll\u00e4 virallista <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=denoland.vscode-deno\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">VS Code -laajennusta lis\u00e4t\u00e4ksesi Deno-tuen<\/a>. JetBrains on my\u00f6s julkaissut laajennuksen <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/14382-deno\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Deno-tuen tarjoamiseksi JetBrain IDE:ille<\/a>.<\/p>\n<p>Suorita nyt t\u00e4m\u00e4 moduuli seuraavasti:<\/p>\n<p><code>deno run mod.ts<\/code>Hei maailma<\/p>\n<p>T\u00e4m\u00e4 vastaa parametrilla &quot;HelloWorld&quot;, jonka hyv\u00e4ksymme:<\/p>\n<p><code>Writing component HelloWorld<\/code><\/p>\n<p>Kiva! Se toimii!<\/p>\n<h2>Kirjoita tiedostoja Denon kanssa<\/h2>\n<p>Kirjoitetaan nyt tiedosto. Tarvitsemme ensin sen sis\u00e4ll\u00f6n, joten lis\u00e4\u00e4 t\u00e4m\u00e4 <code>mod.ts<\/code>tiedostoon. K\u00e4yt\u00e4mme <a href=\"https:\/\/startfunction.com\/category\/javascript\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">JavaScript<\/a> -mallin literaaleja luodaksemme yhden merkkijonon ja lis\u00e4\u00e4m\u00e4ll\u00e4 komponentin nimen ja jopa kutsumalla merkkijonomenetelm\u00e4\u00e4 tehd\u00e4ksesi siit\u00e4 pieni\u00e4 kirjaimia:<\/p>\n<pre><code>const compoContent: string = `import React from 'react';\nimport PropTypes from 'prop-types';\n\n${name}.propTypes = {\n\n};\nfunction ${name}(props) {\n    return();\n}\nexport default ${name};\n`;<\/code><\/pre>\n<p>Jos haluat kirjoittaa t\u00e4m\u00e4n tiedostoon, meid\u00e4n on ensin tarkistettava, onko hakemisto olemassa. K\u00e4yt\u00e4mme t\u00e4h\u00e4n <code>ensureDir<\/code>funktiota, joka on osa <a href=\"https:\/\/deno.land\/std\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Denon standardikirjastoa<\/a>. Se luo hakemiston tai hakemistot, jos niit\u00e4 ei ole olemassa. Jos haluat k\u00e4ske\u00e4 Denon k\u00e4ytt\u00e4m\u00e4\u00e4n t\u00e4t\u00e4 riippuvuutta, lis\u00e4\u00e4 t\u00e4m\u00e4 tiedoston yl\u00e4osaan:<\/p>\n<pre><code>import { ensureDir } from \"https:\/\/deno.land\/std\/fs\/ensure_dir.ts\";<\/code><\/pre>\n<p>Kun k\u00e4yt\u00e4mme ty\u00f6kaluamme, Deno lataa t\u00e4m\u00e4n moduulin k\u00e4ytt\u00e4\u00e4kseen sit\u00e4. On vihdoin aika kirjoittaa tiedosto <code>writeTestFile<\/code>Deno-ajonaikaisen komennon avulla. Liit\u00e4 tiedoston loppuun seuraava:<\/p>\n<pre><code>const compoPath: string = \".\/app\/components\/\" + compoName + \"\/\";\n\nensureDir(compoPath)\n  .then(() =&gt; {\n    Deno.writeTextFile(compoPath + \"index.js\", compoContent);\n    console.info(\"Done!\");\n});<\/code><\/pre>\n<h2>Paikallinen testi<\/h2>\n<p>Deno CLI -ty\u00f6kalumme on koodattu valmiiksi ja voimme nyt testata sit\u00e4. Deno on rakennettu turvalliseksi ajonaikaiseksi, joten toiminnot, kuten tiedostoj\u00e4rjestelm\u00e4n lukeminen tai siihen kirjoittaminen, estet\u00e4\u00e4n oletuksena. Sinun on nimenomaisesti pyydett\u00e4v\u00e4 Denoa sallimaan tiedostoj\u00e4rjestelm\u00e4n k\u00e4ytt\u00f6. Se on erotettu luku- ja kirjoitusoikeuksilla. T\u00e4ss\u00e4 tapauksessa tarvitsemme lukuoikeudet, koska <code>ensureDir<\/code>ensin on luettava hakemisto ja tarkistettava, onko se olemassa. Jos ei, se luo sen ja sitten luomme tiedoston. Kahteen viimeiseen teht\u00e4v\u00e4\u00e4n tarvitsemme kirjoitusluvan. Joten voit ajaa sen seuraavasti:<\/p>\n<p><code>deno --allow-read --allow-write mod.ts button<\/code><\/p>\n<p>Ja hakemistot luodaan tiedoston mukana, kaikki suhteessa kansioon, jossa suoritat t\u00e4m\u00e4n, kuten <code>app\/components\/Button\/index.js<\/code>.<\/p>\n<h2>Julkaise Deno-moduuli<\/h2>\n<p>Deno-moduulin jakelu on helppoa. K\u00e4sittelimme t\u00e4t\u00e4 yksityiskohtaisesti edellisess\u00e4 viestiss\u00e4, <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/julkaise-deno-moduuli-kolmessa-nopeassa-vaiheessa\/\" title=\"jossa k\u00e4siteltiin Deno-moduulin luomista ja julkaisemista GitHubissa\">jossa k\u00e4siteltiin Deno-moduulin luomista ja julkaisemista GitHubissa<\/a>. Sinun on alustettava paikallinen git repo:<\/p>\n<p><code>git init<\/code><\/p>\n<p>lis\u00e4\u00e4 ja sitoa tiedostosi:<\/p>\n<p><code>git add .<\/code><br \/>\n<code>git commit -m \"Initial commit\"<\/code><\/p>\n<p>luo arkisto GitHubissa tai vastaavassa palvelussa ja ty\u00f6nn\u00e4 se. Jos esimerkiksi luot <code>a-deno-module<\/code>GitHubissa nimetyn repon, voit suorittaa t\u00e4m\u00e4n paikallisesti ja siirt\u00e4\u00e4 sen verkkoon:<\/p>\n<p><code>git remote add origin git@github.com:YOUR-GITHUB-USER\/a-deno-module.git&lt;br&gt;git push -u origin master<\/code><\/p>\n<h2>K\u00e4yt\u00e4 verkossa julkaistua moduulia<\/h2>\n<p>Deno voi ajaa moduuleja suoraan Internetist\u00e4 ja asentaa riippuvuutensa automaattisesti. Nyt kun se on otettu k\u00e4ytt\u00f6\u00f6n, voit k\u00e4ytt\u00e4\u00e4 Deno CLI -ty\u00f6kaluamme suoraan GitHubista:<\/p>\n<pre><code>deno run --allow-read --allow-write https:\/\/raw.githubusercontent.com\/YOUR-GITHUB-USER\/a-deno-module\/master\/mod.ts button<\/code><\/pre>\n<p>Deno lataa ty\u00f6kalun, tarkistaa riippuvuudet ja asentaa ne tarvittaessa. Tulos on sama kuin yll\u00e4, se luo hakemistot ja tiedoston.<\/p>\n<p>Jotta sinun ei tarvitse kirjoittaa kaikkea t\u00e4t\u00e4 (tai etsi\u00e4 sit\u00e4 kuoresta), Deno antaa sinun asentaa t\u00e4m\u00e4n ty\u00f6kalun, jotta se toimii offline-tilassa:<\/p>\n<pre><code>deno install --allow-read --allow-write --name denomodu https:\/\/raw.githubusercontent.com\/YOUR-GITHUB-USER\/a-deno-module\/master\/mod.ts<\/code><\/pre>\n<p>Ty\u00f6kalun nimeksi tulee <code>denomodu<\/code>. T\u00e4m\u00e4 luo suoritettavan tiedoston komentorivill\u00e4 tiettyyn hakemistoon, kuten <code>\/Users\/%your-username%\/.deno\/bin<\/code>macOS:ss\u00e4. Sen sis\u00e4lt\u00f6 on komento suorittaa ty\u00f6kalu ja hyv\u00e4ksy\u00e4 parametrit:<\/p>\n<pre><code>#!\/bin\/sh\n\ndeno \"run\" \"--allow-read\" \"--allow-write\" \"https:\/\/raw.githubusercontent.com\/eliorivero\/react-generate-component\/master\/mod.ts\" \"$@\"<\/code><\/pre>\n<p>Joten kun prosessi on valmis, jos et ole lis\u00e4nnyt <code>.\/deno\/bin<\/code>polkua PATH-ymp\u00e4rist\u00f6muuttujaasi, Deno kehottaa sinua tekem\u00e4\u00e4n niin, jotta voit suorittaa ty\u00f6kalun.<\/p>\n<p>Kun olet lis\u00e4nnyt polun PATH-muuttujaasi, voit nyt k\u00e4ynnist\u00e4\u00e4 ty\u00f6kalun:<\/p>\n<p><code>denomodu button<\/code><\/p>\n<p>Se on paljon lyhyempi ja toimii nyt ilman Internet-yhteytt\u00e4. Onnittelut! Olet luonut Deno CLI -ty\u00f6kalun, julkaissut sen ja asentanut sen paikallisesti.<\/p>\n<h2>Deno CLI -ty\u00f6kalu React-komponentin luomiseen<\/h2>\n<p>Kuten t\u00e4m\u00e4n Deno-opetusohjelman alussa mainittiin, loin t\u00e4st\u00e4 t\u00e4ydellisemm\u00e4n version, ja voit k\u00e4ytt\u00e4\u00e4 t\u00e4m\u00e4n ty\u00f6kalun repoa t\u00e4\u00e4lt\u00e4:<\/p>\n<p><a href=\"https:\/\/github.com\/eliorivero\/react-generate-component\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/github.com\/eliorivero\/react-generate-component<\/a><\/p>\n<p>Se on vain yksi Deno-moduuli, joka on luotu TypeScriptill\u00e4 ja luo n\u00e4m\u00e4 tiedostot:<\/p>\n<ul>\n<li><code>index.js<\/code>, Reactin toiminnallinen komponentti<\/li>\n<li><code>style.scss<\/code>, sen SASS-tyylitaulukko<\/li>\n<li><code>test.js<\/code>, yksinkertainen testi Jestill\u00e4 ja Enzymell\u00e4<\/li>\n<\/ul>\n<p>Alla oleva gif n\u00e4ytt\u00e4\u00e4, kuinka t\u00e4m\u00e4 Deno-ty\u00f6kalu toimii asennuksen j\u00e4lkeen:<\/p>\n<p>Se hyv\u00e4ksyy yhdistetyt nimet, jotka on erotettu viivalla. Esimerkiksi hyv\u00e4ksyminen <code>nav-bar<\/code>luo komponentin nimelt\u00e4 <code>NavBar<\/code>. Voit my\u00f6s m\u00e4\u00e4ritt\u00e4\u00e4 mukautetun hakemistopolun, joka ei ole oletuspolku <code>app\/components<\/code>tai ei, ja jatkaa oletuspolun k\u00e4ytt\u00f6\u00e4.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/startfunction.com\" class=\"external external_icon\">startfunction.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Rakennetaan ty\u00f6kalu, joka luo tiedoston React-toiminnalliselle komponentille.<\/p>\n","protected":false},"author":1,"featured_media":157660,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[750,1018,730,719,895,834,843],"tags":[1166],"class_list":["post-232290","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-avoin-laehdekoodi","category-hyodyllisia-sivustoja","category-javascript-5","category-kehittaejae","category-koodi","category-opas-aloittelijoille","category-opetusohjelmia","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/232290","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=232290"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/232290\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/157660"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=232290"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=232290"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=232290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}