Skip to content

Instantly share code, notes, and snippets.

@zmts
Last active February 2, 2018 20:08
Show Gist options
  • Save zmts/6d7fd5b047ecc758dda29d5d63840efd to your computer and use it in GitHub Desktop.
Save zmts/6d7fd5b047ecc758dda29d5d63840efd to your computer and use it in GitHub Desktop.
Vue.js Global SASS/SCSS variables

Используем SASS переменные в Vue.js (webpack template)

Есть несколько вариантов решить эту проблему

  • импортить файл с переменными в каждый компонент
  • использовать лоадер для Вебпака sass-resources-loader что бы переменные были доступны глабально

Ставим sass-resources-loader npm install sass-resources-loader --save-dev

Правим build/utils.js

scss: generateLoaders('sass'),

На

scss: generateLoaders('sass').concat(
  {
    loader: 'sass-resources-loader',
    options: {
      resources: [
        path.resolve(__dirname, '../src/scss/_variables.scss'),
        path.resolve(__dirname, '../src/scss/_fonts.scss')
      ]
    }
  }
),
// generate loader string to be used with extract text plugin
function generateLoaders (loader, loaderOptions) {
const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
if (loader) {
loaders.push({
loader: loader + '-loader',
options: Object.assign({}, loaderOptions, {
sourceMap: options.sourceMap
})
})
}
// Extract CSS when that option is specified
// (which is the case during production build)
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
fallback: 'vue-style-loader'
})
} else {
return ['vue-style-loader'].concat(loaders)
}
}
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
sass: generateLoaders('sass', { indentedSyntax: true }),
scss: generateLoaders('sass'),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}
}
// generate loader string to be used with extract text plugin
function generateLoaders (loader, loaderOptions) {
const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
if (loader) {
loaders.push({
loader: loader + '-loader',
options: Object.assign({}, loaderOptions, {
sourceMap: options.sourceMap
})
})
}
// Extract CSS when that option is specified
// (which is the case during production build)
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
fallback: 'vue-style-loader'
})
} else {
return ['vue-style-loader'].concat(loaders)
}
}
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
sass: generateLoaders('sass', { indentedSyntax: true }),
scss: generateLoaders('sass').concat(
{
loader: 'sass-resources-loader',
options: {
resources: [
path.resolve(__dirname, '../src/scss/_variables.scss'),
path.resolve(__dirname, '../src/scss/_fonts.scss')
]
}
}
),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment