laravel-mix: Tailwindcss2 @apply directive doesn't work inside vue component
- Laravel Mix Version: “^6.0.6”
- Node Version: 14.4.0
- NPM Version: 6.14.5
- OS: windows
I create a laravel application with jetstream and inertia-vue stack for my new project problem is Tailwindcs version 2 using postCss and it doesn’t support @apply directive inside vue components but inside .css file it works fine I don’t want that because that css file will load my every page I just want short inline utility classes with @apply directive but I can’t, How Can I achieve that.?
inside my vue template
<template>
<div class="mt-4">
<label for="hello">Hello</label>
<input id="hello" class="input"/>
</div>
</templete>
<style scoped>
.input {
@apply bg-gray-200 border h-10
}
</style>
output inside browser like this
webpack.mix.js
const mix = require('laravel-mix');
mix.js('resources/js/app.js', 'public/js').vue()
.postCss('resources/css/app.css', 'public/css', [
require('postcss-import'),
require('tailwindcss'),
require('autoprefixer'),
])
.webpackConfig(require('./webpack.config'));
if (mix.inProduction()) {
mix.version();
}
webpack.config.js
const path = require('path');
module.exports = {
resolve: {
alias: {
'@': path.resolve('resources/js'),
},
},
};
tailwind version : “^2.0.1”,
laravel version : 8.x,
jetstream version : 2.x,
inertiajs version: “^0.8.2”
About this issue
- Original URL
- State: open
- Created 3 years ago
- Reactions: 8
- Comments: 29 (1 by maintainers)
The solution on the fresh install is as simple as putting a bare config file on the root of the project. Source.
A workaround that can temporarily solve this problem without using laravel-mix-tailwind:
In
webpack.mix.js:In
webpack.config.js:In
postcss.config.js:Now I can use:
I got it working after installing
laravel-mix-tailwindand using it this way in mywebpack.config.jsStyle example in my vue file (notice the absence of the lang attribute:
So to sum up my experience:
lang="postcss"in style (webpack throws errors then) and therefore get linter errors when using long@applywith many classesI really expected that
.vue().tailwind()will solve the issue…Yeah this is something we need to look at. At the moment you have to specify the postCSS plugins globally for it to affect anything other than the specific css/sass/less/etc… file/tree you’ve given via
mix.postCss/ et al:Note that you can set these plugins globally in your mix file like above and do not need to specify plugins via mix.postCss. You also have the option of using a postcss config file which we will honor as well.
@JeffreyWay What are your thoughts on this? Should we leave this as is or do you think it’d be reasonable to populate the PostCSS plugins globally from a single
mix.postCsscall. I’m on the fence about it.after a thousand google searches, finally, I got the answer from here:
tq @nivv
after applying @bebetoalves answer, I needed to remove the
land="postcss"inside the vue style in order for it to work.Can anyone tell finally what needs to be done to be able to use
@applydirective inside a.vuefile on the fresh Laravel 8 install? What plugins need to be installed? What needs to be added into config(s)? Should one use<style>or<style lang="postcss">? What else?So now I have the use case of using postcss in a vue component like below:
I’ve also added this to my webpack config:
So basically I have to choose between tailwind or postcss, which is weird. I though
@applywas parsed with postcss anyways?