Less.js: Utilisation programmatique de l'analyseur

Créé le 17 janv. 2016  ·  5Commentaires  ·  Source: less/less.js

Salut!
Je travaille sur un convertisseur less2sass pour ma thèse de licence, plus tard, il devrait également devenir un convertisseur sass2less. Je suis à la recherche d'une méthode pour sortir l'AST d'un projet moins. J'ai testé le code suivant :

var parser = new(less.Parser)({}, {contents: {}}, {});
var contents = ".foo {\
  background: #900;\
}\
<strong i="7">@import</strong> \"import/this-is-valid.less\";";
parser.parse(contents, function (e, tree) {
   console.log(JSON.stringify(tree, null, 2));
});

Je récupère l'AST, sauf si je n'essaye pas d'importer un autre fichier en moins. Ce que j'ai compris du code, c'est que l'analyseur doit obtenir un paramètre avec les importations utilisées, qui sont créées par l'importManager, qui a besoin du contexte en tant que paramètre, etc. Pourrais-je avoir un indice sur la façon d'obtenir l'AST d'un moins projet, si je connais son fichier source ?

needs info

Commentaire le plus utile

Merci les gars. Problème résolu :) Je mets le code réel ici, qui fonctionne pour obtenir l'AST, au cas où quelqu'un serait confronté au même obstacle et rencontrerait ce problème.

var less = require('less')
  , fs = require('fs')
  , path = require('path');

var src = './test_import.less'; //some less source file
var result = less.parse(fs.readFileSync(src).toString(), {
  filename: path.resolve(src)
}, function(e, tree) {
  console.log(JSON.stringify(tree, null, 2));
});

Tous les 5 commentaires

Cela vous aiderait-il ? https://github.com/matthew-dean/postcss-less/blob/master/lib/render.js

J'ai pu obtenir l'arbre AST évalué de cette façon, et je pense que l'arbre évalué contient une référence à l'arbre non évalué.

Je récupère l'AST, sauf si je n'essaye pas d'importer un autre fichier en moins.

Cela ne devrait pas faire de différence pour les importations, assurez-vous simplement de ne pas manquer :

puis définissez le champ de nom de fichier sur les options pour qu'il soit le nom de fichier du fichier principal. moins s'occupera de tout le traitement des importations.

dans l' utilisation programmatique (plus de détails dans https://github.com/less/less.js/issues/2342#issuecomment-67596931).

que l'analyseur doit obtenir un paramètre avec les importations utilisées, qui sont créées par l'importManager, qui a besoin du contexte comme paramètre, etc.

Pas vraiment. importManager fait (à peu près) partie de l'analyseur et toutes les importations sont (normalement) gérées dans l'analyseur lui-même.

Merci les gars. Problème résolu :) Je mets le code réel ici, qui fonctionne pour obtenir l'AST, au cas où quelqu'un serait confronté au même obstacle et rencontrerait ce problème.

var less = require('less')
  , fs = require('fs')
  , path = require('path');

var src = './test_import.less'; //some less source file
var result = less.parse(fs.readFileSync(src).toString(), {
  filename: path.resolve(src)
}, function(e, tree) {
  console.log(JSON.stringify(tree, null, 2));
});

Est-il possible que la fonction d'analyse offre une option qui ignore l'importation ? Dans mon cas, j'ai des règles spéciales pour les chemins d'importation, de sorte que le processus d'importation interne de less.js ne serait pas adapté. Pourrions-nous simplement analyser la chaîne en AST sans aucune évaluation ?

Je viens de lire le code source et j'ai trouvé que je pouvais passer { processImports: false } pour désactiver le processus d'importation, cela fonctionne pour moi :)

less.parse(content, { processImports: false }, (e, tree) => {
  if (e) { return console.error(e) };
  return console.log(tree);
})

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

papandreou picture papandreou  ·  7Commentaires

moshemo picture moshemo  ·  7Commentaires

pknepper picture pknepper  ·  3Commentaires

rejas picture rejas  ·  6Commentaires

briandipalma picture briandipalma  ·  6Commentaires