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

  1. 此配置文件是vue开发环境的wepack相关配置文件,主要用来处理css-loader和vue-style-loader
  2. 关于注释
    • 当涉及到较复杂的解释我将通过标识的方式(如(1))将解释写到单独的注释模块,请自行查看
  3. 上代码
  1. // 引入nodejs路径模块
  2. var path = require('path')
  3. // 引入config目录下的index.js配置文件
  4. var config = require('../config')
  5. // 引入extract-text-webpack-plugin插件,用来将css提取到单独的css文件中
  6. // 详情请看(1)
  7. var ExtractTextPlugin = require('extract-text-webpack-plugin')
  8. // exports其实就是一个对象,用来导出方法的最终还是使用module.exports,此处导出assetsPath
  9. exports.assetsPath = function (_path) {
  10. // 如果是生产环境assetsSubDirectory就是'static',否则还是'static',哈哈哈
  11. var assetsSubDirectory = process.env.NODE_ENV === 'production'
  12. ? config.build.assetsSubDirectory
  13. : config.dev.assetsSubDirectory
  14. // path.join和path.posix.join的区别就是,前者返回的是完整的路径,后者返回的是完整路径的相对根路径
  15. // 也就是说path.join的路径是C:a/a/b/xiangmu/b,那么path.posix.join就是b
  16. return path.posix.join(assetsSubDirectory, _path)
  17. // 所以这个方法的作用就是返回一个干净的相对根路径
  18. }
  19. // 下面是导出cssLoaders的相关配置
  20. exports.cssLoaders = function (options) {
  21. // options如果没值就是空对象
  22. options = options || {}
  23. // cssLoader的基本配置
  24. var cssLoader = {
  25. loader: 'css-loader',
  26. options: {
  27. // options是用来传递参数给loader的
  28. // minimize表示压缩,如果是生产环境就压缩css代码
  29. minimize: process.env.NODE_ENV === 'production',
  30. // 是否开启cssmap,默认是false
  31. sourceMap: options.sourceMap
  32. }
  33. }
  34. // generate loader string to be used with extract text plugin
  35. function generateLoaders (loader, loaderOptions) {
  36. // 将上面的基础cssLoader配置放在一个数组里面
  37. var loaders = [cssLoader]
  38. // 如果该函数传递了单独的loader就加到这个loaders数组里面,这个loader可能是less,sass之类的
  39. if (loader) {
  40. loaders.push({
  41. // 加载对应的loader
  42. loader: loader + '-loader',
  43. // Object.assign是es6的方法,主要用来合并对象的,浅拷贝
  44. options: Object.assign({}, loaderOptions, {
  45. sourceMap: options.sourceMap
  46. })
  47. })
  48. }
  49. // Extract CSS when that option is specified
  50. // (which is the case during production build)
  51. // 注意这个extract是自定义的属性,可以定义在options里面,主要作用就是当配置为true就把文件单独提取,false表示不单独提取,这个可以在使用的时候单独配置,瞬间觉得vue作者好牛逼
  52. if (options.extract) {
  53. return ExtractTextPlugin.extract({
  54. use: loaders,
  55. fallback: 'vue-style-loader'
  56. })
  57. } else {
  58. return ['vue-style-loader'].concat(loaders)
  59. }
  60. // 上面这段代码就是用来返回最终读取和导入loader,来处理对应类型的文件
  61. }
  62. // https://vue-loader.vuejs.org/en/configurations/extract-css.html
  63. return {
  64. css: generateLoaders(), // css对应 vue-style-loader 和 css-loader
  65. postcss: generateLoaders(), // postcss对应 vue-style-loader 和 css-loader
  66. less: generateLoaders('less'), // less对应 vue-style-loader 和 less-loader
  67. sass: generateLoaders('sass', { indentedSyntax: true }), // sass对应 vue-style-loader 和 sass-loader
  68. scss: generateLoaders('sass'), // scss对应 vue-style-loader 和 sass-loader
  69. stylus: generateLoaders('stylus'), // stylus对应 vue-style-loader 和 stylus-loader
  70. styl: generateLoaders('stylus') // styl对应 vue-style-loader 和 styl-loader
  71. }
  72. }
  73. // Generate loaders for standalone style files (outside of .vue)
  74. // 下面这个主要处理import这种方式导入的文件类型的打包,上面的exports.cssLoaders是为这一步服务的
  75. exports.styleLoaders = function (options) {
  76. var output = []
  77. // 下面就是生成的各种css文件的loader对象
  78. var loaders = exports.cssLoaders(options)
  79. for (var extension in loaders) {
  80. // 把每一种文件的laoder都提取出来
  81. var loader = loaders[extension]
  82. output.push({
  83. // 把最终的结果都push到output数组中,大事搞定
  84. test: new RegExp('\\.' + extension + '$'),
  85. use: loader
  86. })
  87. }
  88. return output
  89. }

注释

  1. (1)extract-text-webpack-plugin插件是用来将文本从bundle中提取到一个单独的文件中
  2. 基本使用方法如下
  3. const ExtractTextPlugin = require("extract-text-webpack-plugin");
  4. module.exports = {
  5. module: {
  6. rules: [
  7. {
  8. test: /\.css$/, //主要用来处理css文件
  9. use: ExtractTextPlugin.extract({
  10. fallback: "style-loader", // fallback表示如果css文件没有成功导入就使用style-loader导入
  11. use: "css-loader" // 表示使用css-loader从js读取css文件
  12. })
  13. }
  14. ],
  15. plugins: [
  16. new ExtractTextPlugin("styles.css") //表示生成styles.css文件
  17. ]
  18. }
  19. }

结语

  1. - 够详细了吧,看完了,顶一下

vue-cli脚手架build目录下utils.js工具配置文件详解的更多相关文章

  1. vue-cli脚手架config目录下index.js配置文件详解

    此文章介绍vue-cli脚手架config目录下index.js配置文件 此配置文件是用来定义开发环境和生产环境中所需要的参数 关于注释 当涉及到较复杂的解释我将通过标识的方式(如(1))将解释写到单 ...

  2. vue-cli脚手架build目录中check-versions.js的配置

    转载自:https://www.cnblogs.com/ye-hcj/p/7074363.html 本文介绍vue-cli脚手架build目录中check-versions.js的配置 本文件是用来检 ...

  3. 介绍vue-cli脚手架config目录下index.js配置文件

    1.config/index.js var path = require('path') module.exports = { build: { // production 环境 env: requi ...

  4. 此文章介绍vue-cli脚手架config目录下index.js配置文件

    此配置文件是用来定义开发环境和生产环境中所需要的参数 关于注释 当涉及到较复杂的解释我将通过标识的方式(如(1))将解释写到单独的注释模块,请自行查看 上代码 // see http://vuejs- ...

  5. Tomcat下的Server.xml配置文件详解

    自15年毕业到现在已经入行两年多了,一直以来没有深入的了解过tomcat的详细配置,只懂修改一下端口号.在网上找了些相关资料来支撑这篇文章,深入了解server.xml文件各配置的作用 <?xm ...

  6. linux下抓包工具tcpdump详解

    本文转自:http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 简介 用简单的话来定义tcpdump,就是:dump the ...

  7. Linux下暴力破解工具Hydra详解

    一.简介 Number one of the biggest security holes are passwords, as every password security study shows. ...

  8. vue -- config index.js 配置文件详解

    此文章介绍vue-cli脚手架config目录下index.js配置文件 此配置文件是用来定义开发环境和生产环境中所需要的参数 关于注释 当涉及到较复杂的解释我将通过标识的方式(如(1))将解释写到单 ...

  9. vue-cli 2.x脚手架build目录中的webpack.base.conf.js配置文件

    此文章用来解释vue-cli脚手架build目录中的webpack.base.conf.js配置文件,适用于vue-cli 2.x版本 此配置文件是vue开发环境的wepack相关配置文件,主要用来处 ...

随机推荐

  1. Sublime Text C# 编译(csharp.sublime-build)

    制作: 1. 配置环境变量PATH C# 7.0 C:\Program Files (x86)\Microsoft Visual Studio\\Enterprise\MSBuild\15.0\Bin ...

  2. CPU高获取其线程ID然后分析

    一.具体步骤 shift+p 按照cpu排序 shift+m按照内存排序 1.查看进程下所有线程 top -H -p  pid  2.将十进制数换成16进制:print "%x/n" ...

  3. Spring Struts2 整合

    Spring整合Struts2 整合什么?——用IoC容器管理Struts2的Action如何整合?第一步:配置Struts21.加入Struts2的jar包.2.配置web.xml文件.3.加入St ...

  4. jsp的运行内幕--Tomcat容器对自定义标签的解析过程

    http://blog.sina.com.cn/s/blog_4adc4b090101daqb.html

  5. So sad! ,Asphyre Closure

    So sad ! Asphyre Closure! 不过我相信开发App用Delphi应该是快的. 越与平台无关,优势越明显. 积累的组件市场. 虽然objc 有很多开源支持. 但总感觉还不够delp ...

  6. E: Could not get lock /var/lib/dpkg/lock解决

    ubuntu常见错误--Could not get lock /var/lib/dpkg/lock解决 通过终端安装或卸载程序sudo apt-get install/autoremove xxx时出 ...

  7. Amazon 发送个人文档无回复

    Amazon 个人文档问题 注意注意 详情见:[使用您的[发送至Kindle]电子邮箱] 重点提示 在电子邮件主题中输入"Convert"以将您的文档转换为Kindle格式,然后再 ...

  8. (十一)java循环结构

    while(循环的条件) {循环的语句} int a = 1; while(a < 5) { System.out.println(a);//1,2,3,4 a++; } System.out. ...

  9. niosii dma实验中的一点感想

    1,使用nios给出的驱动函数的顺序一般为1,清中断2,写控制寄存器,3,写参数寄存器4,中断注册,5,开始工作.因为开始工作控制位在控制寄存器中,所以会想到到最后一块写,省事,但是在dma试验中发现 ...

  10. Python 中,字符串"连接"效率最高的方式是?一定出乎你的意料

    网上很多文章人云亦云,字符串连接应该使用「join」方法而不要用「+」操作.说前者效率更高,它以更少的代价创建新字符串,如果用「+」连接多个字符串,每连接一次,就要为字符串分配一次内存,效率显得有点低 ...