如何使用 Webpack 在 Vue 中设置全局 Sass 变量?
How can I set global Sass variables in Vue with Webpack?
这些是我使用的 Sass 个模块的版本:
node-sass@^4
sass-loader@^7
我试图在 vue.config.js
文件中设置全局 Sass 变量:
module.exports = {
css: {
loaderOptions: {
sass: {
prependData: `$primaryColor: #16A085;`
}
}
}
}
但是在 运行 npm run dev
之后,我得到以下错误:
Module build failed:
color: $primaryColor;
^
Undefined variable: "$primaryColor".
in C:\Users\tomek\Desktop\projekty\projectsBacketlist\noteTakingApp\frontend\noteTakkingApp\src\views\NoteEdit.vue (line 157, column 13)
@ ./node_modules/vue-style-loader!./node_modules/css-loader?{"sourceMap":true}!./node_modules/vue-loader/lib/style-compiler?{"vue":true,"id":"data-v-b5e02554","scoped":false,"hasInlineConfig":false}!./node_modules/sass-loader/dist/cjs.js?{"sourceMap":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./src/views/NoteEdit.vue 4:14-374 13:3-17:5 14:22-382
@ ./src/views/NoteEdit.vue
@ ./src/main.js
@ multi (webpack)-dev-server/client?http://localhost:8080 webpack/hot/dev-server ./src/main.js
您的 project is not a Vue CLI 生成的项目,因此 vue.config.js
根本不会被处理。
在您的情况下,您将在 build/utils.js
to pass the data
选项中配置 Sass 7.x 加载程序:
exports.cssLoaders = function (options) {
//...
return {
//...
sass: generateLoaders('sass', { data: `$primaryColor: #16A085;` }),
scss: generateLoaders('sass', { data: `$primaryColor: #16A085;` }),
}
}
但是,您应该注意 sass-loader
文档中的说明:
Please note: Since you're injecting code, this will break the source mappings in your entry file. Often there's a simpler solution than this, like multiple Sass entry files.
我有同样的问题,这是我的解决方案:
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
sass: generateLoaders('sass', { indentedSyntax: true }),
// scss: generateLoaders('sass'),
scss: generateLoaders('sass', { data: `@import '@/scss/_variables.scss';` }),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}
}
我的文件在“src”中,所以基本上转到顶部并找到文件夹 scss。
这些是我使用的 Sass 个模块的版本:
node-sass@^4
sass-loader@^7
我试图在 vue.config.js
文件中设置全局 Sass 变量:
module.exports = {
css: {
loaderOptions: {
sass: {
prependData: `$primaryColor: #16A085;`
}
}
}
}
但是在 运行 npm run dev
之后,我得到以下错误:
Module build failed:
color: $primaryColor;
^
Undefined variable: "$primaryColor".
in C:\Users\tomek\Desktop\projekty\projectsBacketlist\noteTakingApp\frontend\noteTakkingApp\src\views\NoteEdit.vue (line 157, column 13)
@ ./node_modules/vue-style-loader!./node_modules/css-loader?{"sourceMap":true}!./node_modules/vue-loader/lib/style-compiler?{"vue":true,"id":"data-v-b5e02554","scoped":false,"hasInlineConfig":false}!./node_modules/sass-loader/dist/cjs.js?{"sourceMap":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./src/views/NoteEdit.vue 4:14-374 13:3-17:5 14:22-382
@ ./src/views/NoteEdit.vue
@ ./src/main.js
@ multi (webpack)-dev-server/client?http://localhost:8080 webpack/hot/dev-server ./src/main.js
您的 project is not a Vue CLI 生成的项目,因此 vue.config.js
根本不会被处理。
在您的情况下,您将在 build/utils.js
to pass the data
选项中配置 Sass 7.x 加载程序:
exports.cssLoaders = function (options) {
//...
return {
//...
sass: generateLoaders('sass', { data: `$primaryColor: #16A085;` }),
scss: generateLoaders('sass', { data: `$primaryColor: #16A085;` }),
}
}
但是,您应该注意 sass-loader
文档中的说明:
Please note: Since you're injecting code, this will break the source mappings in your entry file. Often there's a simpler solution than this, like multiple Sass entry files.
我有同样的问题,这是我的解决方案:
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
sass: generateLoaders('sass', { indentedSyntax: true }),
// scss: generateLoaders('sass'),
scss: generateLoaders('sass', { data: `@import '@/scss/_variables.scss';` }),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}
}
我的文件在“src”中,所以基本上转到顶部并找到文件夹 scss。