vue-cli脚手架build目录下utils.js工具配置文件详解


Posted in Javascript onSeptember 14, 2018

此文章用来解释vue-cli脚手架build目录中的utils.js配置文件

1.此配置文件是vue开发环境的wepack相关配置文件,主要用来处理css-loader和vue-style-loader

2.关于注释 •当涉及到较复杂的解释我将通过标识的方式(如(1))将解释写到单独的注释模块,请自行查看

3.上代码

// 引入nodejs路径模块
var path = require('path')
// 引入config目录下的index.js配置文件
var config = require('../config')
// 引入extract-text-webpack-plugin插件,用来将css提取到单独的css文件中
// 详情请看(1)
var ExtractTextPlugin = require('extract-text-webpack-plugin')
// exports其实就是一个对象,用来导出方法的最终还是使用module.exports,此处导出assetsPath
exports.assetsPath = function (_path) {
  // 如果是生产环境assetsSubDirectory就是'static',否则还是'static',哈哈哈
  var assetsSubDirectory = process.env.NODE_ENV === 'production'
    ? config.build.assetsSubDirectory
    : config.dev.assetsSubDirectory
  // path.join和path.posix.join的区别就是,前者返回的是完整的路径,后者返回的是完整路径的相对根路径
  // 也就是说path.join的路径是C:a/a/b/xiangmu/b,那么path.posix.join就是b
  return path.posix.join(assetsSubDirectory, _path)
  // 所以这个方法的作用就是返回一个干净的相对根路径
}

// 下面是导出cssLoaders的相关配置
exports.cssLoaders = function (options) {
  // options如果没值就是空对象
  options = options || {}
  // cssLoader的基本配置
  var cssLoader = {
    loader: 'css-loader',
    options: {
      // options是用来传递参数给loader的
      // minimize表示压缩,如果是生产环境就压缩css代码
      minimize: process.env.NODE_ENV === 'production',
      // 是否开启cssmap,默认是false
      sourceMap: options.sourceMap
    }
  }

  // generate loader string to be used with extract text plugin
  function generateLoaders (loader, loaderOptions) {
    // 将上面的基础cssLoader配置放在一个数组里面
    var loaders = [cssLoader]
    // 如果该函数传递了单独的loader就加到这个loaders数组里面,这个loader可能是less,sass之类的
    if (loader) {
      loaders.push({
        // 加载对应的loader
        loader: loader + '-loader',
        // Object.assign是es6的方法,主要用来合并对象的,浅拷贝
        options: Object.assign({}, loaderOptions, {
          sourceMap: options.sourceMap
        })
      })
    }

    // Extract CSS when that option is specified
    // (which is the case during production build)
    // 注意这个extract是自定义的属性,可以定义在options里面,主要作用就是当配置为true就把文件单独提取,false表示不单独提取,这个可以在使用的时候单独配置,瞬间觉得vue作者好牛逼
    if (options.extract) {
      return ExtractTextPlugin.extract({
        use: loaders,
        fallback: 'vue-style-loader'
      })
    } else {
      return ['vue-style-loader'].concat(loaders)
    }
    // 上面这段代码就是用来返回最终读取和导入loader,来处理对应类型的文件
  }

  // https://vue-loader.vuejs.org/en/configurations/extract-css.html
  return {
    css: generateLoaders(), // css对应 vue-style-loader 和 css-loader
    postcss: generateLoaders(), // postcss对应 vue-style-loader 和 css-loader
    less: generateLoaders('less'), // less对应 vue-style-loader 和 less-loader
    sass: generateLoaders('sass', { indentedSyntax: true }), // sass对应 vue-style-loader 和 sass-loader
    scss: generateLoaders('sass'), // scss对应 vue-style-loader 和 sass-loader
    stylus: generateLoaders('stylus'), // stylus对应 vue-style-loader 和 stylus-loader
    styl: generateLoaders('stylus') // styl对应 vue-style-loader 和 styl-loader 
  }
}

// Generate loaders for standalone style files (outside of .vue)
// 下面这个主要处理import这种方式导入的文件类型的打包,上面的exports.cssLoaders是为这一步服务的
exports.styleLoaders = function (options) {
  var output = []
  // 下面就是生成的各种css文件的loader对象
  var loaders = exports.cssLoaders(options)
  for (var extension in loaders) {
    // 把每一种文件的laoder都提取出来
    var loader = loaders[extension]
    output.push({
      // 把最终的结果都push到output数组中,大事搞定
      test: new RegExp('\\.' + extension + '$'),
      use: loader
    })
  }
  return output
}

注释

(1)extract-text-webpack-plugin插件是用来将文本从bundle中提取到一个单独的文件中

基本使用方法如下

const ExtractTextPlugin = require("extract-text-webpack-plugin");
  module.exports = {
    module: {
      rules: [
        {
          test: /\.css$/, //主要用来处理css文件
          use: ExtractTextPlugin.extract({
            fallback: "style-loader", // fallback表示如果css文件没有成功导入就使用style-loader导入
            use: "css-loader" // 表示使用css-loader从js读取css文件
          })
        }
      ],
      plugins: [
        new ExtractTextPlugin("styles.css") //表示生成styles.css文件
      ]
    }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery自定义函数的多种方法
Jan 09 Javascript
JavaScript 开发工具webstrom使用指南
Dec 09 Javascript
js获取表格的行数和列数的方法
Oct 23 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
Nov 16 Javascript
javascript中arguments,callee,caller详解
Mar 16 Javascript
js html css实现复选框全选与反选
Oct 09 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
Nov 01 Javascript
BootStrap给table表格的每一行添加一个按钮事件
Sep 07 Javascript
详解Javascript 中的 class、构造函数、工厂函数
Dec 20 Javascript
一步步教会你微信小程序的登录鉴权
Apr 09 Javascript
深入理解es6块级作用域的使用
Mar 28 Javascript
JavaScript设计模式之原型模式详情
Jun 21 Javascript
vue3.0 CLI - 2.6 - 组件的复用入门教程
Sep 14 #Javascript
在vue项目中使用md5加密的方法
Sep 14 #Javascript
在vue项目中引用Iview的方法
Sep 14 #Javascript
详解webpack-dev-server使用方法
Sep 14 #Javascript
JS 实现微信扫一扫功能
Sep 14 #Javascript
详解webpack2异步加载套路
Sep 14 #Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
Sep 14 #Javascript
You might like
十天学会php之第一天
2006/10/09 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
让CodeIgniter的ellipsize()支持中文截断的方法
2014/06/12 PHP
php基于session锁防止阻塞请求的方法分析
2017/08/07 PHP
JavaScript 节点操作 以及DOMDocument属性和方法
2007/12/06 Javascript
JS获取鼠标坐标的实例方法
2013/07/18 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
详解如何用typescript开发koa2的二三事
2018/11/13 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
细说Vue组件的服务器端渲染的过程
2019/05/30 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
2019/08/20 Javascript
p5.js临摹动态图形的方法
2019/10/23 Javascript
js实现九宫格抽奖
2020/03/19 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
JS获取一个字符串中指定字符串第n次出现的位置
2021/02/10 Javascript
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
ubuntu16.04制作vim和python3的开发环境
2018/09/23 Python
Python运维开发之psutil库的使用详解
2018/10/18 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
Python必须了解的35个关键词
2020/07/16 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
2021/02/16 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
英国最大的在线奢侈手表零售商:Jura Watches
2018/01/29 全球购物
韩国现代百货官网:Hmall
2018/03/21 全球购物
国际商务专业学生个人的自我评价
2013/09/28 职场文书
生物专业个人自荐信范文
2013/11/29 职场文书
大家访活动实施方案
2014/03/10 职场文书
青年志愿者活动总结
2014/04/26 职场文书
最美孝心少年事迹材料
2014/08/15 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫
MySQL 原理与优化之Limit 查询优化
2022/08/14 MySQL