随着sass/less等css预处理器的出现,编写css变的愈来愈有乐趣。因此如今愈来愈多的人在项目中喜欢使用scss或者less。(我本身就是一个)。因为最近在写一个vue项目。因此就把写项目期间天天的一些知识点写在博客里。因此最近的博客应该都会和vue有关。今天要和你们分享的就是如何在vue项目中引入scss(引入less也相似)css
在讲如何在vue项目中使用scss以前,咱们先来简单了解一个概念,那就是vue-loader。vue-loader是什么东西呢?vue-loader其实就是一个webpack的loader。用来把vue组件转换成可部署的js,html,css模块。因此咱们若是要想再vue项目中使用scss,确定要告诉vue-loader怎么样解析个人scss文件。
不了解webpack的同窗能够先去自行百度。我这里就放一张图,看完你们能够也就能知道webpack能作些什么事情了。html
在webpack中,全部预处理器都要匹配相应的loader,vue-loader容许其余的webpack-loader处理组件中的一部分吗,而后它根据lang属性自动判断出要使用的loaders。因此,其实只要安装处理sass/scss的loader。就能在vue中使用scss了。
如今咱们来安装sass/scss loadervue
npm install sass-loader node-sass --save-dev
咱们前面说到,vue-loader容许能根据lang属性自动判断出要使用的loaders。它是怎么样作到的?有这么神奇嘛?咱们下面来看一看最核心部分的源代码node
exports.cssLoaders = function (options) { options = options || {} var cssLoader = { loader: 'css-loader', options: { minimize: process.env.NODE_ENV === 'production', sourceMap: options.sourceMap } } // generate loader string to be used with extract text plugin function generateLoaders (loader, loaderOptions) { var loaders = [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') } }
就是上述这段代码让vue-loader有了这种能力,它会根据不一样的文件去使用不一样的loaderwebpack
这样你就能够愉快的使用scss了。web
<style scoped lang="sass"> xxxx xxxx </style>