Less.js: Uso programático del analizador

Creado en 17 ene. 2016  ·  5Comentarios  ·  Fuente: less/less.js

¡Hola!
Estoy trabajando en un convertidor de less2sass para mi tesis de licenciatura, más tarde también debería convertirse en un convertidor de sass2less. Estoy buscando un método para sacar el AST de un proyecto menor. He estado experimentando con el siguiente código:

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));
});

Recupero el AST, a menos que no intente importar otro archivo menos. Lo que entendí del código es que el analizador debería obtener un parámetro con las importaciones usadas, que son creadas por importManager, que necesita el contexto como parámetro, etc. ¿Podría obtener alguna pista sobre cómo obtener el AST de un proyecto, si conozco su archivo fuente?

needs info

Comentario más útil

Gracias chicos. Problema resuelto :) Estoy poniendo el código real aquí, que funciona para obtener el AST, en caso de que alguien se enfrente al mismo obstáculo y se encuentre con este problema.

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));
});

Todos 5 comentarios

¿Te ayudaría esto? https://github.com/matthew-dean/postcss-less/blob/master/lib/render.js

Pude obtener el árbol AST evaluado de esta manera, y creo que el árbol evaluado contiene una referencia al árbol no evaluado.

Recupero el AST, a menos que no intente importar otro archivo menos.

No debería haber ninguna diferencia para las importaciones, solo asegúrese de no perderse:

y luego configure el campo de nombre de archivo en opciones para que sea el nombre de archivo del archivo principal. menos se encargará de todo el procesamiento de las importaciones.

en uso programático (más detalles en https://github.com/less/less.js/issues/2342#issuecomment-67596931).

que el analizador debe obtener un parámetro con las importaciones utilizadas, que son creadas por el importManager, que necesita el contexto como parámetro, etc.

Realmente no. importManager es (aproximadamente) una parte del analizador y todas las importaciones (normalmente) se manejan dentro del analizador mismo.

Gracias chicos. Problema resuelto :) Estoy poniendo el código real aquí, que funciona para obtener el AST, en caso de que alguien se enfrente al mismo obstáculo y se encuentre con este problema.

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));
});

¿Es posible que la función de análisis pueda ofrecer una opción que ignore la importación? En mi caso, tengo algunas reglas especiales para las rutas de importación, por lo que el proceso de importación interno de less.js no se adaptaría. ¿Podríamos simplemente analizar la cadena a AST sin ninguna evaluación?

Acabo de leer el código fuente y descubrí que podía pasar { processImports: false } para deshabilitar el proceso de importación, me funciona :)

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

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

BrianMulhall picture BrianMulhall  ·  4Comentarios

awebdev picture awebdev  ·  4Comentarios

renoth picture renoth  ·  6Comentarios

briandipalma picture briandipalma  ·  6Comentarios

Oskariok picture Oskariok  ·  6Comentarios