【发布时间】:2019-05-28 14:29:43
【问题描述】:
我有一个模块化模板,它使用 Sass-loader 来编译每个组件都有的 scss 文件,但是在 laravel 中使用这个和 laravel-mix 是行不通的,它什么都不做
我正在使用最新版本的 laravel (5.8) 和 php7 和 Vue JS
组件示例:
<template>
<div :class="$style.logo">
<div :class="$style.logoContainer">
<img
v-if="!settings.isMenuCollapsed || withDrawer"
src="resources/images/logo-inverse.png"
alt
>
<img
v-if="settings.isMenuCollapsed && !withDrawer"
src="resources/images/logo-inverse-mobile.png"
alt
>
</div>
</div>
</template>
<style lang="scss" module>
@import "./style.module.scss";
</style>
这是一个组件,其 style.scss 文件将被编译为模块。这里的类必须保存到 $style 中。
我在 package.json 中使用这个包:
"sass": "^1.15.2",
"sass-loader": "^7.1.0"
我的 babel.config.js:
module.exports = {
presets: ['@vue/app'],
plugins: [
[
'import',
{ libraryName: 'ant-design-vue', libraryDirectory: 'es', style: true },
],
],
}
最后,我的 webpack.mix.js 文件:
const mix = require('laravel-mix');
require('laravel-mix-alias');
mix.webpackConfig({
module: {
rules: [
{
test: /\.scss$/,
use: [
{
loader: "sass-loader",
options: {
modules: true
}
}
]
}
]
}
});
mix.alias({
'@': '/resources/js'
})
mix.js('resources/js/app.js', 'public/js')
.sass('resources/sass/app.scss', 'public/css');
问题是,组件的scss文件中的类没有被编译,因此编译后的html标签不具备样式,失去了我模板的结构。
这必须是编译后的文件组件:
<div class="index_logo_hObJ1">
<div class="index_logoContainer_1zCMH">
<img src="resources/images/logo-inverse.png" alt="">
</div>
</div>
这就是我得到的:
<div>
<div>
<img src="resources/images/logo-inverse.png" alt="">
</div>
</div>
如你所见,没有类被注入到 div 中,我在编译时也没有出错,我做错了什么?
【问题讨论】:
-
你找到解决办法了吗?
-
我不能使用带有“模块”的样式,我只使用带有“范围”的样式,效果很好
-
朋友我有同样的问题,并且完全使用相同的模板,我不能像你说的那样编译我的组件中的类,所以它们是带有模块的样式,你能给我一个你如何的例子解决了这个?我真的很感激!
-
你好,费尔南多,我没有使用“模块”样式,我无法弄清楚,但我设法使用“范围”样式,它很接近。为此,我将其添加到我的 webpack.mix.js 文件中: [code] let mix = require('laravel-mix');要求('laravel 混合别名'); mix.alias({ '@': '/resources/js' }) mix .setPublicPath('./default/public') .js('resources/js/app.js', 'default/public/javascript/' ) .sass('resources/sass/app.scss', 'default/public/css/') .sourceMaps() .version(); ; mix.options({ extractVueStyles: true, processCssUrls: false });
-
替代你可以使用
laravel-mix-vue-css-modules
标签: vue.js sass module laravel-mix sass-loader