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'] //意思是只对主流浏览器的最新两个版本(其实也就是不做兼容了,现代最新的浏览器基本都不需要兼容了呀)
})
]
}
}

  

  1. 配置静态资源路径
  2. 生成cssLoaders用于加载.vue文件中的样式
  3. 生成styleLoaders用于加载不在.vue文件中的单独存在的样式文件

vue-loader则只配置了css加载器以及编译css之后自动添加前缀。(所以才可以直接编译.vue文件里面的sass样式)

上面的代码中调用了exports.cssLoaders(options),用来返回针对各类型的样式文件的处理方式,具体实现如下

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')
}
}

  

最新文章

  1. ORACLE工作原理小结
  2. 【巩固】CSS3的animation基础
  3. IOS开发之——自定义导航控制器
  4. 集群(cluster)原理(转)
  5. iOS AFNetworking的使用
  6. Canvas裁剪和Region、RegionIterator
  7. 初识mysql学习笔记
  8. flask之wtforms
  9. Python里的赋值 拷贝 深拷贝
  10. Effective Java 第三版——63. 注意字符串连接的性能
  11. Flutter 布局(十)- ListBody、ListView、CustomMultiChildLayout详解
  12. Java虚拟机4:Java对象创建和对象访问
  13. 移动端、PC端(前后台)、小程序常用的UI框架
  14. 【C语言】两个指针(地址)相减
  15. JS-向数组指定位置添加元素
  16. Oracle imp导入数据
  17. S3C6410启动过程分析
  18. 10W年薪和30W+年薪的产品经理差距在哪?
  19. python list 去掉重复元素
  20. Hibernate分页查询的两个方法

热门文章

  1. c#中,字符串前加@是什么意思
  2. FZU2128_最长子串
  3. 当对象使用sort时候 前提是实现compareTo的方法
  4. BZOJ3573 HNOI2014米特运输
  5. [NOI2016]优秀的拆分 后缀数组
  6. BZOJ2733 永无乡 【splay启发式合并】
  7. 使用Empire自动获取域管理员
  8. win7右键新建文件夹不见了
  9. ajax方式提交文件到后台同时加其他参数
  10. Google protocol buffer的配置和使用(Linux&&Windows)