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 相关文章推荐
JQquery的一些使用心得分享
Aug 01 Javascript
javascript 系统文件夹文件操作及参数介绍
Jan 08 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
Sep 26 Javascript
JavaScript实现16进制颜色值转RGB的方法
Feb 09 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
Oct 27 Javascript
微信小程序教程系列之视图层的条件渲染(10)
Apr 19 Javascript
JS中使用textPath实现线条上的文字
Dec 25 Javascript
JavaScript常用截取字符串的三种方式用法区别实例解析
May 15 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
Aug 08 Javascript
浅析Vue实例以及生命周期
Aug 14 Javascript
JavaScript ES6常用基础知识总结
Feb 09 Javascript
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 Vue.js
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
mysql总结之explain
2012/02/27 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
PHP XML和数组互相转换详解
2016/10/26 PHP
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
js更优雅的兼容
2010/08/12 Javascript
js window.print实现打印特定控件或内容
2013/09/16 Javascript
使用jquery.qrcode生成彩色二维码实例
2014/08/08 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
深入浅析Node.js 事件循环
2015/12/20 Javascript
解析javascript瀑布流原理实现图片滚动加载
2016/03/10 Javascript
Javascript中的 “&” 和 “|” 详解
2017/02/02 Javascript
Mint UI实现A-Z字母排序的城市选择列表
2018/12/28 Javascript
JSON基本语法及与JavaScript的异同实例分析
2019/01/04 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
2020/08/24 Javascript
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
python实现探测socket和web服务示例
2014/03/28 Python
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
pandas数据预处理之dataframe的groupby操作方法
2018/04/13 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
简单了解django文件下载方式
2020/02/10 Python
PyTorch中Tensor的数据统计示例
2020/02/17 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
Python如何执行系统命令
2020/09/23 Python
Python如何急速下载第三方库详解
2020/11/02 Python
通过代码简单了解django model序列化作用
2020/11/12 Python
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
黄色火烈鸟:De Gele Flamingo
2019/03/18 全球购物
总经理司机岗位职责
2014/02/06 职场文书
毕业生评语大全
2015/01/04 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
离婚案件答辩状
2015/05/22 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
Java 多线程协作作业之信号同步
2022/05/11 Java/Android