vue-cli 2.X webpack配置文件注释

webpack运行流程

  webpack启动后会从 Entry 里配置的 Module 开始递归解析 Entry 依赖的所有Module.每找到一个Module,就会根据配置的Loader去找出对应的转换规则,
对Module进行转换后,再解析出当前的Module依赖的Module.这些模块会以Entry为单位进行分组,一个Entry和其所有依赖的Module被分到一个组也就是一个
Chunk。最后Webpack会把所有Chunk转换成文件输出。在整个流程中Webpack会在恰当的时机执行Plugin里定义的逻辑。
  • Entry:入口,webpack执行构建的第一步从Entry开始,可以抽象成输入。
  • module:模块,在webpack中一切皆模块,一个模块对应着一个文件,webpack会从配置的Entry开始递归找出所有依赖的模块。
  • loader:模块转换器,用于把模块原内容按照需求转换成新内容
  • plugin:扩展插件,在webpack构建流程中的特定时机注入扩展逻辑来改变构建结果或做你想要做的事情
  • Chunk:代码库,一个chunk由十多个模块组合而成,用于代码合并与分割
  • Output:输出结果

vue-cli 2.X webpack 模板配置注释

// 此文件为通过vue-cli 拉取的webpack 模板
// 文件路径:build\webpack.base.conf.js 
'use strict'
const path = require('path')
const utils = require('./utils')
const config = require('../config')
const vueLoaderConfig = require('./vue-loader.conf')

function resolve (dir) {
  return path.join(__dirname, '..', dir)
}

module.exports = {
  context: path.resolve(__dirname, '../'), // webpack在寻找相对路径的文件时会以context为根目录,context默认为执行启动webpack时所在的当前工作目录
  entry: {
    app: './src/main.js' // 配置多个入口,每个入口生成一个Chunk。如果entry是一个object,就可能出现多个chunk,这时chunk的名称是object键值对里键的名称。
  },
  output: {
    path: config.build.assetsRoot, // 输出文件路径 默认值为:assetsRoot: path.resolve(__dirname, '../dist') 
    filename: '[name].js', // 代码里的[name]代表用内置的name变量去替换[name],这时你可以把它看做一个字符串模板函数,每个要输出的chunk都会通过这个函数去拼接出输出的文件名称。
    publicPath: process.env.NODE_ENV === 'production' // 在项目中可能会有一些构建出的资源需要异步加载,加载这些异步资源需要对应的URL地址。 
      ? config.build.assetsPublicPath
      : config.dev.assetsPublicPath
  },
  resolve: { // Webpack 在启动后会从配置的入口模块出发找出所有依赖的模块,Resolve 配置 Webpack 如何寻找模块所对应的文件。 Webpack 内置 JavaScript 模块化语法解析功能,默认会采用模块化标准里约定好的规则去寻找,但你也可以根据自己的需要修改默认的规则。
    extensions: ['.js', '.vue', '.json'],
    alias: { // 配置项通过别名来把原导入路径映射成一个新的导入路径
      'vue$': 'vue/dist/vue.esm.js',
      '@': resolve('src'), // 把路径中的@替换成src  当你通过  import Button from '@/components/button 导入时,实际上被 alias 等价替换成了  import Button from './src/components/button' 。
    }
  },
  module: { // module的配置如何处理模块。
    rules: [ // rules 配置模块的读取和解析规则, 通常用来配置loader, 其类型是一个数组, 数组里每一项都描述了如何去处理部分文件。
      {
          
        test: /\.vue$/, // 条件匹配: 通过test、include、exclude三个配置来命中Loader要应用的规则文件。
        loader: 'vue-loader', // 指定loader解析 
        // 在loader需要传入很多参数的时候,我们还可以通过一个object来描述,如:
        // use: [
        //        {
        //            loader: 'babel-loader',
        //            options: {
        //                cacheDirectory: true
        //            },
        //            // enforce:'post' 的含义是把该 Loader 的执行顺序放到最后
        //           // enforce 的值还可以是 pre,代表把 Loader 的执行顺序放到最前面
        //            enforce:'post'
        //        }
        //    ]
        options: vueLoaderConfig // vue的配置
      },
      {
        test: /.md$/,
        loader: 'text-loader',
        include: [
            path.resolve(__dirname, 'src'), // 指定需要处理文件的位置
            path.resolve(__dirname, 'test')
        ],
        exclude: [
            path.resolve(__dirname, 'node_modules'), // 指定不需要处理的位置
            path.resolve(__dirname, 'bower_modules')
        ]
      },
      {
        test: /\.js$/,
        loader: 'babel-loader',
        include: [
            resolve('src'), 
            resolve('test'), 
            resolve('node_modules/webpack-dev-server/client')]
      },
      {
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000, // 10kb以下的图片转换成base64
          name: utils.assetsPath('img/[name].[hash:7].[ext]')
        }
      },
      {
        test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000, // 10kb以下的音频视频转换成base64
          name: utils.assetsPath('media/[name].[hash:7].[ext]')
        }
      },
      {
        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000, // 10kb以下的字体文件转换成base64
          name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
        }
      }
    ]
  },
  node: {
    // prevent webpack from injecting useless setImmediate polyfill because Vue
    // source contains it (although only uses it if it's native).
    setImmediate: false,
    // prevent webpack from injecting mocks to Node native modules
    // that does not make sense for the client
    dgram: 'empty',
    fs: 'empty',
    net: 'empty',
    tls: 'empty',
    child_process: 'empty'
  }
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容

  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 webpack介绍和使用 一、webpack介绍 1、由来 ...
    it筱竹阅读 11,121评论 0 21
  • GitChat技术杂谈 前言 本文较长,为了节省你的阅读时间,在文前列写作思路如下: 什么是 webpack,它要...
    萧玄辞阅读 12,691评论 7 110
  • 第一部分:概念 概念 webpack 是一个现代的 JavaScript 应用程序的模块打包器(module bu...
    吴佳浩阅读 3,080评论 0 2
  • 一、入门loader可以看作是翻译员,配置module.rules数组里的规则,告诉webpack遇到哪些文件使用...
    zx_lau阅读 2,998评论 0 0
  • 深入浅出Webpack学习笔记 基本概念 常用的构建工具 所有的构建工具所做的工做大致一样,都是把源代码翻译转换成...
    IsaacHHH阅读 505评论 0 0