Usando Grunt per rendere ancora più divertente il tuo flusso di lavoro di progettazione di email

Progettare la posta elettronica è difficile e arcaico. Inlining CSS, design di tabelle, supporto CSS diverso, più dispositivi, più client, la lista è infinita. In questo tutorial spiegherò come utilizzare Grunt per automatizzare e ottimizzare il flusso di lavoro.

Flusso di lavoro di progettazione e-mail interrotto

La progettazione di email è un flusso di lavoro diverso dal web design. Spesso stai progettando un modello in un ambiente isolato, con poche o nessuna dipendenza o risorse condivise. È possibile che si copi il markup da un posto (locale, statico) a un altro (ESP, codebase). Può essere difficile mantenere i tuoi modelli di email, è difficile mantenerli coerenti e difficili da collaborare con i membri del team, il tutto tenendo a mente i vari test e l'inlining che devono essere eseguiti prima che vengano inviati.

Un problema che ho avuto in passato è ogni volta che ho bisogno di un nuovo modello di email, vorrei prendere un modello esistente e apportare qualche modifica qua e là. Ciò comporterebbe l'invio di e-mail incoerenti attraverso il prodotto. Che è solo una cattiva pratica.

Un altro problema che ho riscontrato è che ho finito, quindi metto il modello attraverso uno strumento inliner CSS e lo porto a uno sviluppatore, solo per qualcuno che richiede una modifica o segnala un errore. Il flusso di lavoro di modifica / in linea / copia deve quindi essere ripetuto ancora e ancora.

Grunt to the Rescue

Oggi uso Grunt per ottimizzare il flusso di lavoro del mio progetto di email. Aiuta con alcune cose:

  • Mi dà una struttura in cui lavorare, quindi posso usare Sass e il template
  • Serve come standard per le nuove email
  • Aiuta a rendere le mie e-mail coerenti in un progetto
  • Automatizza le varie attività e test che devo fare per ogni e-mail

Cos'è Grunt?

Grunt è un corridore compito. È un file Javascript che esegue le attività che si desidera eseguire una dopo l'altra. Quella lista di cose che devi fare ho appena menzionato sopra? Possiamo metterli in un file Grunt e farlo fare tutti per noi. Perfetto per eseguire attività ripetitive.

Per far funzionare Grunt dovrai mettere le mani un po 'sporche con la roba da riga di comando e Javascript. Ma è molto semplice.

1. Come ottenere Grunt up and Running

Chris Coyier offre un ottimo tutorial sull'impostazione di Grunt per la prima volta. Ho intenzione di scavalcare le basi.

Grunt richiede un paio di cose per andare avanti. Nodo, un gestore di pacchetti e un file grunt.

Installa nodo

Vai al sito del nodo e segui le istruzioni per l'installazione. 

Crea package.json nella directory del tuo progetto

Crea una nuova cartella (ad esempio chiamata e-mail) quindi creare un file denominato package.json.

Incolla questo JSON nel file.

"nome": "emailDesign", "versione": "0.1.0", "devDependencies": "grunt": "~ 0.4.5"

Qui stiamo dicendo al gestore di pacchetti del nodo di utilizzare Grunt, versione 0.4.5 o successiva.

Installazione NPM

Ora per installare la versione precedente di Grunt, vai alla directory del tuo progetto nella riga di comando e inserisci:

installazione di npm

Quando esegui questo comando, noterai a node_modules cartella appare.

Installa l'interfaccia della riga di comando di Grunt

Sempre nella tua directory di posta elettronica, esegui il seguente comando:

npm install -g grunt-cli

Nota: potrebbe essere necessario anteporre questo comando con sudo  se ti viene chiesto di eseguirlo come root / amministratore. 

Fatto ciò, ora possiamo digitare comandi Grunt nella riga di comando.

Crea il tuo Gruntfile.js

Crea un file chiamato Gruntfile.js nella cartella del progetto e includi il seguente codice JavaScript:

module.exports = function (grunt) grunt.initConfig (pkg: grunt.file.readJSON ('package.json')); grunt.registerTask ( 'default'); ;

Questa è l'essenza di ciò che è necessario per far funzionare Grunt. Ora per aggiungere altre cose eccitanti.

2. Aggiungi i compiti a Grunt

Iniziamo con qualcosa di semplice, ma vitale: Inlining CSS. Diciamo che abbiamo un modello di email, con CSS in testa. Il CSS in testa è facile (ish) da mantenere, ma il modello che vogliamo effettivamente inviare dovrebbe avere CSS in linea.

Crea il modello HTML

Utilizzeremo un'e-mail HTML di base con il CSS in testa. Salva il seguente markup come email.html nella directory del tuo progetto.

     

Ciao mondo!

Questo è un modello di email.

Installa l'attività Inliner CSS

Quindi utilizzeremo un'attività inliner CSS per posizionare ogni regola di stile in linea sugli elementi HTML stessi. Mi piace questo inliner in quanto non richiede altre dipendenze. Torna alla tua riga di comando ed esegui questo:

npm installa grunt-inline-css --save-dev

Questo aggiungerà l'attività grunt-in-line-css al tuo npm_modules cartella, così come il package.json file.

Aggiungi l'attività al tuo Gruntfile

Quindi aggiungi l'attività al tuo Gruntfile.js usando questo frammento, sopra dove vedi grunt.registerTask ( 'default');

grunt.loadNpmTasks ( 'grunt-inline-css');

Quindi aggiungere le opzioni di configurazione, all'interno del grunt.initConfig () metodo:

inlinecss: main: options: , files: 'email-inlined.html': 'email.html'

Qui stiamo dicendo a inlinecss di trovare il file "email.html" e di inviare "email -inlined.html". Infine, lo chiamiamo dal task predefinito grunt:

grunt.registerTask ( 'default', [ 'inlinecss']);

The Final Gruntfile

Il tuo Gruntfile dovrebbe ora assomigliare a questo:

module.exports = function (grunt) grunt.initConfig (pkg: grunt.file.readJSON ('package.json'), inlinecss: main: opzioni: , file: 'email -inlined.html' : 'email.html'); grunt.loadNpmTasks ( 'grunt-inline-css'); grunt.registerTask ( 'default', [ 'inlinecss']); ;

Esegui Grunt

Tornando ancora alla riga di comando, digitare grugnito ed entra per eseguirlo. 

Ora dovresti essere lasciato con un email-inlined.html file che ha il css in linea. Se apri entrambi i file HTML nel tuo browser, dovrebbero avere lo stesso aspetto.

Email Design Tasks

Con una fortuna che ti avrà convinto dei poteri di Grunt nell'automatizzare il tuo flusso di lavoro di progettazione della posta elettronica. Inoltre, in seguito a questa introduzione, è stato fornito il quadro per andare ancora oltre.

Quali altre attività di progettazione della posta elettronica potresti automatizzare?

  • Compila CSS (se si utilizza SASS o Less)
  • CSS in linea
  • Compilare i modelli HTML (se si utilizzano layout e partial)
  • Anteprima nel browser
  • Anteprima nei client di posta
  • Test con app di test via email (Litmus, Email su Acid)
  • Caricamento di risorse su una CDN disponibile pubblicamente
  • Aggiunta di tag di tracciamento UTM ai collegamenti
  • ... la lista continua

La mia email Design Gruntfile

Questo è il Gruntfile, open-source su GitHub, che uso molto spesso. Diamo un'occhiata ai singoli compiti per vedere cosa sta realmente accadendo.

1. Sass / SCSS

Mi piace gestire il mio CSS usando SCSS, quindi la prima cosa che devo fare a Grunt è compilare il file SCSS principale.

2. Assemblare HTML

Assemble è un generatore di sito statico. Compila l'HTML riunendo i modelli di layout principali e il contenuto di ciascuna email.

3. CSS in linea

Sto usando premailer per CSS incorporato. Se ti stai chiedendo perché non sto usando l'inliner dall'alto, ho trovato che il premailer ha un supporto migliore per le query multimediali. Affinché le query sui media funzionino, desideriamo che siano lasciate sole in testa, non in linea. 

Nota: premailer ha delle dipendenze che devono essere installate, tra cui Ruby e un paio di gemme.

4. Invio di un'e-mail di prova

Per inviare un'e-mail a una casella di posta in arrivo sto utilizzando l'API di Mailgun. Questo invia l'e-mail HTML in uscita alla mia casella di posta in arrivo in modo che possa vederlo da solo nel client che scelgo.

Questo è anche un modo utile per inviare il modello a Litmus se si desidera visualizzarlo in anteprima in altri client di posta elettronica. Fare così è una questione di cambiare il destinatario.

5. CDN

Questo è utile se si inviano e-mail transazionali e è necessario memorizzare le risorse immagine da qualche parte. Se stai utilizzando un ESP (Email Service Provider) per inviare le tue e-mail, c'è una buona possibilità che memorizzino le tue risorse immagine per te, quindi non è un problema in questo caso.

Esecuzione dei compiti

Per eseguire le attività abbiamo una serie di opzioni di comando.

  • grugnito esegue l'attività predefinita. Ciò include la compilazione di Sass, l'assemblaggio di modelli e l'inlining del CSS. È quindi possibile aprire l'output nel browser.
  • grunt send --template = MY_TEMPLATE.html eseguirà le attività di cui sopra e invierà il modello di email specificato. Ricordati di aggiornare le impostazioni di Mailgun in Gruntfile.js.
  • grunt cdnify eseguirà nuovamente le attività predefinite, ma caricherà anche eventuali risorse immagine locali, quindi sostituirà i percorsi dei file con il percorso CDN.
  • Nota puoi anche combinare le attività, ad es. grunt cdnify send -template = MY_TEMPLATE.html

Più compiti!

Ci sono più attività che potresti voler aggiungere per aiutare il tuo processo, o potresti volerle rimuovere. Dirigiti verso la directory dei plugin di Grunt per trovare le attività che aiutano il tuo flusso di lavoro.

Modelli di email transazionali

Ecco alcuni modelli che ho preparato in precedenza.

Usando il flusso di lavoro e Gruntfile delineati sopra, ho aperto una serie di email transazionali per i team di sviluppo da utilizzare. Sentiti libero di usarli come sono, o usali come un piano d'appoggio per i tuoi progetti di email.

Risorse utili per la progettazione di email

  • Configurazione di Grunt per il tuo prossimo progetto
  • Migliora il flusso di lavoro della tua email con un design modulare
  • Flusso di lavoro di progettazione della posta elettronica
  • Un flusso di lavoro Grunt per progettare e testare email HTML
  • Modelli di email HTML reattivi per le startup

Conclusione

Molte attività associate alla progettazione di e-mail possono essere ardue e imbarazzanti. Lascia che Grunt faccia il duro lavoro per te e troverai l'intero processo molto più piacevole!