2015-08-27 1 views
-1

Mon objectif de nœud est de changer la couleur de laModifier certains contenus d'un fichier existant sans supprimer les autres contenus dans le fichier dans

.made-easy-theme{ 
      color:black 
     } 

dans un fichier css avec une autre couleur. mais quand je change la couleur à l'aide fs.writeFile il efface tous les autres contenus dans le fichier css et remplacez uniquement les

.made-easy-theme{ 
      color:black 
     } 

Avant de changer la couleur du fichier css ci-dessous comprend le contenu,

@charset "utf-8"; 
     @import url(http://fonts.googleapis.com/css?family=Lato:300,400,700); 
     @import url(http://weloveiconfonts.com/api/?family=entypo); 
     /* entypo */ 
     [class*="entypo-"]:before { 
      font-family: 'entypo', sans-serif; 
     } 
     .made-easy-theme{ 
      color:black 
     } 

     * { 
      box-sizing: border-box; 
     } 

     .toggler { 
      color: #A1A1A4; 
      font-size: 1.25em; 
      margin-left: 8px; 
      text-align: center; 
      cursor: pointer; 
     } 
     .toggler.active { 
      color: #000; 
     } 

     .cardss { 
      list-style: none; 
      padding-right: 10px; 
      padding-left: 10px; 
      text-align: left; 
      -webkit-overflow-scrolling: touch; 
      max-width: 100%; 
      -webkit-backface-visibility: hidden; 
     } 

mais après un changement de couleur, il ne comprend que,

.made-easy-theme{color:hsl(0, 22%, 51%)} 

hsl (0, 22%, 51%) (couleur que je reçoive à partir du côté client). js Mon qui inclut le code pour modifier le fichier css est ci-dessous,

var main = 'temp/' + userId + '/templates/' + appId + '/css/main.css'; 
var color = req.body.color; 
function replaceThemecolor(color) { 

     fs.readFile(main, 'utf-8', 
      function (err, data) { 
       var searchStr = ".made-easy-theme{color:black}"; 

        console.log(searchStr); 

        var result = searchStr.replace(new RegExp('black', ''), color); 
        fs.writeFile(main, result, 'utf-8', function (err) { 
         console.log("kk"); 
         console.log(color); 
         console.log(result); 
         if (err) return console.log(err); 
        }); 
      }); 

    } 

Je pense que la faute est avec la méthode fs.writeFile. Je ne sais pas comment obtenir le bon résultat.

Répondre

1

Il y a plusieurs problèmes avec votre code actuel:

  1. Vous lisez le contenu du fichier, mais ne fait rien avec elle. Vous effectuez simplement un remplacement sur une chaîne statique, de sorte que le contenu du fichier d'origine est ignoré.

  2. Votre expression régulière recherche uniquement la couleur noire qui correspond à celle du fichier et ne correspond pas à celle que vous avez modifiée.

Je pense que vous voulez quelque chose comme ça qui fait une regex pour correspondre juste à la couleur de cette règle. Vous pouvez rendre l'expression rationnelle aussi compliquée que nécessaire. Ce que j'ai montré ici est assez flexible pour supporter d'autres styles dans la règle .made-easy-theme. Il ne retiendra que la règle color pour changer. Il suppose que la couleur est spécifiée par un nom tel que "noir".

var main = 'temp/' + userId + '/templates/' + appId + '/css/main.css'; 
var color = req.body.color; 

function replaceThemecolor(color) { 
    fs.readFile(main, 'utf-8', function (err, data) { 
     var regex = /(\.made-easy-theme\s*{[^}]*color\s*:\s*)([^\n;}]+)([\s*;}])/; 
     var result = data.replace(regex, "$1" + color + "$3"); 
     console.log(result); 
     console.log(color); 
     fs.writeFile(main, result, 'utf-8', function (err) { 
      if (err) return console.log(err); 
     }); 
    }); 
} 

Voici une démonstration de travail sur un bloc de texte sans les opérations de fichiers réels: http://jsfiddle.net/jfriend00/e6923rqe/

+0

Je l'ai fait et je travaillais, mais certains conflits se produit. Lorsque vous essayez de remplacer la couleur deux fois, il ne va pas écraser, le résultat est comme.made-easy-theme { couleur: hsl (0, 44%, 45%) (0, 26%, 55%); } et quand j'essaie de remplacer d'autres variables comme font-family, ça ne marchera pas du tout – shamila

+0

@adithya - il est dit dans ma réponse que cette solution ne fonctionne que pour les couleurs spécifiées par un nom tel que "noir". Vous n'avez pas demandé plus que cela. La regex devrait être changée si vous voulez que les couleurs 'hsl (...)' ou 'rgb (...)' fonctionnent. Avec la bonne regex, cela fonctionnera aussi pour font-family. Si vous pouvez promettre que la valeur de couleur est terminée avec un ';', il est beaucoup plus facile de faire l'expression rationnelle. – jfriend00

+0

pouvez-vous au moins me donner un lien qui m'aide à changer mon regex en fonction de mes besoins – shamila

1

Regardons à cette ligne:

var result = searchStr.replace(new RegExp('black', ''), color); 

Il est de réduire la portée de la variable result pour avoir seulement le remplacement du modèle au seinsearchStr qui est initialement déclaré:

var searchStr = ".made-easy-theme{color:black}"; 

Donc, dans fs.writeFile, result est ensuite écrit dans le fichier.