# webpack4 **Repository Path**: tepno_admin/webpack4 ## Basic Information - **Project Name**: webpack4 - **Description**: webpack4 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-10-25 - **Last Updated**: 2022-09-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: webpack ## README # webpack ## quick-start #### 初始化文件 创建一个项目,项目下文件如下 ```js // src/heading.js export default () => { const element = document.createElement("h2"); element.textContent = "Hello world"; element.addEventListener("click", () => { alert("hello webpack"); }); return element; }; ``` ```js // src/index.js import createHeading from "./heading.js"; const heading = createHeading(); document.body.append(heading); ``` ```html
url-loader 把所匹配的文件转换为DataUrls的方式,文件过大会影响效率
小文件使用Data URLs,减少请求次数
大文件单独提取存放,提高加载数据
```js
module: {
rules: [
{
test: /.jpg$/,
use: {
loader: "url-loader",
options: {
// 添加过滤 10Kb
// 超出的文件 url-loader 会调用 file-loader进行打包,所以需要安装file-loader
limit: 10 * 1024,
},
},
},
],
},
```
## 常用加载器分类
- 编译转换类
- 文件操作类
- 代码检查类
## ES 2015
```js
module: {
rules: [
{
test: /.js$/,
use: {
// 需要安装 babel-loader @babel/core @babel/preset-env
loader: "babel-loader",
options: {
// 使用 @babel/preset-env
presets: "@babel/preset-env",
},
},
},
],
},
```
## 加载资源的方法
- 遵循ES Modules 标准的import声明
- 遵循CommonJs标准的require函数
- 遵循AMD标准的define函数和require函数
- *样式代码中的@import指令和url函数
- *html代码中图片标签的src属性
```css
/* main.css */
@import url(reset.css);
body {
min-height: 100vh;
background: #f4f8fb;
background-image: url(icon.jpg);
background-size: cover;
}
```
```css
/* reset.css */
* {
margin: 0;
padding: 0;
}
```
```js
// main.js
import "./main.css";
import footerHtml from "./footer.html";
document.write(footerHtml);
```
```html
```
```js
// webpack.config.js
...
{
test: /.html$/,
use: {
loader: "html-loader",
options: {
attrs: ["image:src", "a:href"],
},
},
},
```
## 核心工作原理
## 开发一个loader
### markdown-loader
loader 的 工作原理
about.md
```md
tepno 前端迷路人
```js
// markdown-loader.js
const { marked } = require("marked");
// 每个loader都需要去导出一个函数,
// 这个函数就是loader对所接收到的资源的一个处理过程
// 参数为加载到的资源内容
// 输出为此次加工过后的结果
module.exports = (source) => {
// console.log(source);
// return "console.log('hello ~')";
const html = marked.parse(source);
// return html
// return `module.exports = ${JSON.stringify(html)}`;
return `export default ${JSON.stringify(html)}`;
// 返回 html 字符串交给下一个loader处理,需要在use处添加处理的loader, html-loader
// return html;
};
```
```js
// webpack.config.js
{
test: /.md$/,
use: "./markdown-loader", // 可以使用路径
},
```