Strekmann

2016-12-30
sigurdga

Når Relay ikke kan lage clientMutationId

Vi er inne i en serie av feilmeldinger fra Relay som ikke alltid er like enkle å forstå seg på. Nå skal vi se hva Relay egentlig klager på når den sier at den ikke kan lage en clientMutationId:

Cannot set property ‘clientMutationId’ of undefined

Eller:

Cannot create property ‘clientMutationId’ on string ‘[…]’

Den første betyr at du ikke returnerer noe fra mutateAndGetPayload, og den andre betyr at du returnerer en streng som ikke kan brukes av Relay til å lage clientMutationId.

Om du bare har en “lokal” database-id, som du vil bruke til å lage en globalID som Relay kan fjerne i frontend, kan du bruke toGlobalId(), som tar inn et typenavn og en lokal id og returnerer en global ID. Dette gjør du i outputFields.

2016-12-28
sigurdga

Pakke svgo mangler configfil med Yarn

Når du tar i bruk Yarn, feiler plutselig Svgo med at fila .svgo.yml mangler:

Module build failed: Error: ENOENT: no such file or directory, open ‘[…]/node_modules/svgo/lib/svgo/../../.svgo.yml’

En mulig feil er at du har kjørt yarn clean som har generert sin .yarnclean. Ved hver kjøring av Yarn, kjøres da en ryddekommando som fjerner filer som sannsynligvis ikke er nødvendige for pakkeavhengigheter.

Om du tar en kikk i .yarnclean vil du se linja .*.yml som sørger for at “skjulte” yml-filer blir fjernet. Løsningen er å legge inn et unntak som dette:

!.svgo.yml
2016-12-28
sigurdga

Når RelayQL-fragmenter ikke er kompilert

Du får for eksempel feilmeldinga:

Invariant Violation: RelayQL: Unexpected invocation at runtime. Either the Babel transform was not set up, or it failed to identify this call site. Make sure it is being used verbatim as Relay.QL.

Hvis du nettopp har sjekket ut kode, og dette er første gang du kjører, må du bygge prosjektet fra bunnen, f.eks med webpack. Det er også mulig å lagre alle filene på nytt og la nodemon plukke opp endringene og bygge prosjektet på nytt.

2016-12-14
Sigurd Gartmann

Hugo

Vi tester nå en statisk modell for oppbygging av nettsida vår. Alt innhold lagres i Git og vises med Hugo.

For oss som jobber i Vim og Git hele dagen, er det nyttig for oss å skrive blogginnlegg på samme måte. Men dette er ikke for alle, da det ikke er mulig å redigere innholdet på nettsiden.

Dette er ikke like dynamisk som før, men lynende raskt. Og det er også en kjempefordel for oss å ikke ha publiseringsplatformen vår under kontinuerlig utvikling.

Vi får se hvor lenge vi holder på Hugo, men det er i alle fall en masse ting i Hugo vi ikke hadde klart å komme på selv…

2016-02-25
Sigurd Gartmann

Redux

Det kan se ut som vi har tatt en pause fra Samklang, og vi har jo faktisk det. Vi hadde noen problemer med Flux-implementasjonen vi hadde valgt, og bestemte oss for å se på de mest brukte, og landet på Redux.

Siden vi støter på de samme konseptene i alle prosjektene vi jobber med, ga det mening å bruke tid på å få dette inn i Node-boilerplate, og få Samklang til å basere seg på denne igjen.

Litt på samme måte som React blander HTML og Javascript, prøver ikke Redux å følge Flux til punkt og prikke, men ender opp med sine egne konsepter. Her trigger man actions som blir lyttet på av reducers, som propagerer endringer i props til litt avanserte komponenter, kalt containers.

I vår nye versjon av Node-boilerplate har vi nå dratt inn Redux og et lite knippe nyttige tilleggsmoduler:

  • Redux
  • React-Redux
  • React-Router-Redux
  • Redux-Immutable
  • Redux-Socket.io

Jada. Det meste virker, men alt har ikke helt gått etter planen. Vi hadde veldig lyst til å lage dette “universalt” eller “isomorfisk”, som vil si at vi lar serveren og klient rendre innholdet likt. Noe av det som gjør React så bra, er at man kan rendre på server, og få klienten til å gjenbruke elementene, og dette gjør det fristende å få til det “universelle” her.

Noe av det flotte med en “universal” app, er altså at den samme koden rendrer likt på tjener og klient. Da hadde det også vært fint om nettverkskallene som brukeren initierer på klientsiden kan kjøres likt på serversiden. Og inn kommer Isomorphic-fetch, som bruker Whatwg-fetch og Node-fetch på henholdsvis klient og tjener. Men vi fant etterhvert ut at Node-fetch ikke er laget for å gjøre spørringer mot egen tjener:

Man må bruke tjenernavn i alle spørringer Man har ingen enkel måte å si at credentials skal følge med, og man må hente ut cookie og videresende den selv. Vi fikk det til, men siden det føles som et hack, har vi foreløpig landet på et alternativ der vi godtar å ha forskjellige ruter inn til api, og de rutene serveren initierer. Vi lar rutene være forskjellige, men lar dem wrappe felles funksjoner.

Jaja, det nærmer seg. Den versjonen som ligger ute nå, har ganske mye virk.

Arkiv