やあ!
私は学士論文のためにless2sassコンバーターに取り組んでいますが、後でそれもsass2lessコンバーターになるはずです。 私はより少ないプロジェクトからASTを取り除く方法を探しています。 私は次のコードを試してきました:
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));
});
別の少ないファイルをインポートしようとしない限り、ASTを取り戻します。 コードから私が理解したのは、パーサーは、パラメーターとしてコンテキストを必要とするimportManagerによって作成された、使用済みのインポートを含むパラメーターを取得する必要があるということです。プロジェクト、そのソースファイルを知っている場合は?
これはあなたを助けますか? https://github.com/matthew-dean/postcss-less/blob/master/lib/render.js
この方法で評価されたASTツリーを取得することができました。評価されたツリーには、評価されていないツリーへの参照が含まれていると思います。
別の少ないファイルをインポートしようとしない限り、ASTを取り戻します。
インポートの場合も違いはありません。見逃さないように注意してください。
次に、オプションのファイル名フィールドをメインファイルのファイル名に設定します。 lessはインポートのすべての処理を処理します。
programmatic-usageで(詳細はhttps://github.com/less/less.js/issues/2342#issuecomment-67596931を参照)。
パーサーは、importManagerによって作成された、使用済みのインポートを含むパラメーターを取得する必要があります。これには、パラメーターとしてコンテキストが必要です。
あまり。 importManagerは(大まかに)パーサーの一部であり、すべてのインポートは(通常)パーサー自体の中で処理されます。
君たちありがとう。 問題は解決しました:)誰かが同じハードルに直面してこの問題に遭遇した場合に備えて、ASTを取得するために機能する実際のコードをここに配置します。
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));
});
解析関数が、インポレーションを無視するオプションを提供する可能性はありますか? 私の場合、インポートパスに特別なルールがあるため、less.jsの内部インポートプロセスは適用されません。 評価せずに文字列をASTに解析することはできますか?
ソースコードを読んだところ、 { processImports: false }
を渡してインポートプロセスを無効にできることがわかりました。これでうまくいきます:)
less.parse(content, { processImports: false }, (e, tree) => {
if (e) { return console.error(e) };
return console.log(tree);
})
最も参考になるコメント
君たちありがとう。 問題は解決しました:)誰かが同じハードルに直面してこの問題に遭遇した場合に備えて、ASTを取得するために機能する実際のコードをここに配置します。