module: { loaders: [ // 這裏也是相應的配置,test就是匹配文件,loader是加載器, { test: /\.vue$/, loader: 'vue' }, { test: /\.js$/, loader: 'babel', include: projectRoot, exclude: /node_modules/ }, { test: /\.json$/, loader: 'json' }, /* { test: /\.css$/, //這是註釋掉的模塊,一開始很疑惑加入css的編譯模塊立刻就報錯了,註釋掉以後sass代碼照樣能夠成功編譯。 loader: ["vue-style-loader", "css-loader"] }, { test: /\.less$/, loader: ["vue-style-loader", "css-loader", "less-loader"] }, { test: /\.(scss|sass)$/, loader: ["node-sass", "vue-style-loader", "css-loader", "sass-loader"] }, { test: /\.scss/, loaders: ['css', 'autoprefixer', 'sass'], },*/ { test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, loader: 'url', query: { limit: 10000, name: utils.assetsPath('img/[name].[hash:7].[ext]') } }, { test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, loader: 'url', query: { limit: 10000, name: utils.assetsPath('fonts/[name].[hash:7].[ext]') } } ] }, // vue-loader 配置 vue: { //後面才清楚是// cssLoaders方法中已經配置了 該方法的實如今下圖的 代碼框中 loaders: utils.cssLoaders({ sourceMap: useCssSourceMap }), //加載css配置模塊 // Autoprefixer是一個基於PostCSS的智能添加CSS前綴的插件 postcss: [ require('autoprefixer')({ browsers: ['last 2 versions'] //意思是隻對主流瀏覽器的最新兩個版本(其實也就是不作兼容了,現代最新的瀏覽器基本都不須要兼容了呀) }) ] } }
vue-loader則只配置了css加載器以及編譯css以後自動添加前綴。(因此才能夠直接編譯.vue文件裏面的sass樣式)javascript
上面的代碼中調用了exports.cssLoaders(options)
,用來返回針對各種型的樣式文件的處理方式,具體實現以下css
exports.cssLoaders = function (options) { options = options || {} var cssLoader = { loader: 'css-loader', options: { //options是loader的選項配置 minimize: process.env.NODE_ENV === 'production', //生成環境下壓縮文件 sourceMap: options.sourceMap //根據參數是否生成sourceMap文件 } } function generateLoaders (loader, loaderOptions) { //生成loader var loaders = [cssLoader] // 默認是css-loader if (loader) { // 若是參數loader存在 loaders.push({ loader: loader + '-loader', options: Object.assign({}, loaderOptions, { //將loaderOptions和sourceMap組成一個對象 sourceMap: options.sourceMap }) }) } if (options.extract) { // 若是傳入的options存在extract且爲true return ExtractTextPlugin.extract({ //ExtractTextPlugin分離js中引入的css文件 use: loaders, //處理的loader fallback: 'vue-style-loader' //沒有被提取分離時使用的loader }) } else { return ['vue-style-loader'].concat(loaders) } } return { //返回css類型對應的loader組成的對象 generateLoaders()來生成loader css: generateLoaders(), postcss: generateLoaders(), less: generateLoaders('less'), sass: generateLoaders('sass', { indentedSyntax: true }), scss: generateLoaders('sass'), stylus: generateLoaders('stylus'), styl: generateLoaders('stylus') } }