Less.js: data-uri関数は、のファむルぞのパスを含む文字列ではなく、data-uri呌び出しのパスを䜿甚したす。

䜜成日 2015幎07月08日  Â·  37コメント  Â·  ゜ヌス: less/less.js

https://github.com/less/less.js/issues/2541からですが、私はこれをプロゞェクトで芋たした

// mixins.less
.background(@image) {
    background-image: data-uri(@image);
}
// app/content/button.less
button {
  .background("images/btn.jpg");
}

画像はapp/content/images/btn.jpgからフェッチされるず思いたすが、 images/btn.jpgからフェッチされたす。

これが重倧な倉曎メゞャヌアップを保蚌するなのか、バグ修正なのかに぀いおのフィヌドバックを歓迎したす。

最も参考になるコメント

うヌん...

OK。 次に、 resolve-url(url, [base])関数がありたす-オプションのbase ; デフォルトでは、関数呌び出しが曞き蟌たれる/宣蚀される/定矩されるファむルのディレクトリになりたす。 次に、䜜成者がパスを明瀺的にプルしたい堎合に備えお、 this.fileInfoをプルしおパスを取埗するdeclared-dir()関数を甚意したす。 別のファむルからパスを取埗したい。 たたは、URL解決に関係のない他の機胜の䞀郚ずしおこれを䜿甚する必芁がありたす。

぀たり、完党な圢匏の呌び出し暗黙のベヌスなしは次のようになりたす。

resolve-url("../foo", declared-dir())

...そしおただやるこずず同等だろう

resolve-url("../foo")

...これは怠惰なものず同等の熱心なものです

url("../foo")

そのように「自動的に」泚入された倉数は必芁ありたせん。 これは、玔粋にプラグむン関数のセットずしお実装できるず思いたす。 そしお、必芁な唯䞀のコアメカニズムは、URLを「解決枈み」ずしおマヌクする方法です。これにより、デフォルトのリゟルバヌロゞックがresolve-url関数から出力されるURLで実行されないようにブロックできたす。

セマンティクスは、もちろんドキュメントで明確にする必芁がありたす。 そしお、そのドキュメントは、 urlをresolve-urlず明瀺的に比范しお、熱心で怠惰な評䟡/解決を説明するこずができたす。

党おのコメント37件

これが重倧な倉曎メゞャヌアップを保蚌するなのか、バグ修正なのかに぀いおのフィヌドバックを歓迎したす。

参考非垞に簡単な方法で、䞋䜍互換性を損なうこずなく、これを゚レガントに実装できたす。

珟圚、 data-uri()関数は、ファむルパスずしお文字列を保持するQuotedツリヌノヌドを受け入れ、関数呌び出しを保持するファむルの堎所に察するURLずしお内郚的に解決したす。 data-uri関数をオヌバヌロヌドしお、実際のURLを保持するUrlツリヌノヌドを受け入れるこずもできたす。 このようにしお、URLはurl() CSS関数が呌び出される堎所に察しお正芏化され、 data-uri() Less関数の内郚で正芏化されなくなりたす。

䟋えば

// app/content/button.less
button {
  .background(url("images/btn.jpg"));
}

@rjgotten

私にずっおは、修正ずいうよりは回避策のように芋えたす。 さらに反埩するず、 urlをミックスむンに移動するこずで冗長性を回避しようずしたすが、問題が再び発生したす。 もう1぀の問題は、この問題が発生した元のナヌスケヌス2541を䜿甚するず、次のように䜿甚されるこずが倚いこずです。

// mixins.less
.background(@image) {
    background-image: data-uri("@{image}.jpg");
}
// app/content/button.less
button {
  .background("images/btn");
}

䟋ずしお、フォントず面のミックスむンの堎合、通垞は耇数のwoff 、 ttf 、 eot 、 eot?#iefixなどの拡匵子が同じファむル名に远加されたす。 。 そしおこのように、以前のurlも䞍可胜です。

@ seven-phases-max

それなら、適切な解決期間があるずは思いたせん。 盞察URLが解決されるコンテキストを決定する䜕らかの方法が必芁です。 あなたはに入る文字列倀定矩されたファむルのファむル情報から、そのコンテキストを取るのいずれかdata-uri()機胜を、たたはあなたが経由しお、カットオフ点をより明確にするurl()関数ずUrlツリヌノヌド。

パス倉数の眮換をサポヌトする堎合は、パスのさたざたな郚分を正芏化する必芁がある方法を理解する必芁があるため、すぐに泚意が必芁になりたす。

たずえば、次のようなものをどのように正芏化したすか。

// mixins.less
.background(@image) {
    background-image: data-uri("../../@{image}.jpg");
}
// app/content/button.less
button {
  .background("../images/btn");
}

盞察URL解決ず、これら2぀のパスのトヌクン眮換䞻導の組み合わせをどのように組み合わせたすか

代替トヌクンがurl()たたはdata-uri()入る最終的なURL倀の先頭にある堎合、1぀のオプションは、代替トヌクンの代わりに䜿甚される文字列を定矩するファむルに察しおのみ解決するこずだず思いたす。

別の解決策は、パスを結合したり、ファむル拡匵子を远加/削陀/線集したりするためのパス凊理関数をいく぀か導入し unit()関数がディメンションに察しおどのように機胜するかず同様です、物事をより明確にするこずです。

䟋えば

// mixins.less
.background(@image) {
    background-image: data-uri(extension(<strong i="21">@image</strong>, "jpg"));
}
// app/content/button.less
button {
  .background(url("./images/btn"));
}

最初の䟋では、特別な正芏化は必芁ありたせん。 "../../@{image}.jpg"は、蚘述されたずおりに"../../../images/btn.jpg"展開されたすパスを凊理するのに最倧data-uriになりたす。
そしお2番目の䟋はただ...関数をスタックしお関数を回避し、䞋䜍互換性を回避したす...正確には䜕ですか 他のファむルで定矩されたミックスむンを呌び出すずきの_間違った_ファむルパス

結局のずころ、 .background(url("images/btn.jpg"));で「期埅どおり」に_only_動䜜するこずになっおいるずしたら、たったく倉曎を加えずに.background(data-uri("images/btn.jpg"));盎接曞き蟌むのずどう違うのでしょうか。 :)


蚀い換えれば、これを修正する堎合は、どんなに壊れおもdata-uriで固定する必芁があるずいうこずです。 正盎なずころ、私はより良い戊略が䜕であるかわかりたせんa。これに぀いおのより倚くのレポヌト/リク゚ストを埅っおからそれらが十分にある堎合倉曎するか、b。起こり埗る砎壊的な圱響を最小限に抑えるためにそれを早く倉曎したす。



蚀い換えるず、 urlずdata-uriが最初は亀換可胜ずしお蚭蚈されたず仮定したす぀たり、 data-uriはurl特別なバヌゞョンですそしおCSS urlコンパむルされたす。最終的にdata-uriが「このように」動䜜するのに察しそのようなオプションを䜿甚、正確にulrが「このように」動䜜する理由を説明するのは非垞に困難です。このようなオプション、および特定の動䜜を取埗するためにあなたが必芁がありたすdata-uri(url()) 」に限定コンボ、 data-uriミックスむン内郚ずをurl _out_ずそれの--relative-urls: on "<-Bhrrrr ... :)

私にずっおは、修正ずいうよりは回避策のように芋えたす。 さらに反埩するず、URLをミックスむンに移動するこずで冗長性を回避しようずしたすが、問題が再び発生したす。

ええ、私は同意したす。

私はゆっくりず、v3リリヌスのために少し努力を枛らし、これを修正するように努力しおいたす。

考えられるすべおのファむルパスを調べお、1぀ず぀詊しおみようず考えおいたしたが、異なる堎所に耇数のファむルがある堎合は少し厄介です...これを氞久に完党に修正するこずは䞍可胜だず思いたすが、少なくずも通垞のケヌスを修正できたす。

おそらくresolve()関数は、解決されたURLを関数に枡すのに圹立぀可胜性がありたすただし、完党なパスが機胜しない堎合は、これが修正されたずきに完党なパスが機胜したす...

すぐに考えを曞き留めおすみたせん。

これは単なる簡単なメモですが、倉数補間を䜿甚したむンポヌトでも同じ問題が発生したす。

倉数補間を䜿甚しおむンポヌトしたす。

それは面癜くお䞍安なこずです。
それは実際にサポヌトされおいるナヌスケヌスですか、それずも幞せな偶然ですか

@rjgottenサポヌトされおいたすが、サポヌトは倚少制限されおいたす。 410で远跡されたした

これは機胜したす

<strong i="8">@variable</strong>: "path.less";
<strong i="9">@import</strong> "@{variable}";

これはしたせん

.mixin(@variable) {
  <strong i="13">@import</strong> "@{variable}";
}

線集リンクが機胜するように倉曎されたした。

ミックスむンで倉数@importをサポヌトしたいかどうかわかりたせん。
倉数のむンポヌト党䜓は少し魔法のようで、盎感に反するコヌドを䜜成する可胜性がありたす。

回避策に぀いおの倚くの議論、倚分実際の問題を修正するだけですか data-uriは凊理䞭のファむルに関連しおいる必芁があるこずは明らかではありたせんか。

珟圚、別のパスから_a reference_をむンポヌトするファむルがありたすが、それでもdata-uriに぀いお文句を蚀いたす。 少なくずもそれはバグであるに違いありたせんか ぀たり、参照によっおむンポヌトする堎合、珟圚のファむルを基準にしおパスを曞き換えようずしないでください。

@Ciantic

぀たり、参照によっおむンポヌトする堎合、珟圚のファむルを基準にしおパスを曞き換えようずしないでください。

正確には䜕に基づいおいたすか reference䜕の関係がありたすか

珟圚、別のパスから参照をむンポヌトするファむルがありたすが、それでもdata-uriに぀いお文句を蚀いたす。

䞊蚘の問題ずは逆のように聞こえたす。 詳现を教えおください。 たずえば、むンポヌト、むンポヌト、およびデヌタファむルのパスなど。

styles.less

.something {
    background: data-uri("some.svg");
}

sub / test.less

<strong i="11">@import</strong> (reference) "../style.less";
.test {
    color: green;
}

これはstyle.lessをコンパむルしたすが、test.lessず比范しおdata-uriを䜿甚しようずするため、test.lessはコンパむルしたせん。

なぜ参照むンポヌトがパスを曞き換えようずするのでしょうか。私の意芋では、参照を䜿甚する堎合は必芁ありたせん。

data-uriはオプションのURL曞き換えルヌルに埓うこずを期埅したす。 もちろん....それがdata-uriで実際に䜕を意味するのかを蚀うのは難しいです。

䞀般に、data-uriは「.lessファむルの呌び出し」に関連しお解決する必芁がありたす。 したがっお、ミックスむンの堎合は、ミックスむンの堎所ではなく、ミックスむンが呌び出された堎所を基準にしお解決する必芁がありたす。 ミックスむンはそれらのステヌトメントを「ミックスむン」しおから解決したす。 だから@lukeapage私はあなたの解釈が正しいず思いたす

// app/content/button.less
button {
  .background("images/btn.jpg");
}

app/content/images/でbtn.jpgを探す必芁がありたす。 そうでない堎合は、ミックスむンがどのように機胜するかではないため、これはバグです。 これは「重倧な倉曎」ではなく、バグ修正だず思いたす。

そうは蚀っおも...次のような解決に問題はないず思いたす。

  1. 発信者に関連しお解決しようずしおいたす。
  2. ミックスむンに関連しお解決しようずしおいたす。

Node.jsは、解決のために耇数のパスを詊行したす。 解決順序が明確に文曞化されおいる限り、期埅を管理できたす。 そしお、そのようにそれを行うこずは、誰かが行動2を行うために圌らの.lessに基づいおいた堎合、それはすべおではないにしおもほずんどすべおの堎合でも機胜するこずを意味したす。

@ matthew-ディヌン
䞀般に、data-uriは「.lessファむルの呌び出し」に関連しお解決する必芁がありたす。 したがっお、ミックスむンの堎合は、ミックスむンの堎所ではなく、ミックスむンが呌び出された堎所を基準にしお解決する必芁がありたす。 ミックスむンはそれらのステヌトメントを「ミックスむン」しおから解決したす。

すべおのナヌスケヌスで䞀般的に正しい方法でそれを機胜させるこずはできたせんでした。

たずえば、パラメヌタ化されたURL、぀たり、眮換トヌクンのみが入力された既知のベヌスフォルダに察しお解決する必芁がある眮換トヌクンを含むURLをどのようにサポヌトしたすか その堎合、呌び出し元のファむルではなく、呌び出し先のファむルに察しお再解決する必芁がありたす。

コヌルサむトでurl()を明瀺的に䜿甚せずに、これを透過的に修正する方法に぀いお少しひらめきがありたした。それをミックスむンコヌルにリファクタリングし、物事を壊したす

リテラルQuotedノヌドが䜜成されるずき、それらのファむル情報を保持したす。 倉数の割り圓お、ミックスむン呌び出しなどを介しおその情報を䌝達したす。呌び出し元ファむルから発生したQuoted倀は、 url()たたはdata-uri()で凊理されるず、その呌び出し元ファむルに察しお解決されたす。 。 ただし、ミックスむンの内郚ロゞックの䞀郚であるQuoted倀は、ミックスむンのロヌカルファむルに察しお解決されたす。

これにより、次のような眮換文字列を䜿甚したシナリオを陀いお、すべおが期埅どおりに機胜し続けたす。

// mixins.less
.background(@image) {
    background-image: data-uri("@{image}.jpg");
}
// app/content/button.less
button {
  .background("images/btn");
}

それらを修正するために匕っ匵るこずができるトリックもありたす。眮換トヌクンに入力するずきに、トヌクンが眮換文字列の最初にある堎合、結果の文字列は、入力されたトヌクンからファむル情報を継承する必芁がありたす。眮換文字列の。

ミックスむン自身の䜜者の意図が、そのようなパスをミックスむンファむルに察しお解決するこずである堎合でも、たずえば"./@{image}.jpg"をパタヌンずしお䜿甚するこずで、その䜜者はそれを機胜させるこずができたす。 それはあなたが望むものである発信者から責任の負担を効果的にシフトしたす。

// _mixins.less
.sprite(@image) {
    background: data-uri("../images/sprites/@{image}.png") no-repeat;
}
// main.less
div {
   .sprite('logo');
}

出力

div {
   background: url(data:image/png;base64,...) no-repeat;
}

うわヌ、これは非垞に叀いものです....この問題が私にも圱響を䞎えおいるので私の2セント。

URL関数にオプションを远加したり、URLを絶察ずしお解決する新しい関数を䜜成したりするのはどうですか。 そうすれば、ミックスむンがどこに蚭定されおいおも、絶察パスで動䜜し、間違いの䜙地はありたせん。

URL関数にオプションを远加したり、URLを絶察ずしお解決する新しい関数を䜜成したりするのはどうですか。 そうすれば、ミックスむンがどこに蚭定されおいおも、絶察パスで動䜜し、間違いの䜙地はありたせん。

ここでの問題は、絶察パスず盞察パスに関するものではありたせんでした。 それは、コヌルサむトに察する盞察的なものず宣蚀サむトに察する盞察的なものに぀いおでした。 党く違う問題。

おそらく問題は進展したしたが、最初のコメントずタむトルは、呌び出されたファむルに関連するパスを解決するdata-uriに関するものであり、別の堎所に配眮されたミックスむンず組み合わせるず、パスが正しく解決されない可胜性がありたす。 たあ、それは私が経隓しおいる問題です。

では、解決策ずしお絶察パスはどこでそれを考慮に入れるのでしょうか

data-uriが絶察パスを受け入れ、架空のabsolute-url関数があるずするず、ミックスむンがどこに配眮されおいおも、次のコヌドは機胜したす。

// mixins.less
.background(@image) {
    background-image: data-uri(@image);
}
// app/content/button.less
button {
  .background(absolute-url("images/btn.jpg"));
}

@ miljan-aleksic「絶察」ずは、 data-uri堎所にあるファむルに関連するこずを意味したすか もしそうなら、「絶察」はおそらく間違った甚語です。

ただし、URLファむル盞察を䜜成するためのURLの機胜ラッパヌのようですが、これは良いアプロヌチです。 たたは、urlぞの远加の匕数。

@ matthew-dean、絶察的にはファむルぞのフルパスを意味したす。䟋 /users/myuser/projects/lessproject/icon.svg 。

urlが、ubicationを知らずに、data-uriロケヌションファむルぞの盞察パスを䜜成する方法がわからないため、あなたのアプロヌチはわかりたせん。

ただし、URLファむル盞察を䜜成するためのURLの機胜ラッパヌのようですが、これは良いアプロヌチです。 たたは、urlぞの远加の匕数。

おかしなこずに; それは私が数幎前に提案したこずずほが同じです。 ;-)

絶察ずは、ファむルぞのフルパスを意味したす䟋/users/myuser/projects/lessproject/icon.svg。

絶察パスでは、 absolute-url関数が呌び出されるファむルの堎所に基づいお、このabsolute-url関数が完党な出力パスに枡される盞察パスを_pre-resolves_するこずを意味しおいるように芋えたす。コンパむルされた出力CSSファむルが移動する堎所を基準にしおいたす。

぀たり、あなたは䞡方ずも同じこずを意味したす。 私もそうだった、圓時。

コンパむルされた出力CSSファむルが移動する堎所を基準にしお、absolute-url関数が呌び出されるファむルの堎所に基づいお完党な出力パスに移動したす。

のように、曞き換えURLたたはルヌトパスは匕き続き適甚されたすが、定矩の堎所に基づいおいたすか これは、 @ lukeapageの元の䟋ずは少し異なるようです。この䟋では、出力に関連するURLに぀いおではなく、_コンパむル䞭の_URLに぀いお説明しおいたした。 䟋 data-uri()堎所。

したがっお、人々が類䌌しおいるが完党に同䞀ではない問題に぀いお投皿しおいるため、この問題を远跡するのは少し難しいです。 ぀たり、盞察的な_source_を倉曎するには、盞察的な_output_を倉曎するのずはかなり異なる゜リュヌションが必芁になる可胜性がありたす。 たたはおそらくそうではありたせん。 パスロゞックに䟝存したす。 ただし、data-uriは出力ずしおパスを生成しないこずを明確にする必芁がありたす。

たぶんresolve()ようなものが必芁ですか わからない、ただ唟を吐くだけなのにurl(resolve(file(), "my/path"))  @ miljan-aleksicがabsolute()意味するずころだず思いたす。぀たり、絶察URLに解決されたす。 ただし、それでも入力が必芁です解決するにfile() 、 file-resolve()ようなこずを実行しお、そのロゞックを1぀の関数で指定できたすが、 resolve()ずfile()を2぀の関数ずしお持぀ず別々に圹立぀堎合がありたす。

これらすべおに぀いお泚意が必芁なのは、すべおの曞き換えURLオプションです。これにより、PRマヌゞの時点で、モゞュヌルのサポヌトが远加されたした。 https://github.com/less/less.js/pull/3248。 それで、ファむル盞察URLを返す堎合でも、それを曞き換えるこずはできたすか はいず思いたすが、明確にする必芁がありたす。

はい、resolveずfileは、私が説明しようずしおいたこずを正確に定矩しおいたす。 近い将来、これが実装されるこずを期埅しおいたす。

@ miljan-aleksicさお、それは理にかなっおいたす。

実際、 file()は正しくありたせん。これは、私が掚枬するファむル名を返すため、 dir()たす。 そしお、それはおそらくファむルごずの倉数定数でなければなりたせん。

どうですか

data-uri(resolve(<strong i="10">@DIR</strong>, "my/path"))

そのため、2぀のこずが远加されたした。1パスを結合するresolve関数、2評䟡䞭に各ファむルに挿入される@DIR および@FILE 定数。 それに぀いおの唯䞀のトリッキヌなこずは、それらの泚入された倉数がルヌト内の他の倉数をオヌバヌラむドたたはマヌゞしないこずをテストするこずですが、それに察しおテストするのはかなり簡単なはずです。 たたは、 @argumentsように小文字にする必芁がありたすか その堎合、競合を避けるために@directoryず@filenameをお勧めしたす。 最も少ないyオプションは䜕ですか

たぶんresolve()ようなものが必芁ですか

^ビンゎ。 たさにその通りです。

最も少ないyオプションは䜕ですか

Node.js-yオプションを遞択したす __dirname
それは長い間存圚しおいお、よく知られおいたす。 Lessの同じ抂念に同じ名前を䜿甚するのは良い考えかもしれたせん。

Node.js-yオプションを遞択したす__ dirname

゚ラヌ...それはLess / CSSキヌワヌドにもLess倉数にも関数セマンティクスにも䞀臎したせん。 それよりもうたくやらなければならないでしょう。 @__dirnameかもしれたせんが、アンダヌスコアはただ蚀語にずっお少し奇劙です。 それはたったく適合したせん。

アンダヌスコアは、蚀語にずっおただ少し奇劙です。 それはたったく適合したせん。

特に組み蟌み倉数のようなものに関しおは、倚くの蚀語で「システムが提䟛するもの」を瀺すために、二重の先頭の䞋線が䜿甚されたす。 ですから、堎違いはそこにあるポむントのようなものです。

もちろん; 気に入らない堎合は、い぀でも@dirnameや@dir-nameような掟生物を䜿甚できたす。

しかし、これに぀いおもう少し考えたのに、なぜ珟圚のファむルパスを倉数ずしお公開する必芁があるのでしょうか。 抂念的なresolve()関数自䜓に織り蟌むこずはできたせんか

抂念的なresolve関数自䜓に組み蟌むこずはできたせんか

そしお、関数名を倉えるだけで、私の提案に戻りたした。 私はただそれが䞀番奜きで、resolveずしおさらに良いです。

そしお、関数名を倉えるだけで、私の提案に戻りたした。

ある皮。

私が埗おいるのは、 resolve()関数の呌び出しを保持しおいるファむルのURL /パスを枡す必芁がないずいうこずです。その堎所は、関数に察しお_既知_である必芁があるためです。

関数内のthisは、 currentFileInfoプロパティを持぀FunctionCallerむンスタンスをcurrentFileInfoたす。
そのプロパティは、関数呌び出しに察応するCall ASTノヌドのファむル情報に初期化されたす。
぀たり

https://github.com/less/less.js/blob/4e903e8254cc20fec80fccd35794fb797949e653/lib/less/tree/call.js#L47

コヌドを正しく読んでいる堎合、そこにあるファむル情報は、関数呌び出しが評䟡されるファむルではなく、関数呌び出しが_宣蚀されおいる堎所のファむル情報に察応したす。

぀たり、このファむル情報を「熱心な」URLリゟルバヌに䜿甚しおも問題ありたせん。 別のファむルのコンテキスト内でむンポヌトおよび評䟡されるミックスむン内に関数呌び出しが配眮された堎合でも、期埅どおりに動䜜したす。 ぀たり、ミックスむンが定矩されおいるファむルに固定された解像床で。

しかし、これに぀いおもう少し考えたのに、なぜ珟圚のファむルパスを倉数ずしお公開する必芁があるのでしょうか。 抂念的なresolve関数自䜓に組み蟌むこずはできたせんか

珟圚のファむルや䞀般的なリゟルバヌ関数が必芁ないこずが確実な堎合...倚分...明瀺的なロヌカル倉数は、それがゞェネリック関数ではなく、関数が次のように評䟡されないこずを明確にしたすその他の機胜。 それが私の本圓の関心事です、セマンティクスです。 名前に関係なく、「珟圚のファむル」の特別な「マヌカヌ」がない堎合は、入力に基づいお同じように解決される他の関数ずは異なりたす。 蚀い換えれば、それは目に芋えない入力に埓っお解決する関数であり、それは私に関係しおいたす。 ただし、関数がcurrent-file-resolve()ように非垞に明瀺的なものである堎合は、それで十分です。 そうしないず、ミックスむンが定矩されたファむルではなく、呌び出されたファむルに埓っおミックスむン呌び出しがspecialfunction()解決しなかった理由を人々に混乱させるこずになりたす。

したがっお、いいえ、ロヌカル倉数は技術的には_必芁_ではありたせんが、意味/出力/動䜜はセマンティクスから明確である必芁がありたす。

うヌん...

OK。 次に、 resolve-url(url, [base])関数がありたす-オプションのbase ; デフォルトでは、関数呌び出しが曞き蟌たれる/宣蚀される/定矩されるファむルのディレクトリになりたす。 次に、䜜成者がパスを明瀺的にプルしたい堎合に備えお、 this.fileInfoをプルしおパスを取埗するdeclared-dir()関数を甚意したす。 別のファむルからパスを取埗したい。 たたは、URL解決に関係のない他の機胜の䞀郚ずしおこれを䜿甚する必芁がありたす。

぀たり、完党な圢匏の呌び出し暗黙のベヌスなしは次のようになりたす。

resolve-url("../foo", declared-dir())

...そしおただやるこずず同等だろう

resolve-url("../foo")

...これは怠惰なものず同等の熱心なものです

url("../foo")

そのように「自動的に」泚入された倉数は必芁ありたせん。 これは、玔粋にプラグむン関数のセットずしお実装できるず思いたす。 そしお、必芁な唯䞀のコアメカニズムは、URLを「解決枈み」ずしおマヌクする方法です。これにより、デフォルトのリゟルバヌロゞックがresolve-url関数から出力されるURLで実行されないようにブロックできたす。

セマンティクスは、もちろんドキュメントで明確にする必芁がありたす。 そしお、そのドキュメントは、 urlをresolve-urlず明瀺的に比范しお、熱心で怠惰な評䟡/解決を説明するこずができたす。

むンポヌトされたファむルのスコヌプが同じであるため、「泚入された倉数」のアむデアが远加のハックなしで機胜しない堎合に備えお。

<strong i="7">@__dir</strong>: "whatever";
// *everywhere* it's the only <strong i="8">@__dir</strong> value = the path of "c"
<strong i="9">@import</strong> "a";
<strong i="10">@import</strong> "b";
<strong i="11">@import</strong> "c";

関数ベヌスの実装に぀いお蚀えば、 this.context.?たたはthis.context.frames[?]どこかで関数が呌び出されるファむルのパスを取埗するこずはただ可胜だず思いたすただし、確実ではありたせん。ずか、ぐらい。

うヌん、それで私たちはそれを解決するためのより良い方法がありたせんか

@heynext
うヌん、それで私たちはそれを解決するためのより良い方法がありたせんか

遅延評䟡はこれを適切に解決するこずを非垞に難しくしたす、私は恐れおいたす。


@ seven-phases-max
関数ベヌスの実装に぀いお蚀えば、 this.context.?たたはthis.context.frames[?]どこかで関数が呌び出されるファむルのパスを取埗するこずはただ可胜だず思いたすただし、確実ではありたせん。ずか、ぐらい。

はい、その階局でCallノヌドを芋぀けるこずができるはずです。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡