webpack配置学习-上

本文深入解析Webpack配置的各项细节,包括配置方式、入口和上下文、输出设置、模块规则、解析选项及插件使用,帮助开发者全面掌握Webpack配置技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

配置

webpack是需要传入一个配置对象的,可以通过两种方式:终端或者Node.js来指定配置选项。

注意:配置中使用Node内置的path模块,并在前面加上全局变量__dirname,可以防止不同操作系统之间的文件路径问题,并且可以使相对路径按照预期工作

配置方式

导出为一个函数

作为导出一个配置对象的替代,可以从webpack配置文件中导出一个函数,该函数在调用事,可传入两个参数:环境对象(environment)作为第一个参数,语法案例可以查看CLI文档的环境选项;map对象(argv)作为第二个参数,这个对象描述了传递给webpack的选项,并且具有output-filename和optimize-minimize等key;
示例:

module.exports=function(env,argv) {
	return {
		mode:env.production?'production':'development',
		devtool:env.production?'source-maps':'eval',
		plugins:[
			new webpack.optimize.UglifyJsPlugin({
				compress:argv['optimize-minimize']
			})
		]	
	}
}
导出一个promise

webpack将运行由配置文件导出的函数,并且等待Promise返回。便于需要异步地加载所需的配置变量

module.exports=()=>{
	return new Promise((resolve,reject)=>{
		setTimeout(()=>{
			resolve({
				entry:'./app.js'
			})
		},5000)
	})
}
导出多个配置对象
module.exports = [{
  output: {
    filename: './dist-amd.js',
    libraryTarget: 'amd'
  },
  entry: './app.js',
  mode: 'production',
}, {
  output: {
    filename: './dist-commonjs.js',
    libraryTarget: 'commonjs'
  },
  entry: './app.js',
  mode: 'production',
}]

入口和上下文

entry对象用于webpack查找启动并构建bundle,上下文context是入口文件所处的目录的绝对路径的字符串。

context

类型:string
基础目录,绝对路径,用于从配置中解析入口起点(entry point)和loader

	context:path.resolve(__dirname,'app')

默认使用当前目录,但是推荐在配置中传递一个值,便于配置独立于当前执行路径

entry

类型:string | [string] | object { <key>: string | [string] } | (function: () => string | [string] | object { <key>: string | [string] })

起点是应用程序的起点入口。从这个起点开始,应用程序启动执行。如果传递一个数组,那么数组的每一项都会执行。

注意:动态加载的模块不能作为入口起点。
简单规则:每个HTML页面都有一个入口起点。单页应用(SPA):一个入口起点,多页应用(MPA):多个入口起点。

entry : {
	home:'./home.js',
	about:'./about.js',
	contact:'./contact.js'
}
命名

如果传入一个字符串或字符串数组,chunk会被命名为main。如果传入一个对象,则每个键(key)会是chunk的名称,该值描述了chunk的入口起点。

动态入口
entry: () => './demo'

或者

entry:() => new Promise (resolve) => resolve(['./demo','./demo2']);

注意:当结合output.library选项时,如果传入数组,则只导出最后一项。

输出(output)

output位于对象最顶级键(key),包括了一组选项,指示了webpack如何去输出、以及在哪里输出(bundle、asset和其他所打包或使用webpack载入的任何内容)

output.auxiliaryComment

类型:string || Object
output.library、output.libraryTarget一起使用时,此选项允许用户向导出容器(export wrapper)中插入注释。如果要为libraryTarget每种类型都插入相同的注释,可以将auxiliaryComment设置为字符串

output:{
  library: "someLibName",
  libraryTarget: "umd",
  filename: "someLibName.js",
  auxiliaryComment: "Test Comment"
}

如果想要给libraryTarget每种类型的注释进行更细粒度的控制,可以传入一个对象

auxiliaryComment: {
  root: "Root Comment",
  commonjs: "CommonJS Comment",
  commonjs2: "CommonJS2 Comment",
  amd: "AMD Comment"
}
output.chunkFilename

类型:string || function
此选项决定了非入口(no-entry)chunk文件的名称。可取值,请查看output.filename选项。

注意:这些文件名需要在runtime根据chunk发送的请求去生成。因此需要在webpack runtime 输出bundle值时,将chunk id 的值对应映射到占位符(如[name] 和 [chunkhash])。但是这会增加文件大小,并且在任何chunk的占位符值修改后,都会使bundle失效。

默认使用 [id].js或从output.filename中推断出的值([name]会被预先替换为[id][id].

output.chunkLoadTimeout

类型:integer
chunk请求到期之前的毫秒数,默认为120000.
注意:webpack2.6.0以上支持此选项

output.crossOriginLoading

类型:boolean string
只用于target是web,使用了通过script标签的JSONP来按需加载chunk
启用cross-origin属性加载chunk。以下是可接手的值:

crossOriginLoading:false //禁用跨域加载(默认)
crossOriginLoading:'anonymous'//不带凭据启用跨域加载
crossOriginLoading:'use-credentials'//带凭据启用跨域加载
output.jsonpScriptType

类型:string
允许自定义script的类型,webpack会将script标签注入到DOM中以下载异步chunk。可以使用以下选项:

  • “text/javascript”(默认)
  • “module”:与ES6就绪代码一起使用
output.devtoolModuleFilenameTemplate

类型:string | function(info)
此选项仅在devtool使用了需要模块名称的选项时使用
自定义每个source map的sources数组中使用的名称。可以通过传递模块字符串或者函数来完成。
例如,当使用devtool:‘eval’,默认值是:

devtoolModuleFilenameTemplate:'webpack://[namespace]/[resource-path]?[loaders]'

模板字符串列表

模板描述
[absolute-resource-path]绝对路径文件名
[all-loaders]自动和显示的loader,并且参数取决于第一个loader名称
[hash]模块标识符的hash
[id]模块标识符
[loaders]显式的loader,并且参数取决于第一个loader名称
[resource]用于解析文件的路径和用于第一个loader的任意查询参数
[resource-path]不带任何查询参数,用于解析文件的路径
[namespace]模板命名空间。在构建成为一个library之后,通常也是library名称,否则为空

当使用一个函数,同样的选项要通过info参数并使用驼峰式

devtollModuleFilenameTemplate:info => {
	return `webpack:///${info.resourcePath}?${info.loaders}`
}
output.devtoolFallbackModuleFilenameTemplate

类型:string | function(info)
当上面的模板字符串或函数产生重复时使用的备用内容

output.devtoolNamespace

类型:string
此选项确定了output.devtoolModuleFilenameTemplate使用的模块名称空间。未指定时的默认值为:output.library。在加载多个通过webpack构建的library时,用于防止sourcemap中源文件路径冲突。

output.filename

类型:string | function
此选项决定了每个输出bundle的名称,这些bundle将写入到output.path选项指定的目录下
对于单个入口起点,filename会是一个静态名称

filename:"bundle.js"

当通过多个入口起点(entry point)、代码拆分(code splitting)或各种插件(plugin)创建多个bundle,应该使用以下一种替换方式,来赋予每个bundle一个唯一的名称

  • 使用入口名称
filename:"[name].bundle.js"
  • 使用内部chunk.id
filename:"[id].bundle.js"
  • 使用每次构建过程中,唯一的hash生成
filename:"[name].[hash].bundle.js"
  • 使用基于每个chunk内容的hash
filename:"[chunkhash].bundle.js"

注意:

  • 此选项被称为文件名,但是还是可以使用像’js/[name]/bundle.js’这样的文件夹结构
  • 此选项不会影响按需加载chunk的输出文件。

模板字符串的值:

模板描述
[hash]模块标识符(module identifier)的hash
[chunkhash]chunk内容的hash
[name]模块名称
[id]模块标识符(module identifier)
[query]模块的query,例如,文件名?后面的字符串

[hash]和[chunkhash]的长度可以使用[hash:16] (默认为20)来指定。或者通过指定output.hashDidestLength在全局配置长度

如果将这个选项设为一个函数,函数将返回一个包含上面表格中替换信息的对象

output.hashDigest

在生成hash时使用的编码方式,默认为‘hex’。支持Node.js hash.digest的所有编码

output.hashDigestLength

散列摘要的前缀长度,默认为20

output.hashFunction

类型:string | function
散列算法,默认为’md5’。支持Node.JS ctypto.createHash的所有功能。从4.0.0-alpha2开始,hashFunction 可以返回自定义hash的构造函数。可以提供一个不加密的哈希函数(优化性能)

hashFunction:require('metrohash').MetroHash64

确保hash函数有可访问的update和digest方法

output.hashSalt

可选的加盐值,通过Node.JS hash.update来更新哈希

output.hotUpdateChunkFilename

类型:string | function
自定义热更新chunk的文件名。可选值参考output.filename选项
占位符只能是[id] 和 [hash],默认值是:

hotUpdateChunkFilename:"[id].[hash].hot-update.js"
output.hotUpdateFunction

类型:function
只在target是web时使用,用于加载热更新(hot update)的JSONP函数
JSONP函数用于异步加载(async load)热更新(hot-update)chunk

output.hotUpdateMainFilename

类型:string | function
自定义热更新的主文件名。可选值参考output.filename选项
占位符只能是[hash] ,默认值是

hotUpdateMainFilename:"[hash].hot-update.json"
output.jsonpFunction

类型:string
只在target是web时使用,用于按需加载chunk的JSONP函数
JSONP函数用于异步加载chunk,或者拼接多个初始chunk
如果在同一网页中使用了多个webpack runtime,则需要修改此选项
如果使用了output.library选项,library名称是自动追加的

output.library

类型:string | object (webpack3.1.0开始,用于libraryTarget:‘umd’)
output.library的值的作用,取决于output.libraryTarget选项的值;
注意:output.libraryTarget的默认选项是var
所有如果使用以下配置选项:

output:{
	library:'Mylibrary'
}

如果生成的输出文件,是在HTML页面中作为一个script标签引入,则变量MyLibray将与入口文件的返回值绑定。

output.libraryTarget

类型:string
默认值:var
用于配置如何暴露library。
注意:此选项与分配给output.library的值一同使用。
常用选项:

  1. 暴露为一个变量
libraryTraget:'var' // (默认值) 当library加载完成,入口起点的返回值将分配给一个变量
//当使用此选项时,将output.library设置为空,会因为没有变量导致无法赋值
libraryTarget:'assign' //产生一个隐含的全局变量,可能会潜在的重新分配到全局中已存在的值(谨慎使用)
//如果变量名没有在作用域中进行定义,则library将会被设置在全局作用域内
//当使用此项时,将output.library设置为空,将产生一个破损的输出bundle
  1. 通过在对象上赋值暴露
    下列选项将入口起点的返回值赋值给一个特定对象的属性下。如果output.library未赋值为一个非空字符串,则默认行为是,将入口起点返回的所有属性都赋值给一个对象(此对象由output.libraryTarget特定)
    注意:不设置output.library将导致由入口起点返回的所有属性,都会被赋值给给定的对象;但是并不会检查现有的属性名是否存在
libraryTarget:'this'
//入口起点的返回值将分配给this的一个属性(此名称由output.library定义)下
libraryTarget:'window'
//入口起点的返回值将使用output.library中定义的值
//分配给window对象的这个属性下
libraryTarget:'global'
//入口起点的返回值将使用output.library中定义的值
//分配给global对象的这个属性下
libraryTarget:'commonjs'
//入口起点的返回值将使用output.library中定义的值,
//分配给exports对象,这个名称意味着,模块用于CommonJS环境
  1. 模块定义系统
    以下选项将导致bundle带有更完整的模块头部,以确保与各种模块系统的兼容性,根据output.libraryTarget选项不同,output.librart选项将具有不同的含义
libraryTarget:'commonjs2'
//入口起点的返回值将分配给module.exports对象。这个名称意味着模块用于CommonJS环境
//注意:output.library会被省略,因此对于此特定的output.libraryTarget,无需再设置output.library
libraryTarget:'amd'
//将library暴露为AMD模块
//AMD模块要求入口chunk通过特定的属性定义
//否则,直接加载生成的AMD bundle将导致报错
libraryTarget:'umd'
//将library暴露为所有的模块定义下都可以运行的方式
//注意:省略library会导致将入口起点返回的所有属性,直接赋值给root对象

注意:从webpack3.1.0开始,可以将library指定为一个对象,用于给每个target起不同的名称

  1. 其他Targets
libraryTarget:'jsonp'//将入口起点的返回值,包裹到一个jsonp包装容器中
output.path

类型:string
output目录对应一个绝对路径

path:path.resolve(__dirname,'dist/assets')
output.pathinfo

类型:boolean
告诉webpack在bundle中引入所包含模块信息的相关注释。此选项默认值是false,并且不应该用于生产环境。
注意:这些注释也会被添加至经过tree shaking 后生成的bundle中

output.publicPath

类型:string | function

该选项指定了在浏览器中引用的该输出目录对应的公开URL。
对于按需加载或加载外部资源时,output.publickPath十分重要
该选项是以runtime(运行时)或loader(载入时)所创建的每个URL为前缀。因此在多数情况下该选项会以/结束

默认值是一个空字符串""

在编译是无法知道输出文件的publicPath的情况下,可以留空,然后在入口文件处使用自由变量__webpack_public_path_,以便在运行时进行动态设置

output.sourceMapFilename

类型:string
此选项会向硬盘写入一个输出文件,只在devtool启用了SourceMap选项时才使用。
配置source map 的命名方式。默认使用"[file].map"
可以使用#output-filename中[name],[id],[hash]和[chunkhash]替换符号。除此之外,还可以使用以下替换符号。[file]占位符会被替换为原始文件的文件名。
建议只使用[file]占位符,因为其他占位符在非chunk文件生成的SourceMap时不起作用

模板描述
[file]模块文件名称
[filebase][模块basename]
output.sourcePrefix

类型:string
修改输出bundle中每行的前缀

sourcePrefix:'\t'

注意:默认情况下使用空字符串。使用一些缩进会看起来美观,但是可能导致多种字符串中的问题

output.strictModuleExceptionHandling

类型:boolean
如果一个模块是在require时抛出异常,告诉webpack从模块实例缓存(require.cache)中删除这个模块。
处于性能原因,默认为false。
当设置为false时,该模块不会从缓存中删除,这将造成仅在第一次require调用时抛出异常(会导致与node.js不兼容)。

output.umdNamedDefine

类型:boolean
当使用了libraryTarget:‘umd’,设置:

umdNamedDefine:true

会对UMD的构建过程中的AMD模块进行命名。否则就使用匿名的define

模块

这些选项决定了如何处理项目中的不同类型的模块

module.noParse

RegExp | [RegExp] | function (从webpack3.0.0开始)

防止webpack解析那些任何与给定正则表达式相匹配的文件。忽略的文件中不应该含有import、require、define的调用,或任何其他导入机制。忽略大型的library可以提高构建性能

noParse:/jquery|lodash/

//从webpack3.0.0开始
noParse:function(content) {
	return /jquery|lodash/.test(content)
}
module.rules

类型:array
创建模块时,匹配请求的规则数组。这些规则能够修改模块的创建方式。这些规则能够对模块(module)应用loader,或者修改解析器(parser)

Rule

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

条件

条件有两种输入值:

  1. resource:请求文件的绝对路径。已经根据resolve规则解析
  2. issuer:被请求资源的模块文件的绝对路径。是导入时的位置
    在规则中,属性test,inculde,exclude和resource对resource匹配,并且属性issuer对issuer匹配
    当使用多个条件时,所有条件都匹配
结果

规则结果只在规则条件匹配时使用。
规则有两种输入值:

  1. 应用的loader:应用唉resource上的loader数组
  2. Parser选项:用于为模块创建解析器的选项对象
嵌套

可以使用属性rules和oneOf指定嵌套规则
这些规则用于在规则条件匹配时进行取值

Rule.enforce

用于指定loader种类,没有值表示是普通通loader
选项值:‘pre’(优先处理) | ‘post’(最后处理)

还有一个额外的种类行内loader,loader被应用在import/require行内

行内loader

语法介绍:
在import语句或任何等同于import语法中指定loader,使用!将资源中的loader分开。每个部分都会相当于当前目录解析

import Styles from 'style-loader!css-loader?modules!./styles.css';

所有loader通过前置、行内、普通、后置的顺序使用

//所有普通loader可以通过在请求中加上!前缀来忽略(覆盖)配置中的loader
require('!inline-loader!./a.js')
//所有普通和前置 loader 可以通过在请求中加上 -! 前缀来忽略(覆盖)。
require('-!inline-loader!./a.js')
//所有普通,后置和前置 loader 可以通过在请求中加上 !! 前缀来忽略(覆盖)。
require('!!inline-loader!./a.js')

注意:不应该使用行内loader和!前缀,因为它们是非标准的。

Rule.exclude和Rule.include

Rule.exclude和Rule.include是Rule.resource.exclude和Rule.resource.include的简写。如果使用了上述两个选项,则不能使用Rule.resource

Rule.issuer

一个条件,用于与被发布的request对应的模块项匹配。
这个选项可以用来将loader应用到一个特定模块或一组模块的依赖中

Rule.loader

Rule.loader是Rule.user:[{loader}]的简写

Rule.oneOf

规则数组,当规则匹配时,只使用第一个匹配规则

{
	test:/.css$/
	oneOf:[
		{
			resourceQuery:/inline/,//foo.css?inline
			use:'url-loader'
		},
		{
			resourceQuery:/external/,//foo.css?external
			use:"file-loader"
		}
	]
}
Rule.options/Rule.query

Rule.options和Rule.query是Rule.use:[{options}]的简写

Rule.parser

解析选项对象,所有应该的解析选项都将合并
解析器(parser)可以查阅这些选项,并相应的禁用或重新配置。大多数默认插件,配置值如下:

  • 将选项设置为false,将禁用解析器
  • 将选项设置为true,或不修改将其保留为undefined,可以启用解析器

一些解析器插件不光可以接受一个布尔值,还能接收一个对象
默认的插件解析器选项

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)
}
Rule.resource

条件会匹配resource。既可以提供Rule.resource选项,也可以使用快捷选项Rule.test,Rule.exclude和Rule.include

Rule.rules

规则数组,当规则匹配时使用

Rule.test

Rule.test是Rule.resource.test的简写。如果使用了Rule.test选项,就能使用Rule.resource

Rule.use

应用于模块的UseEntries列表。每个入口指定使用一个loader。
传递字符串(如:use:[‘style-loader’])是loader属性的简写方式(如:user:[{loader:‘style-loader’}])

条件

条件可以是:

  • 字符串:匹配输入必须以提供的字符串开始。
  • 正则表达式:test输入值
  • 函数:调用输入的函数,必须返回一个真值以匹配
  • 条件数组:至少一个匹配条件
  • 对象:匹配所有属性。每个属性都有一个定义行为

条件设置方法:

  1. {test:Condition}:匹配特定条件。一般是提供一个正则表达式或正则表达式的数组,但不强制。
  2. {include:Condition}:匹配特定条件。一般是提供一个字符串或者字符串数组,但不强制
  3. {exclude:Condition}:排除特定条件。一般是提供一个字符串或字符串数组,但不强制
  4. {and:[Condition]}:必须匹配数组中的所有条件
  5. {or:[Condition]}:匹配数组中任何一个条件
  6. {not:[Condition]}:必须排除这个条件
UseEntry

类型:object
必须有一个loader属性是字符串。它使用loader解析选项相对于配置中的context来解析。
可以有一个options属性为字符串或对象。值可以传递到loader中将其理解为loader选项
由于兼容性原因,也可能有query属性,这个是options属性的别名,使用options属性替代。
例子:

{
	loader:'css-loader',
	options:{
		modules:true
	}
}

注意:webpack需要生成资源和所有loader的独立模块标识,包括选项。它尝试对选项对象使用JSON.stringify。这在99.9%的情况下是可以的,但是如果将相同的loader应用于相同资源的不同选项,并且选项具有一些带字符的值,则可能不是唯一的。
如果选项对象不被字符化(例如循环JSON),它也会中断。可以在选项对象使用identity属性,作为唯一标识符

解析 [resolve]

resolve

类型:object
配置模块如何解析。例如,当在ES2015中调用import ‘lodash’,resolve选项能够对webpack查找‘lodash’的方式去做修改

resolve.alias

类型:Object
创建import或require的别名,来确定模块引入变得更简单。可以在给定对象的键后的末尾添加$,以精确匹配。
实例:

别名import ‘xyz’import ‘xyz/file.js’
{}/abc/node_modules/xyz/index.js/abc/node_modules/xyz/file.js
{xyz:’/abs/path/to/file.js’}/abs/path/to/file.jserror
{ xyz$: “/abs/path/to/file.js” }/abs/path/to/file.js/abc/node_modules/xyz/file.js
{ xyz: “./dir/file.js” }/abc/dir/file.jserror
{ xyz$: “./dir/file.js” }/abc/dir/file.js/abc/node_modules/xyz/file.js
{ xyz: “/some/dir” }/some/dir/index.js/some/dir/file.js
{ xyz$: “/some/dir” }/some/dir/index.js/abc/node_modules/xyz/file.js
resolve.aliasFields

类型:[string]
在模块的package.json中指定一个字段,例如browser,按照此规范进行解析。默认:

aliasFields:['browser']
resolve.cacheWithContext

类型:boolean(从webpack3.1.0开始)
如果启用了不安全缓存,请在缓存键(cache key)中引入request.context。这个选项被enhanced-resolve模块考虑在内。从webpack3.1.0开始,在配置了resolve或resolveLoader插件时,解析缓存(resolve caching)中的上下文(context)会被忽略。这解决了性能衰退的问题

resolve.descriptionFiles

类型:array
用于描述的JOSN文件。默认:

descriptionFiles:['package.json']
resolve.enforceExtension

类型:boolean
设置为true,将不允许无扩展名(extension-less)文件。默认如果./foo.js扩展,require('./foo')可以正常运行。但如果启用此选项,只有require('./foo.js')可以正常运行。默认:

enforceExtension:false
resolve.enforceModuleExtension

类型:boolean
对模块是否需要使用的扩展(例如loader)。默认

enforceModuleExtension:false
resolve.extensions

类型:array
自动解析确定的扩展。默认值为:

extensions:[".js",".json"]

能够使用户在引入模块时不带扩展

import File from '../path/to/file'

注意:使用此选项,会覆盖默认数组,这就意味着webpack将不再尝试使用默认扩展来解析模块。对于使用其扩展导入的模块,例如,import SomeFile from "./somefile.ext,要想正确的解析,一个包含“*”的字符串必须包含在数组中。

resolve.mainFields

类型:array
当从npm包中导入模块时(例如import * as D3 from ‘d3’),此选项将决定package.json中使用哪个字段导入模块。根据webpack配置中指定的target不同,默认值也会有所不同
当target属性设置webworker,web或者没有指定,默认值为:

mainFields:['browser','module','main']

对于其他任意的target(包括node),默认值为:

mainFields:["module","main"]

实例:
D3的package.json如下

{
  main: 'build/d3.Node.js',
  browser: 'build/d3.js',
  module: 'index',
}

这意味着 import * as D3 from “d3”,实际从 browser 属性解析文件。在这里 browser 属性是最优先选择的,因为它是 mainFields 的第一项。同时,由 webpack 打包的 Node.js 应用程序默认会从 module 字段中解析文件。

resolve,mainFiles

类型:array
解析目录时要使用的文件名,默认:

mainFiles:["index"]
resolve.modules

类型:array
告诉webpack解析模块时应该搜索的目录。
绝对路径和相对路径都能使用。其中相对路径通过查看当前目录以及祖先路径;使用绝对路径,将只在给定目录中搜索;
默认值:

modules:['mode_modules']

如果添加一个目录到模块搜索目录,此目录将优先于node_modules搜索

modules:[path.resolve(__dirname,"src"),"node_modules"]
resolve.unsafeCache

类型:regex | array | boolean
默认:

unsafeCache:true

启用,会主动缓存模块,单并不安全。传递true将缓存一切
也可以是正则表达式或者正则表达式数组,可以用于匹配文件路径或只缓存某些模块,例如,只缓存utilities模块

unsafeCache:/src\/utilities/

注意:修改缓存路径可能在极少数情况下导致失败

resolve.plugins

应该使用的额外的解析插件列表。运行使用插件。例子:

plugins:[
	new DirectoryNamedWebpackPlugin()
]
resolve.symlinks

类型:boolean
是否将符号链接解析到对应的符号链接位置。默认值为:

symlinks:true

启用时,符号链接的资源,将解析为其真实路径,而不是其符号链接位置。
注意:当使用符号链接package包工具时,可能会导致模块解析失败

resolve.cachePredicate

类型:function
决定请求是否应该被缓存的函数。函数传入一个带有path和request属性的对象。默认:

cachePredicate:function(){return true}
resolveLoader

类型:object
用于解析webpack的loader包,默认:

{
	modules:['node_modues'],
	extensions:['.js','json'],
	mainFields:['loader','main']
}

注意:这里可以使用别名,并且其他特性类似于resolve对象。例如,{txt:'row-loader'}会使用raw-loader去shim(填充)txt!templates/demo.txt

resolveLoader.moduleExtensions

类型:array
解析loader时,用到扩展名(extendsions)/后缀(suffixes)。建议使用全名。但是如果想要省略-loader,可以使用此选项实现
moduleExtensions:[’-loader’]

插件[plugins]

plugins选项用于以各种方式自定义webpack构建过程。webpack附带了各种内置插件,可以通过webpack.[plugin-name]访问这些插件。插件列表和对应文档

plugins

类型:array
webpack插件列表
实例:

var webpack = require('webpack');
// 导入非 webpack 自带默认插件
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var DashboardPlugin = require('webpack-dashboard/plugin');

// 在配置中添加插件
plugins: [
  // 构建优化插件
  new webpack.optimize.CommonsChunkPlugin({
    name: 'vendor',
    filename: 'vendor-[hash].min.js',
  }),
  new webpack.optimize.UglifyJsPlugin({
    compress: {
      warnings: false,
      drop_console: false,
    }
  }),
  new ExtractTextPlugin({
    filename: 'build.min.css',
    allChunks: true,
  }),
  new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
  // 编译时(compile time)插件
  new webpack.DefinePlugin({
    'process.env.NODE_ENV': '"production"',
  }),
  // webpack-dev-server 强化插件
  new DashboardPlugin(),
  new webpack.HotModuleReplacementPlugin(),
]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值