隨着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>