- HTML中文网
- 联系QQ:88526
- QQ交流群
- 微信公众号
这些选项决定了如何处理项目中的不同类型的模块。
module.noParse
RegExp | [RegExp]
RegExp | [RegExp] | function
(从webpack 3.0.0 开始)
防止webpack解析那些任何与给定正则表达式相匹配的文件。忽略的文件中不应该含有 import
, require
, define
的调用,或任何其他导入机制。忽略大型的library可以提高构建性能。
noParse: /jquery|lodash/ // 从 webpack 3.0.0 开始 noParse: function(content) { return /jquery|lodash/.test(content); }
module.rules
array
创建模块时,匹配请求的规则数组。这些规则能够修改模块的创建方式。这些规则能够对模块(module)应用loader,或者修改解析器(parser)。
每个规则可以分为三部分- 条件(condition),结果(result)和嵌套规则(nested rule)。
条件有两种输入值:
resource:请求文件的绝对路径。它已经根据resolve
规则解析。
issuer: 被请求资源(requested the resource)的模块文件的绝对路径。是导入时的位置。
例如:从app.js
导入 './style.css'
,resource是/path/to/style.css
. issuer是/path/to/app.js
。
在规则中,属性test
, include
, exclude
和resource
对resource匹配,并且属性issuer
对issuer匹配。
当使用多个条件时,所有条件都匹配。
W>小心!resource是文件的解析路径,这意味着符号链接的资源是真正的路径,而不是符号链接位置。在使用工具来符号链接包的时候(如npm link
)比较好记,像/node_modules/
等常见条件可能会不小心错过符号链接的文件。注意,可以通过resolve.symlinks
关闭符号链接解析(以便将资源解析为符号链接路径)。
规则结果只在规则条件匹配时使用。
规则有两种输入值:
这些属性会影响loader:loader
, options
, use
。
也兼容这些属性:query
, loaders
。
enforce
属性会影响loader 种类。不论是普通的,前置的,后置的loader。
parser
属性会影响parser 选项。
可以使用属性rules
和oneOf
指定嵌套规则。
这些规则用于在规则条件(rule condition)匹配时进行取值。
Rule.enforce
可能的值有:"pre" | "post"
指定loader 种类。没有值表示是普通loader。
还有一个额外的种类"行内loader",loader 被应用在import/require 行内。
所有loader通过前置, 行内, 普通, 后置
排序,并按此顺序使用。
所有普通loader可以通过在请求中加上!
前缀来忽略(覆盖)。
所有普通和前置loader可以通过在请求中加上-!
前缀来忽略(覆盖)。
所有普通,后置和前置loader可以通过在请求中加上!!
前缀来忽略(覆盖)。
不应该使用行内loader和!
前缀,因为它们是非标准的。它们可在由loader生成的代码中使用。
Rule.exclude
Rule.exclude
是Rule.resource.exclude
的简写。如果你提供了Rule.exclude
选项,就不能再提供Rule.resource
。详细请查看Rule.resource
和Condition.exclude
。
Rule.include
Rule.include
是Rule.resource.include
的简写。如果你提供了Rule.include
选项,就不能再提供Rule.resource
。详细请查看Rule.resource
和Condition.include
。
Rule.issuer
一个条件
,用来与被发布的request对应的模块项匹配。在以下示例中,a.js request的发布者(issuer)
是index.js文件的路径。
index.js
import A from './a.js'
这个选项可以用来将loader 应用到一个特定模块或一组模块的依赖中。
Rule.loader
Rule.loader
是Rule.use: [ { loader } ]
的简写。详细请查看Rule.use
和UseEntry.loader
。
Rule.loaders
W>由于需要支持Rule.use
,此选项已废弃。
Rule.loaders
是Rule.use
的别名。详细请查看Rule.use
。
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.use
和UseEntry.options
。
W>由于需要支持Rule.options
和UseEntry.options
,Rule.use
,Rule.query
已废弃。
Rule.parser
解析选项对象。所有应用的解析选项都将合并。
解析器(parser)可以查阅这些选项,并相应地禁用或重新配置。大多数默认插件,会如下解释值:
false
,将禁用解析器。true
,或不修改将其保留为undefined
,可以启用解析器。然而,一些解析器(parser)插件可能不光只接收一个布尔值。例如,内部的NodeStuffPlugin
差距,可以接收一个对象,而不是true
,来为特定的规则添加额外的选项。
示例(默认的插件解析器选项):
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](/configuration/node) 层(layer)}
Rule.resource
条件
会匹配resource。既可以提供Rule.resource
选项,也可以使用快捷选项Rule.test
,Rule.exclude
和Rule.include
。在Rule
条件中查看详细。
Rule.resourceQuery
A Condition
matched with the resource query. This option is used to test against the query section of a request string (ie from the question mark onwards). If you were to import Foo from './foo.css?inline'
, the following condition would match:
{ test: /.css$/, resourceQuery: /inline/, use: 'url-loader'}
Rule.rules
规则
数组,当规则匹配时使用。
Rule.test
Rule.test
是Rule.resource.test
的简写。如果你提供了一个Rule.test
选项,就不能再提供Rule.resource
。详细请查看Rule.resource
和Condition.test
。
Rule.use
应用于模块的UseEntries列表。每个入口(entry)指定使用一个loader。
传递字符串(如:use: [ "style-loader" ]
)是loader属性的简写方式(如:use: [ { loader: "style-loader "} ]
)。
Loaders can be chained by passing multiple loaders, which will be applied from right to left (last to first configured).
use: [ 'style-loader', { loader: 'css-loader', options: { importLoaders: 1 } }, { loader: 'less-loader', options: { noIeCompat: true } }]
详细请查看UseEntry。
条件
条件可以是这些之一:
{ test: Condition }
:匹配特定条件。一般是提供一个正则表达式或正则表达式的数组,但这不是强制的。
{ include: Condition }
:匹配特定条件。一般是提供一个字符串或者字符串数组,但这不是强制的。
{ exclude: Condition }
:排除特定条件。一般是提供一个字符串或字符串数组,但这不是强制的。
{ and: [Condition] }
:必须匹配数组中的所有条件
{ or: [Condition] }
:匹配数组中任何一个条件
{ not: [Condition] }
:必须排除这个条件
示例:
{ test: /\.css$/, include: [ path.resolve(__dirname, "app/styles"), path.resolve(__dirname, "vendor/styles") ]}
UseEntry
object
必须有一个loader
属性是字符串。它使用loader解析选项(resolveLoader),相对于配置中的context
来解析。
可以有一个options
属性为字符串或对象。值可以传递到loader中,将其理解为loader选项。
由于兼容性原因,也可能有query
属性,它是options
属性的别名。使用options
属性替代。
Example:
{ loader: "css-loader", options: { modules: true }}
注意,webpack需要生成资源和所有loader的独立模块标识,包括选项。它尝试对选项对象使用JSON.stringify
。这在99.9%的情况下是可以的,但是如果将相同的loader应用于相同资源的不同选项,并且选项具有一些带字符的值,则可能不是唯一的。
如果选项对象不被字符化(例如循环JSON),它也会中断。因此,你可以在选项对象使用ident
属性,作为唯一标识符。
Avoid using these options as they are deprecated and will soon be removed.避免使用这些选项,因为它们已废弃,并将很快删除。
这些选项描述了当遇到动态依赖时,创建上下文的默认设置。
例如,未知的(unknown)
动态依赖:require
。
例如,表达式(expr)
动态依赖:require(expr)
。
例如,包裹的(wrapped)
动态依赖:require("./templates/" + expr)
。
以下是其默认值的可用选项
module: { exprContextCritical: true, exprContextRecursive: true, exprContextRegExp: false, exprContextRequest: ".", unknownContextCritical: true, unknownContextRecursive: true, unknownContextRegExp: false, unknownContextRequest: ".", wrappedContextCritical: false wrappedContextRecursive: true, wrappedContextRegExp: /.*/, strictExportPresence: false // since webpack 2.3.0 }
T>你可以使用ContextReplacementPlugin
来修改这些单个依赖的值。这也会删除警告。
几个用例:
wrappedContextCritical: true
。require(expr)
应该包含整个目录:exprContextRegExp: /^\.\//
require("./templates/" + expr)
不应该包含默认子目录:wrappedContextRecursive: false
strictExportPresence
makes missing exports an error instead of warning
推荐手册