是否可以在 vue 应用程序中将 SCSS 编译为 CSS?
Is it possible to just compile SCSS to CSS in vue app?
我正在尝试在我的 Vue.JS 应用程序中使用一些动态样式。我的想法是将 SCSS 主题构建为静态 CSS 并在我的模板中使用它来切换主题。
因为我使用 bulma 作为 css 框架,所以我的所有样式看起来都一样:
theme-1.scss
$primary: wheat;
@import 'bulma/bulma';
当前的解决方案只是一个带有默认 webpack 配置的自举 vue 应用程序。我唯一一次能够将 scss 构建为 css 并进一步使用它的是以下配置:
const path = require('path');
module.exports = {
mode: 'development',
entry: {
functions: [
'./src/index.js',
'./src/scss/theme1.scss',
'./src/scss/theme2.scss'
],
},
output: {
path: path.resolve(__dirname, 'src'),
filename: 'dist/js/[name].js',
},
module: {
rules: [
{
test: /\.scss$/,
use: [
{
loader: 'file-loader',
options: {
name: 'dist/css/[name].css',
}
},
{
loader: 'sass-loader'
}
]
}
]
},
};
不幸的是,我不能在 vue 应用程序中使用多个条目。而且在我看来这也不是使用单页应用程序的正确方法
因为我对 webpack 和 vue-loader 完全陌生,所以我认为我做错了所有事情并且以错误的方式思考。也许存在一些插件,它们与我想要的完全一样?
我通常不会在 CSS 设置中使用文件加载器;相反,我一直使用样式加载器,css-loader with MiniCSSExtractPlugin:
https://github.com/webpack-contrib/mini-css-extract-plugin#advanced-configuration-example
对 MiniCSSExtractPlugin 的设置配置进行审查。
MiniCSSExtractPlugin 是一个不错的选择,所以最重要的是要注意你缺少 css-loader(应该使用它而不是 file-loader)。
这里是这个问题的解决方案:
在我的 vue.config.js 中,我做了以下内容:
module.exports = {
chainWebpack: config => {
config.entry('theme') // you can add here as much themes as you want
.add('./src/theme.scss')
.end();
},
css: {
extract: {
filename: '[name].css', // to have a name related to a theme
chunkFilename: 'css/[name].css'
},
modules: false,
sourceMap: true
},
}
我正在尝试在我的 Vue.JS 应用程序中使用一些动态样式。我的想法是将 SCSS 主题构建为静态 CSS 并在我的模板中使用它来切换主题。
因为我使用 bulma 作为 css 框架,所以我的所有样式看起来都一样:
theme-1.scss
$primary: wheat;
@import 'bulma/bulma';
当前的解决方案只是一个带有默认 webpack 配置的自举 vue 应用程序。我唯一一次能够将 scss 构建为 css 并进一步使用它的是以下配置:
const path = require('path');
module.exports = {
mode: 'development',
entry: {
functions: [
'./src/index.js',
'./src/scss/theme1.scss',
'./src/scss/theme2.scss'
],
},
output: {
path: path.resolve(__dirname, 'src'),
filename: 'dist/js/[name].js',
},
module: {
rules: [
{
test: /\.scss$/,
use: [
{
loader: 'file-loader',
options: {
name: 'dist/css/[name].css',
}
},
{
loader: 'sass-loader'
}
]
}
]
},
};
不幸的是,我不能在 vue 应用程序中使用多个条目。而且在我看来这也不是使用单页应用程序的正确方法
因为我对 webpack 和 vue-loader 完全陌生,所以我认为我做错了所有事情并且以错误的方式思考。也许存在一些插件,它们与我想要的完全一样?
我通常不会在 CSS 设置中使用文件加载器;相反,我一直使用样式加载器,css-loader with MiniCSSExtractPlugin:
https://github.com/webpack-contrib/mini-css-extract-plugin#advanced-configuration-example
对 MiniCSSExtractPlugin 的设置配置进行审查。 MiniCSSExtractPlugin 是一个不错的选择,所以最重要的是要注意你缺少 css-loader(应该使用它而不是 file-loader)。
这里是这个问题的解决方案:
在我的 vue.config.js 中,我做了以下内容:
module.exports = {
chainWebpack: config => {
config.entry('theme') // you can add here as much themes as you want
.add('./src/theme.scss')
.end();
},
css: {
extract: {
filename: '[name].css', // to have a name related to a theme
chunkFilename: 'css/[name].css'
},
modules: false,
sourceMap: true
},
}