Less.js: Penggunaan terprogram dari parser

Dibuat pada 17 Jan 2016  ·  5Komentar  ·  Sumber: less/less.js

Hai, yang di sana!
Saya sedang mengerjakan konverter less2sass untuk tesis sarjana saya, nanti juga harus menjadi konverter sass2less. Saya mencari metode untuk mengeluarkan AST dari proyek yang lebih sedikit. Saya telah bereksperimen dengan kode berikut:

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

Saya mendapatkan AST kembali, kecuali saya tidak mencoba mengimpor file lain yang lebih sedikit. Apa yang saya pahami dari kodenya adalah, bahwa parser harus mendapatkan parameter dengan impor yang digunakan, yang dibuat oleh importManager, yang membutuhkan konteks sebagai parameter, dll. Bisakah saya mendapatkan petunjuk bagaimana mendapatkan AST dari yang kurang proyek, jika saya tahu file sumbernya?

needs info

Komentar yang paling membantu

Terima kasih kawan. Masalah terpecahkan :) Saya meletakkan kode aktual di sini, yang berfungsi untuk mendapatkan AST, jika seseorang akan menghadapi rintangan yang sama dan menemukan masalah ini.

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

Semua 5 komentar

Apakah ini akan membantu Anda? https://github.com/matthew-dean/postcss-less/blob/master/lib/render.js

Saya bisa mendapatkan pohon AST yang dievaluasi dengan cara ini, dan saya yakin pohon yang dievaluasi berisi referensi ke pohon yang tidak dievaluasi.

Saya mendapatkan AST kembali, kecuali saya tidak mencoba mengimpor file lain yang lebih sedikit.

Seharusnya tidak ada perbedaan untuk impor, pastikan Anda tidak ketinggalan:

dan kemudian atur bidang nama file pada opsi menjadi nama file dari file utama. less akan menangani semua pemrosesan impor.

dalam penggunaan terprogram (detail lebih lanjut di https://github.com/less/less.js/issues/2342#issuecomment-67596931).

bahwa parser harus mendapatkan parameter dengan impor yang digunakan, yang dibuat oleh importManager, yang membutuhkan konteks sebagai parameter, dll.

Tidak juga. importManager (kira-kira) adalah bagian dari parser dan semua impor (biasanya) ditangani di dalam parser itu sendiri.

Terima kasih kawan. Masalah terpecahkan :) Saya meletakkan kode aktual di sini, yang berfungsi untuk mendapatkan AST, jika seseorang akan menghadapi rintangan yang sama dan menemukan masalah ini.

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

Apakah mungkin fungsi parse dapat menawarkan opsi yang mengabaikan impor? Dalam kasus saya, saya memiliki beberapa aturan khusus untuk jalur impor, sehingga proses impor internal less.js tidak akan disesuaikan. Bisakah kita mengurai string ke AST tanpa evaluasi apa pun?

Saya baru saja membaca kode sumber dan saya menemukan bahwa saya dapat melewati { processImports: false } untuk menonaktifkan proses impor, ini berfungsi untuk saya :)

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

Apakah halaman ini membantu?
0 / 5 - 0 peringkat