此文首發於 lijing0906.github.io
接近年底,工作沒有那麼忙,業餘時間就比較多了,就想著把小demo整合到一起,自己搭建一個專案。 在網上找了兩篇部落格作為參考:在vue中使用sass的配置的方法、vue引入sass全域性變數
基礎依賴包安裝
安裝sass-loader和node-sass(sass-loader依賴於node-sass)。-D是--save-dev的縮寫,依賴包在開發環境和生產環境都需要;對應的-S是--save的縮寫,只需在生產環境需要。
$ cnpm i node-sass sass-loader -D
複製程式碼
webpack配置
在build資料夾下的webpack.base.conf.js的rules裡面新增以下配置程式碼:
{
test: /\.sass$/,
loaders: ['style', 'css', 'sass']
}
複製程式碼
寫sass樣式
在App.vue檔案中寫上sass程式碼,測試配置是否成功。
<style lang="scss">
$backgroundColor: #000;
body{
background-color: $backgroundColor;
}
</style>
複製程式碼
啟動專案看效果
重啟專案(cnpm run dev)會發現頁面背景色變成黑色了。 如圖:
全域性引用sass變數
全域性樣式如下圖
在main.js中全域性引入一個scss檔案,然後在任何需要用到sass變數的檔案中引用變數即可。 在其中定義變數在其他元件或者頁面中引用報變數未定義錯誤,其他的樣式可以正常顯示,顯然是編譯的問題。安裝sass-resources-loader
$ cnpm i sass-resources-loader -D
複製程式碼
修改sass配置
在 build 資料夾下找到 util.js 修改sass編譯器loader的配置
// 全域性檔案引入 當然只想編譯一個檔案的話可以省去這個函式
function resolveResource(name) {
return path.resolve(__dirname, '../src/assets/css/' + name); //我把提取的樣式放在src/assets/css下
}
function generateSassResourceLoader() {
var loaders = [
cssLoader,
'sass-loader',
{
loader: 'sass-resources-loader',
options: {
resources: [resolveResource('common.scss')] // 多個檔案時用陣列的形式傳入,單個檔案時可以直接使用 path.resolve(__dirname, '../src/assets/css/common.scss'
}
}
];
if (options.extract) {
return ExtractTextPlugin.extract({ //要確保util.js有引入ExtractTextPlugin這個外掛,通常都是有的
use: loaders,
fallback: 'vue-style-loader'
})
} else {
return ['vue-style-loader'].concat(loaders)
}
}
複製程式碼
修改sass配置的呼叫為 generateSassResourceLoader()
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
// vue-cli預設sass配置
// sass: generateLoaders('sass', { indentedSyntax: true }),
// scss: generateLoaders('sass'),
// 新引入的sass-resources-loader
sass: generateSassResourceLoader(),
scss: generateSassResourceLoader(),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}
複製程式碼
引入檔案,重啟專案
修改配置檔案都需要重啟專案。重啟專案沒有報錯,全域性樣式生效