配置文件与常用 Loader:让 Webpack 听懂 TS/CSS
本节目标
- 理解 loader 是什么、为什么需要它
- 会用
module.rules配置 loader - 用
ts-loader让 Webpack 打包 TypeScript
Webpack 默认只认识 JavaScript(和 JSON)。但你的项目里有 .ts、.css、.png、.vue……这些它统统不认。这时候就需要 loader(加载器)——你可以把它想成「翻译官」:每种 loader 负责把某一类文件,转译成 Webpack 能理解的 JS 模块。
// webpack.config.js(片段)
module.exports = {
entry: './src/index.ts',
module: {
// rules 是一组「遇到某种文件,用哪些 loader 处理」的规则
rules: [
{
test: /\.ts$/, // 匹配以 .ts 结尾的文件
use: 'ts-loader', // 用 ts-loader 把它转成 JS
exclude: /node_modules/,
},
],
},
resolve: {
extensions: ['.ts', '.js'], // import 时不写后缀也能解析
},
mode: 'development',
}配套依赖与 tsconfig.json:
# 安装:ts-loader 依赖 typescript 本体
# npm i -D webpack webpack-cli typescript ts-loader// tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"moduleResolution": "Bundler",
"strict": true
}
}test 是正则、use 是 loader 名。Webpack 遇到 import './a.ts' 时,命中 test: /\.ts$/,于是调用 ts-loader 把 TS 编译成 JS,再继续参与打包。这就是「非 JS 资源进入依赖图」的机制。
名词解释
Loader(加载器):Webpack 的「文件翻译官」,把某种类型的资源(TS、CSS、图片…)转成 JS 模块,从而能进入依赖图被打包。
module.rules:配置 loader 的地方,每条规则是一个 { test, use, exclude } 对象,表示「匹配到的文件用某 loader 处理」。
test / use:test 是正则,决定「哪些文件」命中;use 是 loader 列表(从右到左、从下到上执行)。
Source Map(源码映射):把压缩/转译后的代码「映射回」原始源码的对照表,让你在浏览器 DevTools 里能直接调试 .ts 源码而不是看编译产物。
课后练习
练习 1:use: ['style-loader', 'css-loader'] 两个 loader 谁先执行?
答案:数组从右到左执行,所以先
css-loader(把 CSS 解析成 JS 字符串/模块),再style-loader(把样式注入到页面的<style>里)。顺序写反就废了。
练习 2:为什么 exclude: /node_modules/ 几乎是 loader 的标配?
答案:node_modules 里的包通常是「已经编译好的发布版」,再让 ts-loader/babel 转一遍既慢又可能出错。排除它能大幅加快构建,也避免破坏第三方包。
总结
loader 是 Webpack「能处理一切」的秘密武器:test 决定命中谁,use 决定用什么翻译,规则从右往左执行。本节省下的关键认知是——任何非 JS 资源,本质都是「找一个 loader 把它变成 JS 模块」,然后它就能像普通模块一样被 import、被打包。下一节具体到「样式与图片」,把 CSS、图片、字体这些「前端日常」全部接进依赖图。