配置文件

简单配置

本地安装

$ npm i webpack -D

基本配置

新建webpack.config.js 文件

const path = require('path');

module.exports = {
  // JavaScript 执行入口文件
  entry: './entry.js',
  output: {
    // 把所有依赖的模块合并输出到一个 bundle.js 文件
    filename: 'bundle.js',
    // 输出文件都放到 dist 目录下
    path: path.resolve(__dirname, './dist'),
  }
};

运行命令

$ webpack --mode=development

编译打包

重新编译打包,刷新页面,就可以看到更改的样式。

--progress 是可以显示打包进度的

$ webpack --progress --mode=development

配置命令

package.js里面进行命令配置

//  ... 
"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": " webpack --mode=development"
  },
//  ...

之后,每次使用在控制台输出npm run start 就可以。

定义规则

rules

rules是一个数组,是由多个规则组成的。是一条模块加载时的规则链。

module: {
      rules: [
          {
              //规则1
          },
          {
               //规则2
          }
       ]
}

每个规则可以分为三部分 - 条件(condition),结果(result)和嵌套规则(nested rule)。

条件(condition)

条件,就是满足条件,就走这个规则,对规则的过滤条件。

最常用的条件输入是由以下四个属性共同作用的。

  • test

  • include

  • exclude

  • resource

01. test

  • 一般是提供一个正则的数组。

02. include

  • 一般是一个字符串/字符串的数组。

  • 表示目录中的哪些文件需要这个规则。

  • 使用绝对路径数组。

03. exclude

  • 一般是一个字符串/字符串的数组。

  • 使用绝对路径数组。

  • 尽量避免 exclude,更倾向于使用 include

  • 表示目录中的哪些文件不需要这个规则,与include是正好相反的。

    也就是过滤掉一些文件,最常用的是过滤掉node_modules中的一些文件。

e.g.

module: {
      rules: [
          {
              test: /\.vue$/,
              use: [{
                  loader: "vue-loader"
              }],
              include: [
                   path.resolve(__dirname, "app")
              ]
          },
          {
              test: /\.js$/,
              use: [{
                  loader: "babel-loader"
              }],
              exclude: [/node_modules/]
          }
        ]
 }

04. resource

  • 匹配的是绝对路径。

  • 只可以匹配一个文件。

  • 和上面的test, include, exclude这三个属性相排斥,使用此属性,test, include, exclude都不会生效。

e.g.

{
  resource: '/path/to/style.css'
}

issuer 也是用来限制条件的,不怎么用。其概念为:被请求资源(requested the resource)的模块文件的绝对路径。是导入时的位置。

格式: issuer 条件(导入源) issuer: { test, include, exclude }

结果(result)

符合条件的模块/文件怎么打包加载,一般一个规则的结果就是一个loader。

01. use

use可以指定要用的loader(是一个对象数组,这个对象是UseEntry),一般一个rule至少有一个loader。

e.g.

{
     test: /\.vue$/,
     use: [{
        loader: "vue-loader"
     }],
     include: [
         path.resolve(__dirname, "app")
     ]
}

02. UseEntry

  • 必须有一个loader属性是字符串

  • 有一个options属性为字符串/对象

  • e.g.

      {     
         test: /\.css/,
         use: [{
            loader: "css-loader"
            options: { modules: true }
         }],
       }

use: [ { loader } ]可以简写为loader,没有别的option属性,就可以使用采用简写

e.g. use: [ { loader: “style-loader “} ]可以简写为use: [ “style-loader” ]

03. parser

parser解析选项对象,用来禁用一些解析器,默认的解析器有以下这些

parser: {
  amd: false, // 禁用 AMD
  commonjs: false, // 禁用 CommonJS
  system: false, // 禁用 SystemJS
  harmony: false, // 禁用 ES2015 Harmony import/export
  requireInclude: false, // 禁用 require.include
  requireEnsure: false, // 禁用 require.ensure
  requireContext: false, // 禁用 require.context
  browserify: false, // 禁用特殊处理的 browserify bundle
  requireJs: false, // 禁用 requirejs.*
  node: false, // 禁用 __dirname, __filename, module, require.extensions, require.main 等。
  node: {...} // 在模块级别(module level)上重新配置 node 层(layer)
}

嵌套规则(nested rule)

oneOf

规则数组,只使用这些嵌套规则之一

{ oneOf: [ /* rules */ ] }

rules

规则数组,使用所有这些嵌套规则(合并可用条件)

 { rules: [ /* rules */ ] }

resource

请求文件的绝对路径。已经根据 resolve 规则解析。

01.resource

当使用多个条件时,所有条件都匹配,默认是数组。

{ resource: [ /* rules */ ] }

02. resource or

任意条件匹配时匹配

 { resource: { or: [ /* rules */ ] } }

03. resource and

仅当所有条件都匹配时才匹配

 { resource: { and: [ /* rules */ ] } }

04. resource not

条件不匹配时匹配

{ resource: { not: /* rules */ } }

Last updated