20 votes

Configuration de la compilation automatique pour Stylus

J'ai installé node.js/stylus/nib sur mon mac et je peux compiler manuellement .styl à l'adresse .css sur la ligne de commande. Je sais aussi qu'il y a ceci stylus.middleware() qui revient sans cesse lorsque je cherche à savoir comment configurer l'auto-compilation lorsque l'application .styl Cependant, je n'ai aucune idée de la manière dont je suis censé le mettre en œuvre (je n'ai jamais utilisé node.js auparavant).

Dans quel fichier dois-je placer ce code ?

Comment lancer ce code pour qu'il soit toujours exécuté ?

Je pense qu'il me manque quelques éléments du côté du nœud pour pouvoir mettre cela en place.

27voto

k3liutZu Points 701

A partir de la ligne de commande, vous pouvez utiliser :

stylus -w folder/

ou pour un autre exemple :

stylus -w styl/*.styl -o css/

Il surveillera les changements et compilera tous les fichiers *.styl qui se trouvent dans ce dossier.

9voto

TheHippo Points 11900

Si vous avez installé stylus en tant que paquet global ( npm install stylus -g ) vous avez un stylet binaire sur votre système.

$ stylus -h
  Usage: stylus [options] [command] [< in [> out]]
                [file|dir ...]

  Commands:

    help [<type>:]<prop> Opens help info at MDC for <prop> in
                         your default browser. Optionally
                         searches other resources of <type>:
                         safari opera w3c ms caniuse quirksmode

  Options:

    -i, --interactive       Start interactive REPL
    -u, --use <path>        Utilize the stylus plugin at <path>
    -U, --inline            Utilize image inlining via data uri support
    -w, --watch             Watch file(s) for changes and re-compile
    -o, --out <dir>         Output to <dir> when passing files
    -C, --css <src> [dest]  Convert css input to stylus
    -I, --include <path>    Add <path> to lookup paths
    -c, --compress          Compress css output
    -d, --compare           Display input along with output
    -f, --firebug           Emits debug infos in the generated css that
                            can be used by the FireStylus Firebug plugin
    -l, --line-numbers      Emits comments in the generated css
                            indicating the corresponding stylus line
    --include-css           Include regular css on @import
    -V, --version           Display the version of stylus
    -h, --help              Display help information

6voto

Benxamin Points 1491

Ceci couvre brièvement les bases de Node.

0. Code d'organisation. Il est d'usage de placer le code principal de l'application Node dans un fichier appelé app.js dans le projet Root.

Dans app.js, les choses sont regroupées en deux parties générales :

  1. synchrone initialisations : modules requis, répertoires de construction, lecture des configurations, connexions à la base de données, etc. Des choses qui bloquent, et qui doivent donc exister ou mourir rapidement.
  2. asynchrone tâches de l'application : démarrage du serveur, processus d'arrière-plan, compilation automatique de CSS et JS, routage, entrées/sorties, etc. Choses qui se trouvent dans la boucle d'événements.

1. Compilez Stylus en CSS lorsque vous créez l'application. Nous devons exiger que les stylet module. En général, cela se fait en haut de l'app.js pour garder les dépendances ensemble.

var stylus = require('stylus');

La première fois que Node exécute app.js vous avez besoin de ce module JS pour construire votre CSS. Voici l'idée de base :

stylus.render(stylus-code-string, function(err, css) {
  if (err) throw err;
  console.log(css);
});

Voici le texte officiel Stylus Javascript API .

Pour utiliser la puissance de Node, vous devez lire un fichier stylus à l'aide de la fonction module fs dans un tampon, puis le convertir en chaîne de caractères, et enfin le transmettre à stylus.render() . Ensuite, envoyez le résultat dans un fichier de destination. Comme cette opération fait partie du processus de construction, elle peut être synchrone. Mais ce n'est pas vraiment votre question...

2. Compilation automatique de CSS avec Stylus en arrière-plan.

Cette fonction crée un processus_enfant qui surveille un seul .styl et compile le fichier .styl dans un fichier .css fichier. Vous n'avez pas besoin d'un module pour cela, il suffit d'installer l'exécutable de stylus pour qu'il s'exécute sur la ligne de commande. (Vous l'avez déjà fait). Cet exemple a été réalisé avec la version de stylus 0.5.0 . De même, les chemins d'accès aux dossiers que vous utilisez (ex. build/styles y styles ) doivent exister.

function watchStyles(sourcefile, destinationfolder) {
  var Stylus = child_process.spawn('stylus', ['--sourcemap', '-w', sourcefile, '--out', destinationfolder]);

  Stylus.stdout.pipe(process.stdout); // notifications: watching, compiled, generated.
  Stylus.stderr.pipe(process.stdout); // warnings: ParseError.

  Stylus.on('error', function(err) {
    console.log("Stylus process("+Stylus.pid+") error: "+err);
    console.log(err);
  });

  // Report unclean exit.
  Stylus.on('close', function (code) {
    if (code !== 0) {
      console.log("Stylus process("+Stylus.pid+") exited with code " + code);
    }
  });
}

Ensuite, vous devez appeler cette fonction quelque temps après le démarrage de votre application. Passez votre master .styl comme source. Puis le répertoire de destination où vous voulez que votre CSS aille.

// check that you passed '-w' parameter
if (process.argv[2] && (process.argv[2] == "-w")) {
  watchStyles('styles/app.styl', 'build/styles');
}

Lancez l'application en exécutant : $ node app.js -w

Il permet d'organiser votre .styl sous un même dossier app.styl afin que le contenu de votre app.styl ressemble à ceci :

@import 'layout'
@import 'header'
@import 'main'
@import 'footer'
@import 'modal'
@import 'overrides'

2voto

Jason Lydon Points 1423

** J'ai atterri ici hier et je n'ai pas trouvé la bonne réponse. Ce suivi s'adresse donc à tous ceux qui suivent le même chemin que moi... **

J'ai également eu un problème pour configurer la ligne de commande de stylus. Je n'arrêtais pas d'essayer d'installer stylus globalement
$ npm install -g stylus
et j'obtenais des erreurs. Je l'ai fait fonctionner dans un projet avec grunt-contrib-stylus mais en ligne de commande, je n'arrivais pas à faire fonctionner quoi que ce soit.
Même $stylus --version n'a rien rendu. J'ai essayé de mettre à jour npm et il s'est cassé npm J'ai donc fini par réinstaller node pour réinstaller npm . J'ai ensuite pu procéder à une nouvelle installation de $ sudo npm install -g stylus et pourrait obtenir le --version .
J'ai également dû réinstaller grunt et tout le reste que j'avais installé globalement via npm ...

2voto

muratgozel Points 549

Tout d'abord, installez le stylet localement npm install stylus --save-dev si vous ne l'avez pas encore fait.

Créez un script de démarrage qui construit votre feuille de style et la reconstruit chaque fois qu'un changement est détecté dans le fichier principal de votre stylet :

startup.js

var fs = require('fs')
var stylus = require('stylus')

// Define input filename and output filename
var styleInput = __dirname + '/dev/stylus/main.styl'
var styleOutputFilename = 'main.css'
var styleOutput = __dirname + '/static/' + styleOutputFilename
var stylusPaths = [__dirname + '/dev/stylus', __dirname + '/dev/stylus/libs']

// Build stylesheet on first execute
buildStyles(styleInput, styleOutput, stylusPaths)

// Watch stylus file for changes.
fs.watch(styleInput, function(eventType, filename) {
  if (filename) {
    buildStyles(styleInput, styleOutput, stylusPaths)
  } else {
    console.log('no filename found. probably platform doesnt support it.');
  }
});

function buildStyles(input, output, paths) {
  stylus(fs.readFileSync(input, 'utf-8'))
    .set('paths', paths)
    .set('include css', true)
    .set('watch', true)
    .render(function(err, css) {
      if (err) throw err;

      fs.writeFile(output, css, (err) => {
        if (err) throw err;

        console.log('

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X