Less.js: パーサーのプログラムによる使用

作成日 2016年01月17日  ·  5コメント  ·  ソース: less/less.js

やあ!
私は学士論文のために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によって作成された、使用済みのインポートを含むパラメーターを取得する必要があるということです。プロジェクト、そのソースファイルを知っている場合は?

needs info

最も参考になるコメント

君たちありがとう。 問題は解決しました:)誰かが同じハードルに直面してこの問題に遭遇した場合に備えて、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));
});

全てのコメント5件

これはあなたを助けますか? 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);
})

このページは役に立ちましたか?
0 / 5 - 0 評価