加载器 | Loaders
loader 用于对模块的源代码进行转换。loader 可以使你在 import
或"加载"模块时预处理文件。因此,loader 类似于其他构建工具中“任务(task)”,并提供了处理前端构建步骤的强大方法。loader 可以将文件从不同的语言(如 TypeScript)转换为 JavaScript,或将内联图像转换为 data URL。loader 甚至允许你直接在 JavaScript 模块中 import
CSS文件!
例
例如,您可以使用 loaders来告诉webpack加载CSS文件或将TypeScript转换为JavaScript。要做到这一点,你首先要安装你需要的 loaders:
npm install --save-dev css-loader
npm install --save-dev ts-loader
然后指示webpack对每个.css文件使用css-loader,对所有.ts文件使用ts-loader:
webpack.config.js
module.exports = {
module: {
rules: [
{ test: /\.css$/, use: 'css-loader' },
{ test: /\.ts$/, use: 'ts-loader' }
]
}
};
使用Loaders
有三种方法可以在应用程序中使用Loaders:
- 配置(推荐):在你的webpack.config.js文件中指定它们。
- 内联:在每个
import
语句中明确指定它们。
- CLI:在shell命令中指定它们。
配置
module.rules
允许你在 webpack 配置中指定多个 loader。 这是展示 loader 的一种简明方式,并且有助于使代码变得简洁。同时让你对各个 loader 有个全局概览:
module: {
rules: [
{
test: /\.css$/,
use: [
{ loader: 'style-loader' },
{
loader: 'css-loader',
options: {
modules: true
}
}
]
}
]
}
内联
可以在 import
语句或任何等效于 "import" 的方式中指定 loader。使用 !
将资源中的 loader 分开。分开的每个部分都相对于当前目录解析。
import Styles from 'style-loader!css-loader?modules!./styles.css';
通过前置所有规则及使用 !
,可以对应覆盖到配置中的任意 loader。
选项可以通过查询参数传递,例如?key=value&foo=bar
,或JSON对象,例如?{"key":"value","foo":"bar"}
。
尽可能使用 module.rules
,因为这样可以减少源码中的代码量,并且可以在出错时,更快地调试和定位 loader 中的问题。
CLI
您也可以通过CLI使用加载器:
webpack --module-bind jade-loader --module-bind 'css=style-loader!css-loader'
这会对 .jade
文件使用 jade-loader
,对 .css
文件使用 style-loader
和 css-loader
。
加载程序功能
- loader 支持链式传递。能够对资源使用流水线(pipeline)。一组链式的 loader 将按照相反的顺序执行。loader 链中的第一个 loader 返回值给下一个 loader。在最后一个 loader,返回 webpack 所预期的 JavaScript。
- Loaders可以是同步的或异步的。
- Loaders 在Node.js中运行,并且可以在那里做所有可能的事情。
- 加载程序接受查询参数。这可以用来将配置传递给加载器。
- Loaders 也可以配置一个
options
对象。
- 除了使用
package.json
常见的main
属性,还可以将普通的 npm 模块导出为 loader,做法是在package.json
里定义一个loader
字段。
- 插件可以给Loaders更多的功能。
- Loaders可以发出额外的任意文件。
loader 通过(loader)预处理函数,为 JavaScript 生态系统提供了更多能力。 用户现在可以更加灵活地引入细粒度逻辑,例如压缩、打包、语言翻译和其他更多。
解决型Loaders
loader 模块需要导出为一个函数,并且使用 Node.js 兼容的 JavaScript 编写。通常使用 npm 进行管理,但是也可以将自定义 loader 作为应用程序中的文件。按照约定,loader 通常被命名为 xxx-loader
(例如 json-loader
)。有关详细信息,请查看 如何编写 loader?。
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com