Giter Site home page Giter Site logo

Comments (2)

nex3 avatar nex3 commented on August 21, 2024

In #2077, we (correctly) fixed a bug by making the current importer for a given file unable to load absolute URLs. Now absolute URLs are only ever handled by the set of importers the user passes in explicitly. However, this means that if the user doesn't pass in any importers that can handle absolute file: URLs, they can't be loaded at all. Although this is arguably desirable in general, since it means the importers and loadPaths options are fully authoritative for which absolute URLs can be loaded, it causes several knock-on issues.

The first knock-on issue is the one reported here. In the stylesheet graph we use to determine when updates are necessary, the import cache doesn't have a global FilesystemImporter. This means that it doesn't know how to load absolute file: URLs (which absolute paths on the CLI get converted into), so they're treated as "new files" and always recompiled.

The second knock-on issue is maybe even worse: stylesheets compiled by path on the CLI can't load absolute file: URLs at all through @use or @import. Users can work around this by passing a --load-path, but these loads should work by default.

The third knock-on issue is actually much broader, and actually predates #2077. The question is: what filesystem importer do we add to the import cache to fix the previous two issues? And we don't currently have a good answer. The problem is that there's currently only one type of filesystem importer: it takes a load path as an argument and handles both absolute file: URLs and relative URLs, which it tries to resolve relative to its load path. But in cases like the ones above, the user doesn't want to add a load path. They just want to be able to load absolute URLs.

Our current standard answer to this is FilesystemImporter.cwd, which has . as its load path. But this is unsuitable, because it means that any Sass file anywhere can @use a relative URL and have it be resolved relative to the process's working directory, which is almost certainly not intended. In fact, I think exposing FilesystemImporter.cwd at all was a mistake. Instead, I think we need to deprecate that and provide a new FilesystemImporter field that only supports loading absolute file: URLs and URLs relative to the current file.

from dart-sass.

sleeuwen avatar sleeuwen commented on August 21, 2024

The latest 1.74.1 release has fixed the issue for the user of our library, thanks!

I won't close the issue as there's still a task open, but from my point of view it's fixed.

from dart-sass.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.