Puis-je déployer à chaud les fichiers HTML du client Meteor?

Meteor est assez étonnant dans la mesure où vous pouvez mettre à jour les fichiers HTML manuellement lors du développement en local et que ces modifications s’appliquent immédiatement lorsque vous enregistrez le fichier. J’aimerais prendre cette même fonctionnalité et l’amener à notre environnement déployé. La raison en est que nous aimerions permettre à notre client d’apporter des modifications à l’interface utilisateur sans avoir à redéployer l’application ni même savoir que c’est une application Meteor. Ils peuvent append de nouveaux champs à une vue liste, de nouveaux champs à un formulaire, modifier les libellés, etc.

Jusqu’à présent, j’ai créé un moyen pour eux d’appeler un service REST en utilisant un DSL pour décrire ces modifications et de les enregistrer en mongo. Ensuite, nous avons un moteur qui créera dynamicment les modèles HTML pour l’implémenter. Cela fonctionne très bien.

Ensuite, je tente de déployer à chaud les fichiers HTML de Meteor à partir d’un abonnement que j’ai avec la firebase database Meteor, qui stocke les éléments susceptibles de changer à la demande. Est-il possible de mettre à jour le système de fichiers du client Meteor à la volée afin que je puisse effectuer un déploiement à chaud?

En procédant comme suit sur la méthode de publication sur le serveur, vous ENOENT: no such directory un résultat ENOENT: no such directory erreur de ENOENT: no such directory :

 var result = decodeHTML(cheerio.html()); console.log(result); // Output to file fs.writeFile('../client/app/client/templates/request-base-template.html', result, function (err) { if (err) { console.log("error: " + err); } else { console.log("File saved successfully"); } }); 

Enregistrer des fichiers sur le disque pour s’attendre à des «rechargements par push de code à chaud» est définitivement une mauvaise façon de procéder.

Meteor fournit une surveillance des fichiers en mode développement. Il recomstack l’intégralité de votre application et actualise la page de votre navigateur. Toutefois, cette fonctionnalité est conçue pour le confort du développeur et non pour l’utilisation au moment de l’exécution par votre application. En fait, la surveillance de fichier n’est même pas livrée lors du déploiement en production.

Mais voici un moyen de mettre en œuvre votre cas d’utilisation. Cela nécessiterait une compréhension plus profonde de ce que Meteor fait en coulisse pour vous.

Tout d’abord, vous devez comprendre que Meteor comstack vos modèles (modèles Spacebars) sur son propre JS DSL (HTMLJS) au moment de la construction. Des choses similaires se produisent dans chaque modèle basé sur une structure: vous les comstackz au moment de l’exécution ou de la construction. Meteor le fait en construction pour rendre les choses plus efficaces. Vous pouvez en apprendre plus à ce sujet dans Meteor Manual, chapitre Blaze ;

Le point essentiel est le suivant: si vous avez un modèle

  

.. il serait compilé à quelque chose comme ça:

 Template.__define__("bla", (function() { var view = this; return [ "Hello ", Blaze.View(function() { return Spacebars.mustache(view.lookup("name")); }), "!" ]; })); 

Je l’ai? Génial.

Maintenant, vous devez obtenir ce type de modèles auprès des utilisateurs et les comstackr dans ce DSL basé sur JS. Vous pouvez le faire avec le package spacebars-comstackr intégré.

 // on the server! Meteor.startup(function () { // imagine your template is actually coming from database or where you store your user-generated content var template = "

Hello {{name}}!

"; console.log(SpacebarsComstackr.comstack(template)); });

Si vous ajoutez spacebars-comstackr à votre application et que vous l’exécutez, cela imprimera un beau modèle compilé. Voici une démonstration en direct: http://meteorpad.com/pad/4tHHAvjpcBQwLuN4K

Parfait, envoyez maintenant ce modèle compilé au client sous la forme de votre choix (via une firebase database, une méthode Meteor ou une API REST, cela n’a pas d’importance, il suffit d’envoyer la chaîne au client).

Une fois qu’il est là, vous pouvez le joindre où vous voulez!

L’une des méthodes les plus simples consiste à enregistrer le modèle en code JS:

 // on the client! pretend you got the comstackdTemplate ssortingng from the server var comstackdTemplate = '(function() { var view = this; return HTML.P("Hello ", Blaze.View(function() {return Spacebars.mustache(view.lookup("name")); }), "!");})'; Template.__define__("myAwesomeTemplate", eval(comstackdTemplate)); 

Et puis utilisez des choses comme UI.dynamic pour le rendre sur la page. Vous pouvez voir une démonstration en direct ici: http://meteorpad.com/pad/LQJuoooBQjSdJenfW

Seriez-vous d’accord pour écrire un système cms personnalisé? Si tel est le cas, il existe déjà quelques systèmes cms dans meteor.

J’ai trouvé facile d’étendre une version antérieure de http://azimuthc.ms/

Ils avaient essentiellement vos besoins en tête quand ils ont écrit ceci.

(Je ne suis pas connecté à ce projet)