Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add @content support to @tailwindcss/vite #14076

Merged
merged 8 commits into from
Aug 5, 2024

Conversation

RobinMalfait
Copy link
Member

This PR makes sure that when you use @content, that these files are also being watched if you are using Vite.

In Vite we rely on the module graph instead, but sometimes it can be useful to watch files outside of the module graph. E.g.: A Laravel project, where you are watching *.blade.php files.

@RobinMalfait RobinMalfait changed the title Watch globs from @content in @tailwindcss/vite Add @content support to @tailwindcss/cli Jul 29, 2024
@RobinMalfait RobinMalfait changed the title Add @content support to @tailwindcss/cli Add @content support to @tailwindcss/vite Jul 29, 2024
@RobinMalfait RobinMalfait mentioned this pull request Jul 29, 2024
8 tasks
@RobinMalfait RobinMalfait changed the base branch from feat/content-path-cli-watch-mode to feat/add-content-support-to-core July 29, 2024 14:09
@RobinMalfait RobinMalfait force-pushed the feat/add-content-support-to-core branch 2 times, most recently from 2710729 to 105293e Compare July 30, 2024 08:48
@RobinMalfait RobinMalfait force-pushed the feat/content-path-vite branch 2 times, most recently from 3666bc3 to fabad24 Compare July 30, 2024 10:16
@RobinMalfait RobinMalfait force-pushed the feat/add-content-support-to-core branch from 97683da to 1c1bbca Compare July 30, 2024 15:28
@RobinMalfait RobinMalfait force-pushed the feat/add-content-support-to-core branch from 1c1bbca to fb8228e Compare July 30, 2024 16:06
Base automatically changed from feat/add-content-support-to-core to feat/add-content-support August 1, 2024 16:00
RobinMalfait and others added 4 commits August 5, 2024 13:24
Vite exposes an `addWatchFile` function that passes the passed in
contents directly to `chokidar`. Because of this, passing in globs just
work as well.
@philipp-spiess philipp-spiess force-pushed the feat/content-path-vite branch 3 times, most recently from 401bb71 to f54dc33 Compare August 5, 2024 14:09
@philipp-spiess philipp-spiess force-pushed the feat/content-path-vite branch 4 times, most recently from aa32a3a to 0ab64f9 Compare August 5, 2024 15:24
@philipp-spiess philipp-spiess merged commit 6df11ca into feat/add-content-support Aug 5, 2024
2 checks passed
@philipp-spiess philipp-spiess deleted the feat/content-path-vite branch August 5, 2024 15:40
RobinMalfait added a commit that referenced this pull request Aug 7, 2024
This PR makes sure that when you use `@content`, that these files are
also being watched if you are using Vite.

In Vite we rely on the module graph instead, but sometimes it can be
useful to watch files outside of the module graph. E.g.: A Laravel
project, where you are watching `*.blade.php` files.

---------

Co-authored-by: Philipp Spiess <[email protected]>
RobinMalfait added a commit that referenced this pull request Aug 7, 2024
This PR is an umbrella PR where we will add support for the new
`@source` directive. This will allow you to add explicit content glob
patterns if you want to look for Tailwind classes in other files that
are not automatically detected yet.

Right now this is an addition to the existing auto content detection
that is automatically enabled in the `@tailwindcss/postcss` and
`@tailwindcss/cli` packages. The `@tailwindcss/vite` package doesn't use
the auto content detection, but uses the module graph instead.

From an API perspective there is not a lot going on. There are only a
few things that you have to know when using the `@source` directive, and
you probably already know the rules:

1. You can use multiple `@source` directives if you want.
2. The `@source` accepts a glob pattern so that you can match multiple
files at once
3. The pattern is relative to the current file you are in
4. The pattern includes all files it is matching, even git ignored files
1. The motivation for this is so that you can explicitly point to a
`node_modules` folder if you want to look at `node_modules` for whatever
reason.
6. Right now we don't support negative globs (starting with a `!`) yet,
that will be available in the near future.

Usage example:

```css
/* ./src/input.css */
@import "tailwindcss";
@source "../laravel/resources/views/**/*.blade.php";
@source "../../packages/monorepo-package/**/*.js";
```

It looks like the PR introduced a lot of changes, but this is a side
effect of all the other plumbing work we had to do to make this work.
For example:

1. We added dedicated integration tests that run on Linux and Windows in
CI (just to make sure that all the `path` logic is correct)
2. We Have to make sure that the glob patterns are always correct even
if you are using `@import` in your CSS and use `@source` in an imported
file. This is because we receive the flattened CSS contents where all
`@import`s are inlined.
3. We have to make sure that we also listen for changes in the files
that match any of these patterns and trigger a rebuild.

PRs:

- [x] #14063
- [x] #14085
- [x] #14079
- [x] #14067
- [x] #14076
- [x] #14080
- [x] #14127
- [x] #14135

Once all the PRs are merged, then this umbrella PR can be merged. 

> [!IMPORTANT]  
> Make sure to merge this without rebasing such that each individual PR
ends up on the main branch.

---------

Co-authored-by: Philipp Spiess <[email protected]>
Co-authored-by: Jordan Pittman <[email protected]>
Co-authored-by: Adam Wathan <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants