6

Sto utilizzando browserify-rails e sto cercando di ottenere i pignoni per il preprocesso di un file che contiene una direttiva pignoni, in modo che quando I require() utilizzando browserify, conterrà il JavaScript generato.Richiesta di un file preimpostato con Browserify e browserify-rail

La direttiva pignoni tenta di includere l'uscita della gemma js-routes, per consentirmi di accedere ai percorsi Rails dal clientide.


Questa è la mia messa a punto (in un raggio app/assets/javascripts):

system/ 
    rails_routes.js 
application.js 

application.js è il file principale, e si corre il resto dell'applicazione. Mi piacerebbe essere in grado di fare qualcosa come

var rr = require("./system/rails_routes.js"); 

in esso, e ottenere l'accesso all'oggetto percorsi.


Da system/react_routes.js, ho il seguente:

//= require js-routes 

console.log("Does this work?"); 

(per inciso, ho configurato js-routes per posizionare l'output in un oggetto chiamato module.exports, in modo da conformarsi al modello CommonJS, come descritto in railsware/js-routes#121)

L'unico problema è che quando guardo il pacchetto generato, la direttiva pignoni è ancora lì e non è stata espansa.

La chiamata console.log è anche presente e viene eseguita quando I require() il modulo.

C'è un modo per farlo funzionare? Qual è il modo corretto di disporre di pignoni per il preprocesso di un file prima di raggrupparlo con browserify-rails?

risposta

8

Ho passato ore interminabili sull'integrazione browserify-rail nel mio progetto e fare JS Itinerari lavorare all'interno di questa impostazione ...

La soluzione mi è venuto da e descritta di seguito è il risultato di me che non sono in grado di avere Pignoni pre-processare il mio file di rotte prima che arrivasse Browserify. Ho passato un po 'di tempo in entrambi i codici sorgente di browserify-rails e pignoni ma non sono riuscito a trovare un modo per cambiare le cose e far agire ciascun componente nell'ordine corretto per questo per funzionare.

Quindi la mia soluzione era utilizzare un gancio Rails per generare il file JS completo «a mano» nell'ambiente di sviluppo, in modo che i percorsi siano sempre aggiornati con gli ultimi file di percorsi di Rails. Suppongo quindi che il file JS delle rotte sarà aggiornato quando si spinge alla produzione.

Facendo così nell'ambiente il caricamento si assicura che il file JS sia pronto prima che Sprockets/browserify suoni in: per loro è solo un semplice file JS.

Ecco il codice da includere nel development.rb:

ActionDispatch::Reloader.to_prepare do 
    Rails.application.reload_routes! 

    if JsRoutes.assert_usable_configuration! 
    JsRoutes.generate!(Rails.root.join('app/assets/javascripts/routes.js')) 
    end 
end 

Ti consigliamo di ricaricare sempre rotte, altrimenti il ​​file generato sarà sempre rappresentare il penultimo stato del file percorsi Rails. Non ho mai capito perché ...

Nel mio application.js, poi ho appena rimosso tutti //= direttive ma quelli di jQuery (per mantenere un jQuery globale disponibile), e ho usato il metodo require per tutti gli altri moduli in modo che browserify sarebbe scegliere i file che voglio includere.

Quindi questo è un po 'hacky, ma funziona.

Sarei interessato a vedere se qualcuno con una migliore conoscenza della pipeline Sprockets potrebbe venire con una soluzione migliore?

+1

Grazie mille per questa soluzione. Posso confermare che funziona! –

+0

di nuovo, felice di aiutare;) –