CC 4.0 协议声明
本节内容派生于以下链接指向的内容 ,并遵守 CC BY 4.0 许可证的规定。
以下内容如果没有特殊声明,可以认为都是基于原内容的修改和删减后的结果。
内联 matchResource
在一个请求前缀 <match-resource>!=!
将为这个请求设置匹配资源。
当 matchResource
被设置时,它将被用来与 module.rules
而不是原始资源进行匹配。当如果有更多的 loader 应该应用到资源上,或者需要改变模块的类型,这可能很有用。
例子:
file.js
/*STYLE: body { background: red; } */
console.log('yep');
Loader 可以将该文件转化为以下文件,并使用 matchResource
来应用用户指定的 CSS 处理规则:
file.js (transformed by loader)
import './file.js.css!=!extract-style-loader/getStyles!./file.js';
console.log('yep');
这会将 extract-style-loader/getStyles!./file.js
作为一个依赖添加到编译流程中,并将结果作为 file.js.css
。
当 module.rules
有一个匹配 /\.css$/
的规则时,将会被这个资源命中。
Loader 可以是这样的:
extract-style-loader/index.js
const getStylesLoader = require.resolve('./getStyles');
module.exports = function (source) {
if (STYLES_REGEXP.test(source)) {
source = source.replace(STYLES_REGEXP, '');
return `import ${JSON.stringify(
this.utils.contextify(
this.context || this.rootContext,
`${this.resource}.css!=!${getStylesLoader}!${this.remainingRequest}`,
),
)};${source}`;
}
return source;
};
extract-style-loader/getStyles.js
module.exports = function (source) {
const match = source.match(STYLES_REGEXP);
return match[0];
};